CN108776594B - 适用于处理器实时控制的软件编程及其汇编链接方法 - Google Patents
适用于处理器实时控制的软件编程及其汇编链接方法 Download PDFInfo
- Publication number
- CN108776594B CN108776594B CN201810569188.XA CN201810569188A CN108776594B CN 108776594 B CN108776594 B CN 108776594B CN 201810569188 A CN201810569188 A CN 201810569188A CN 108776594 B CN108776594 B CN 108776594B
- Authority
- CN
- China
- Prior art keywords
- function
- prog
- reg
- map
- pointer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种适用于处理器实时控制的软件编程及其汇编链接方法,包括以下步骤:将所有函数划分为若干组,汇编器对每个函数定义进行词法及语法分析,并将每个函数的信息均记录于函数信息链表中,其中,每个函数的信息为函数信息链表中的一个节点;同时对每个函数组定义进行分析,将每个函数组的信息记录于函数组信息链表,该方法能够动态调整处理器逻辑地址与物理地址的映射。
Description
技术领域
本发明属于嵌入式系统软件领域,涉及一种适用于处理器实时控制的软件编程及其汇编链接方法。
背景技术
现有一款处理器,其存储器包括SRAM存储器和只读指令存储器(ROM),该处理器特点为所接存储器的物理地址空间大于其逻辑地址空间。为方便下文叙述,指定其逻辑寻址空间大小为64K字节,所接SRAM大小为32K,ROM大小为128K。
在处理器设计上,其逻辑地址的低32K字节被固定映射到SRAM存储器,高32K字节为用户程序USER_PROGRAM空间,映射到ROM特定的段,每个段大小为32K。逻辑地址高32K字节到存储器物理地址的映射关系通过一个空间映射寄存器MAP_REG控制,其关系如下:
physical_addr=(MAP_REG-1)*0x8000+logicl_addr
physical_addr表示ROM存储器物理地址,logical_addr表示高32K逻辑地址,MAP_REG寄存器存储处理器当前映射的ROM段的基址,控制物理地址起始位置相对于逻辑地址的偏移。
在实际使用中,该处理器的应用环境要求对程序的执行时间进行精确控制,即每组任务的执行时间应少于指定的时间。且在装载可执行程序时,程序的大小会大于32K字节,所以要求对处理器的逻辑地址与物理地址的映射进行动态调度以加载相应的函数,然而现有公开文件中没有出现相应的技术。
发明内容
本发明的目的在于克服上述现有技术的缺点,提供了一种适用于处理器实时控制的软件编程及其汇编链接方法,该方法能够动态调整处理器逻辑地址与物理地址的映射。
为达到上述目的,本发明所述的适用于处理器实时控制的软件编程方法包括以下步骤:
将所有函数划分为若干组,汇编器对每个函数定义进行词法及语法分析,并将每个函数的信息均记录于函数信息链表中,其中,每个函数的信息为函数信息链表中的一个节点;同时对每个函数组定义进行分析,将每个函数组的信息记录于函数组信息链表。
每个函数的信息均包括函数的函数名、函数包含的指令的机器码、函数的起始物理地址及函数的结束物理地址。
每个函数组的信息均包括函数组id以及函数组包含的函数名。
本发明所述的适用于处理器实时控制的汇编链接方法包括以下步骤:
在ROM中定义函数入口地址数组USR_PROG_ARR及空间映射配置数组MAP_REG_ARR,其中,通过USR_PROG_ARR数组记录每个函数的起始物理地址,同时通过USR_PROG_ARR数组按顺序连续存放各个函数组中的函数,每个函数组起始处对应的元素为该函数组的id;MAP_REG_ARR数组记录每个函数所在的ROM段的基址,MAP_REG_ARR数组中的元素与USR_PROG_ARR数组中的函数一一对应,MAP_REG_ARR数组中的元素值由函数的起始物理地址与ROM段的大小相除再取整得到,MAP_REG_ARR数组中的元素值与MAP_REG寄存器中的值一致,然后通过内核程序执行函数组的运行调度。
通过内核程序执行函数组的运行调度的具体操作为:
1)内核程序定义指针USR_PROG_POINTER及MAP_REG_POINTER,USR_PROG_POINTER的初始位置指向USR_PROG_ARR数组的头部,MAP_REG_POINTER的初始位置指向MAP_REG_ARR数组的头部,当执行函数组调用时,则转至步骤2);
2)USR_PROG_POINTER加1;
3)判断USR_PROG_POINTER指向函数组的位置,当USR_PROG_POINTER指向函数组的id标识时,表明已经完成了该函数组的调用,则退出此次函数组的调用;当USR_PROG_POINTER没有指向函数组的id标识时,表明此时USR_PROG_POINTER指向函数组中某个函数的入口地址,则转至步骤4):
4)取MAP_REG_POINTER指向的函数组中的数据,并将MAP_REG_POINTER指向的函数组中的数据赋值给空间映射寄存器MAP_REG;
5)MAP_REG_POINTER加1,以指向下一个函数所在的ROM段基址;
6)取USR_PROG_POINTER指向的函数组中的数据,并调用该函数;
7)重复步骤2)至步骤6),直至完成该函数组的调用为止;
8)USR_PROG_POINTER加1,然后转至步骤3),直至完成所有函数组的调用为止。
本发明具有以下有益效果:
本发明所述的适用于处理器实时控制的软件编程及其汇编链接方法在具体操作时,通过预先将实际应用中每个任务应执行的多个函数配置为一个函数组,通过对函数组的设计及定义,在处理器逻辑寻址空间有限的情况下,通过动态调整处理器逻辑地址到ROM物理地址的映射,实现可装载执行ROM中任意位置函数的目的。
附图说明
图1为函数组调用设计及实现过程的示意图;
图2为逻辑地址与物理地址分段及映射关系图;
图3为函数入口地址数组USR_PROG_ARR的示意图;
图4为内核程序进行函数组调用流程图。
具体实施方式
下面结合附图对本发明做进一步详细描述:
参考图1,首先是处理器逻辑地址与物理地址的映射,其中,处理器的逻辑寻址空间为64K字节,该64K空间被划分为两个逻辑子空间,低32K为RAM空间,映射到一个32K的SRAM存储器;高32K为用户程序USER_PROGRAM空间,映射到ROM的特定位置。
参考图2,ROM物理空间大于32K字节,负责存储可执行应用程序代码,根据处理器的架构特点,将ROM分为N个段:USER_SEGM_1到USER_SEGM_N,每个段大小均为32K,且在功能上是等价的。在程序执行过程中,可以通过配置空间映射寄存器MAP_REG,改变处理器当前的段基址,实现将高32K逻辑子空间映射到ROM中特定的物理段。
将汇编代码转换为可执行程序分为汇编级链接两个步骤,汇编阶段的主要工作是词法分析、语法分析、语义分析以及目标代码的生成,在进行分析时,还要负责代码的错误诊断、处理以及符号表的管理。链接阶段的主要工作是符号的解析、重定位以及可执行文件的生成,同时也要负责部分错误诊断及处理工作。
本发明在定义汇编函数时,会显式地定义其存储的起始物理地址,汇编器在汇编时,以链表的形式存储每个函数的信息,每个函数为链表中的一个节点。节点存储的信息包括函数名、函数内各个指令的机器码数组、函数的起始及结束物理地址,其中,函数的结束物理地址由起始物理地址加上函数内部所有指令所占的总空间得到。各个函数组的信息同样以链表的形式存储,链表中每个函数组节点存储的信息包括函数组标识fun_group_id及函数名数组。
同一个函数组中的不同函数存储在ROM的不同物理段,但同一个函数不能跨段存储。所以对于每个函数,用户在编写程序时要保证其起始和结束指令处于同一个ROM段。汇编器在解析函数定义时,会对此部分进行检查,若函数起始及结束物理地址不在同一个段,则报错退出。
汇编语法规定:函数组定义中的函数名必须在当前汇编工程存在该函数定义。因此汇编阶段完成后,在链接阶段要对函数组信息链表的每个节点进行检查,遍历每个节点的函数名数组,对数组中的每个函数名,在函数信息链表中查找是否存在相应的元素,如不存在则报错退出。
具体的,本发明所述的适用于处理器实时控制的软件编程方法包括以下步骤:
将所有函数划分为若干组,汇编器对每个函数定义进行词法及语法分析,并将每个函数的信息均记录于函数信息链表中,其中,每个函数的信息为函数信息链表中的一个节点,每个函数的信息均包括函数的函数名、函数包含的指令的机器码、函数的起始物理地址及函数的结束物理地址;同时对每个函数组定义进行分析,将每个函数组的信息记录于函数组信息链表,其中,每个函数组的信息均包括函数组id以及函数组包含的函数名。
本发明所述的适用于处理器实时控制的汇编链接方法包括以下步骤:
在ROM中定义函数入口地址数组USR_PROG_ARR及空间映射配置数组MAP_REG_ARR,其中,通过USR_PROG_ARR数组记录每个函数的起始物理地址,同时通过USR_PROG_ARR数组按顺序连续存放各个函数组中的函数,每个函数组起始处对应的元素为该函数组的id;MAP_REG_ARR数组记录每个函数所在的ROM段的基址,MAP_REG_ARR数组中的元素与USR_PROG_ARR数组中的函数一一对应,MAP_REG_ARR数组中的元素值由函数的起始物理地址与ROM段的大小相除再取整得到,MAP_REG_ARR数组中的元素值与MAP_REG寄存器中的值一致,然后通过内核程序执行函数组的运行调度。
通过内核程序执行函数组的运行调度的具体操作为:
1)内核程序定义指针USR_PROG_POINTER及MAP_REG_POINTER,USR_PROG_POINTER的初始位置指向USR_PROG_ARR数组的头部,MAP_REG_POINTER的初始位置指向MAP_REG_ARR数组的头部,当执行函数组调用时,则转至步骤2);
2)USR_PROG_POINTER加1;
3)判断USR_PROG_POINTER指向函数组的位置,当USR_PROG_POINTER指向函数组的id标识时,表明已经完成了该函数组的调用,则退出此次函数组的调用;当USR_PROG_POINTER没有指向函数组的id标识时,表明此时USR_PROG_POINTER指向函数组中某个函数的入口地址,则转至步骤4):
4)取MAP_REG_POINTER指向的函数组中的数据,并将MAP_REG_POINTER指向的函数组中的数据赋值给空间映射寄存器MAP_REG;
5)MAP_REG_POINTER加1,以指向下一个函数所在的ROM段基址;
6)取USR_PROG_POINTER指向的函数组中的数据,并调用该函数;
7)重复步骤2)至步骤6),直至完成该函数组的调用为止;
8)USR_PROG_POINTER加1,然后转至步骤3),直至完成所有函数组的调用为止。
Claims (2)
1.一种适用于处理器实时控制的汇编链接方法,其特征在于,基于适用于处理器实时控制的软件编程方法,所述适用于处理器实时控制的软件编程方法包括以下步骤:
将所有函数划分为若干组,汇编器对每个函数定义进行词法及语法分析,并将每个函数的信息均记录于函数信息链表中,其中,每个函数的信息为函数信息链表中的一个节点;同时对每个函数组定义进行分析,将每个函数组的信息记录于函数组信息链表;
每个函数的信息均包括函数的函数名、函数包含的指令的机器码、函数的起始物理地址及函数的结束物理地址;
每个函数组的信息均包括函数组id以及函数组包含的函数名;
包括以下步骤:
在ROM中定义函数入口地址数组USR_PROG_ARR及空间映射配置数组MAP_REG_ARR,其中,通过USR_PROG_ARR数组记录每个函数的起始物理地址,同时通过USR_PROG_ARR数组按顺序连续存放各个函数组中的函数,每个函数组起始处对应的元素为该函数组的id;MAP_REG_ARR数组记录每个函数所在的ROM段的基址,MAP_REG_ARR数组中的元素与USR_PROG_ARR数组中的函数一一对应,MAP_REG_ARR数组中的元素值由函数的起始物理地址与ROM段的大小相除再取整得到,MAP_REG_ARR数组中的元素值与MAP_REG寄存器中的值一致,然后通过内核程序执行函数组的运行调度。
2.根据权利要求1所述的适用于处理器实时控制的汇编链接方法,其特征在于,通过内核程序执行函数组的运行调度的具体操作为:
1)内核程序定义指针USR_PROG_POINTER及MAP_REG_POINTER,USR_PROG_POINTER的初始位置指向USR_PROG_ARR数组的头部,MAP_REG_POINTER的初始位置指向MAP_REG_ARR数组的头部,当执行函数组调用时,则转至步骤2);
2)USR_PROG_POINTER加1;
3)判断USR_PROG_POINTER指向函数组的位置,当USR_PROG_POINTER指向函数组的id标识时,表明已经完成了该函数组的调用,则退出此次函数组的调用;当USR_PROG_POINTER没有指向函数组的id标识时,表明此时USR_PROG_POINTER指向函数组中某个函数的入口地址,则转至步骤4):
4)取MAP_REG_POINTER指向的函数组中的数据,并将MAP_REG_POINTER指向的函数组中的数据赋值给空间映射寄存器MAP_REG;
5)MAP_REG_POINTER加1,以指向下一个函数所在的ROM段基址;
6)取USR_PROG_POINTER指向的函数组中的数据,并调用该函数;
7)重复步骤2)至步骤6),直至完成该函数组的调用为止;
8)USR_PROG_POINTER加1,然后转至步骤3),直至完成所有函数组的调用为止。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810569188.XA CN108776594B (zh) | 2018-06-05 | 2018-06-05 | 适用于处理器实时控制的软件编程及其汇编链接方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810569188.XA CN108776594B (zh) | 2018-06-05 | 2018-06-05 | 适用于处理器实时控制的软件编程及其汇编链接方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108776594A CN108776594A (zh) | 2018-11-09 |
CN108776594B true CN108776594B (zh) | 2021-02-09 |
Family
ID=64024721
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810569188.XA Active CN108776594B (zh) | 2018-06-05 | 2018-06-05 | 适用于处理器实时控制的软件编程及其汇编链接方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108776594B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661397A (zh) * | 2008-08-29 | 2010-03-03 | 宇龙计算机通信科技(深圳)有限公司 | 实现程序动态加载的方法和生成映射文件的方法及设备 |
GB2523205A (en) * | 2014-03-18 | 2015-08-19 | Imagination Tech Ltd | Efficient calling of functions on a processor |
CN105739992A (zh) * | 2016-02-26 | 2016-07-06 | 珠海煌荣集成电路科技有限公司 | 基于gcc编译器的软件控制内存分拆和映射的方法及系统 |
CN106844310A (zh) * | 2017-01-22 | 2017-06-13 | 南京南瑞继保电气有限公司 | 一种结构化文本代码处理方法和系统 |
-
2018
- 2018-06-05 CN CN201810569188.XA patent/CN108776594B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661397A (zh) * | 2008-08-29 | 2010-03-03 | 宇龙计算机通信科技(深圳)有限公司 | 实现程序动态加载的方法和生成映射文件的方法及设备 |
GB2523205A (en) * | 2014-03-18 | 2015-08-19 | Imagination Tech Ltd | Efficient calling of functions on a processor |
CN105739992A (zh) * | 2016-02-26 | 2016-07-06 | 珠海煌荣集成电路科技有限公司 | 基于gcc编译器的软件控制内存分拆和映射的方法及系统 |
CN106844310A (zh) * | 2017-01-22 | 2017-06-13 | 南京南瑞继保电气有限公司 | 一种结构化文本代码处理方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN108776594A (zh) | 2018-11-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPH01166141A (ja) | デバッグ情報提供方法 | |
US11579856B2 (en) | Multi-chip compatible compiling method and device | |
CN110990019B (zh) | 一种Java类分析方法、装置、存储介质及电子设备 | |
EP3387536B1 (en) | Method and device for non-intrusively collecting function trace data | |
CN109308213B (zh) | 基于改进任务调度机制的多任务断点调试方法 | |
US20060101437A1 (en) | Data processing device and method | |
CN108021357A (zh) | 程序调用的优化方法及装置 | |
CN111666210A (zh) | 一种芯片验证方法及装置 | |
GB2348305A (en) | Instruction execution mechanism | |
CN103677778A (zh) | 一种CAP文件Classref常量的解析方法 | |
US9910418B2 (en) | Method and programming system for programming an automation component | |
US6334212B1 (en) | Compiler | |
CN110488738A (zh) | 一种代码生成方法及装置 | |
CN108776594B (zh) | 适用于处理器实时控制的软件编程及其汇编链接方法 | |
US20180321932A1 (en) | Method, device and related system for dynamically repairing application | |
CN110737603B (zh) | 一种替换rom中函数的方法及装置 | |
CN110990018B (zh) | 一种嵌入式系统的编译方法及编译系统 | |
CN114995226A (zh) | 一种针对航天嵌入式设备的流程控制系统及方法 | |
CN113296788B (zh) | 指令调度方法、装置、设备及存储介质 | |
CN109932997B (zh) | 一种可编程逻辑控制器内核系统 | |
CN107341002B (zh) | 一种内存访问方法 | |
JP5021584B2 (ja) | マイコンシミュレータ、そのシミュレーション方法、プログラム、及びコンピュータ読み取り可能な媒体 | |
US6311227B1 (en) | Procedure calling method | |
CN111221535B (zh) | 线程分配方法、服务器及计算机可读存储介质 | |
JPH11345127A (ja) | コンパイラ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |