CN100573452C - 一种嵌入式设备中调用外部存储介质中应用程序的方法 - Google Patents
一种嵌入式设备中调用外部存储介质中应用程序的方法 Download PDFInfo
- Publication number
- CN100573452C CN100573452C CNB200710120844XA CN200710120844A CN100573452C CN 100573452 C CN100573452 C CN 100573452C CN B200710120844X A CNB200710120844X A CN B200710120844XA CN 200710120844 A CN200710120844 A CN 200710120844A CN 100573452 C CN100573452 C CN 100573452C
- Authority
- CN
- China
- Prior art keywords
- application program
- master routine
- space
- interrupt vector
- vector table
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种嵌入式设备中调用外部存储介质中应用程序的方法。该方法包括步骤:a.将应用程序的代码和关键数据调入到主程序空间中,复用主程序运行数据空间;b.备份系统栈,并跳转到应用程序;c.返回主程序,并且还原系统栈。由于采用了该方法,仅通过简单的编译限定,即实现了主程序的编译过程与应用程序分离、主程序自由加载应用程序并可以退出的应用目的。
Description
技术领域
本发明涉及嵌入式设备的应用,具体涉及一种嵌入式设备中调用外部存储介质中应用程序的方法。
背景技术
对于嵌入式设备,往往要根据市场的需求添加新的功能。一般情况下,新的功能往往跟随主程序进行发布。但是随着功能的增加,会使主系统设计变得复杂。模块化的代码虽然在一定程度上可以相对简化流程、但也会造成主程序变得庞大,系统各个部分的关联性上升,造成开发和维护的时间延长、成本增加,所以,有必要分离主程序和应用程序,将两部分程序独立开发,在使用时利用主程序加载应用程序。
在现有的嵌入式设备应用中,加载程序从被加载的程序中返回一般通过使用一个完整的商用操作系统(如linux操作系统)来完成。使用这些操作系统要支付一定的费用,而且需要一个强大的MCU处理器,这些都会增加系统的成本,影响产品的市场竞争力。
而在不使用商用操作系统以及使用不含MMU功能的MCU处理器的低成本嵌入式设备应用上,编译器编译出的代码是使用绝对地址的。如果要加载应用程序并能正确退出,就必须考虑空间复用、应用程序初始化,以及恢复主程序状态等因素。解决了这些问题,加载应用程序的过程才能正确执行。
发明内容
本发明的目的在于提供一种嵌入式设备中调用外部存储介质中应用程序的方法,以解决在不附加商用操作系统且使用不支持MMU功能的MCU处理器的低成本嵌入式设备下加载外部存储介质中应用程序的问题。
为了达到上述目的,本发明提供了一种嵌入式设备中调用外部存储介质中应用程序的方法。该方法包括步骤:a.将应用程序的代码和关键数据调入到主程序空间中,复用主程序运行数据空间;b.备份系统栈,并跳转到应用程序;c.返回主程序,并且还原系统栈。
由于采用了上述技术方案,仅通过简单的编译限定,即实现了主程序的编译过程与应用程序分离、主程序自由加载应用程序并可以退出的应用目的。
附图说明
下面将参照附图对本发明的具体实施方案进行更详细的说明,其中:
图1是根据本发明的一个实施例的程序空间分配图;
图2是根据本发明的一个实施例的主程序调用应用程序流程图。
具体实施方式
图1是程序空间分配图。
如图1所示,主程序编译时,在嵌入式设备的存储空间中分配主程序空间。并将主程序空间划分为一级中断向量表102、二级中断向量表104、主程序代码空间106、主程序关键数据空间108、主程序运行数据空间110和数据交换区112。主程序运行时,主程序空间状态不变。
其中,主程序代码空间106是主程序存储运行的空间。
主程序关键数据空间108是主程序的变量与要保存的数据空间,也就是系统变量的位置。
主程序运行数据空间110包括图像显示缓冲、声音播放缓冲、临时数据缓冲等在切换程序时不需要保存的数据。
一级中断向量表102是真正硬件中断的产生位置,它的功能是跳转到二级中断向量表的位置。
二级中断向量表103存储记载中断服务程序入口地址的中断向量,它的作用是根据中断向量跳转到相应的中断服务程序的指定的代码区域。
数据交换区112用于主程序调用应用程序时传递所需数据。
应用程序运行时,主程序空间状态发生变化。
应用程序的一级中断向量表和二级中断向量表复用主程序的空间。特别的,应用程序的一级中断向量表与主程序的一级中断向量表102相同。应用程序的二级中断向量表复用主程序的二级中断向量表104,形成应用程序的二级中断向量表1040。
应用程序的代码和关键数据空间复用主程序的运行数据空间110,形成应用程序代码空间1100和应用程序关键数据空间1102。
主程序代码空间106、主程序关键数据空间108以及数据交换区112不变。
在应用程序独立编译成功后,将一个特殊的汇编文件添加到整个工程中。此汇编文件含有两个记录,一是用于写入应用程序的初始入口地址;另一是用于从数据交换区中读取应用程序返回时的地址,并根据此地址返回主程序。
添加完成后,将此时的应用程序文件重新编译生成一个烧录文件。在一个例子中,将应用程序文件编译生成一个标准bin文件。在另一个例子中,将应用程序文件编译生成一个标准hex文件。编译生成的应用程序bin文件中,包含应用程序的一级中断向量表、二级中断向量表、应用程序代码、应用程序关键数据以及应用程序的初始入口地址、从数据交换区读取应用程序返回时的地址的指令和根据此地址返回主程序的指令。
图2是主程序调用应用程序流程图。
如图2所示,在步骤202,当主程序要调用应用程序时,主程序首先关闭所有用到主程序运行数据空间110的应用,使运行数据空间110空闲。
在步骤204,为了避免应用程序初始化影响到主程序的数据,不能使应用程序的代码和数据空间复用主程序的代码和数据空间。在本发明中,将应用程序bin文件中的代码和关键数据调入,复用原主程序空间的运行数据空间110。
在步骤206,将需要与应用程序传递的参数写入数据交换区。
在步骤208,关闭中断。
在步骤210,调入应用程序bin文件中的一级中断向量表和二级中断向量表。应用程序bin文件中的一级中断向量表与原主程序空间的一级中断向量表102相同;将原主程序的二级中断向量表104更新为应用程序的二级中断向量表1040。
在步骤212,由于一旦启动应用程序后,系统栈可能遭到破坏,即CPU的状态信息可能遭到破坏,在应用程序调用结束后就无法回到原来的状态。因此,在跳转到应用程序之前将系统栈完整的备份出来并保存,以便以后还原。
在步骤214,主程序向数据交换区写入应用程序返回时的地址。
在步骤216,主程序从应用程序bin文件中读取应用程序的初始入口地址,根据此地址跳转到应用程序的入口。此时,由应用程序接管系统的控制权。
在步骤218,应用程序打开中断。
在步骤220,应用程序执行自身内容。
在步骤222,执行完成自身内容后,从数据交换区读取应用程序返回时的地址,并根据此地址返回主程序。
在步骤224,关闭中断。
在步骤226,还原系统栈。
在步骤228,将二级中断向量表恢复为主程序的二级中断向量表104。
在步骤230,打开中断。
此时,完成调用应用程序的过程,主程序继续运行。
显而易见,在此描述的本发明可以有许多变化,这种变化不能认为偏离本发明的精神和范围。因此,所有对本领域技术人员显而易见的改变,都包括在本权利要求书的涵盖范围之内。
Claims (6)
1.一种嵌入式设备中调用外部存储介质中应用程序的方法,其特征在于:
a.将应用程序的代码和关键数据调入到主程序空间中,复用主程序运行数据空间;其中,所述应用程序的代码和关键数据从编译生成的应用程序烧录文件中调用;
b.备份系统栈,并从所述应用程序烧录文件中读取应用程序的初始入口地址以跳转到该应用程序中;
c.读取主程序向数据交换区写入应用程序返回时的地址,并根据该地址返回主程序,然后还原系统栈。
2.如权利要求1所述的方法,其特征在于,包括在将应用程序的代码和关键数据调入到主程序运行数据空间前将所有用到主程序运行数据空间的应用关闭的步骤,以使主程序运行数据空间空闲。
3.如权利要求1所述的方法,其特征在于,所述主程序空间包括:二级中断向量表;步骤b还包括关闭中断,并将二级中断向量表更新为应用程序的二级中断向量表的步骤;步骤c还包括关闭中断,并恢复主程序的二级中断向量表的步骤。
4.如权利要求1所述的方法,其特征在于,所述应用程序烧录文件是在应用程序独立编译后再添加一个汇编文件进行编译得来,此汇编文件含有两个记录,一是用于写入所述应用程序的初始入口地址,另一是用于从所述数据交换区中读取应用程序返回时的地址。
5.如权利要求4所述的方法,其特征在于,所述编译生成的应用程序烧录文件是标准bin文件,或标准hex文件。
6.如权利要求1所述的方法,其特征在于,所述主程序空间在主程序编译时分配。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200710120844XA CN100573452C (zh) | 2007-08-28 | 2007-08-28 | 一种嵌入式设备中调用外部存储介质中应用程序的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200710120844XA CN100573452C (zh) | 2007-08-28 | 2007-08-28 | 一种嵌入式设备中调用外部存储介质中应用程序的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101110037A CN101110037A (zh) | 2008-01-23 |
CN100573452C true CN100573452C (zh) | 2009-12-23 |
Family
ID=39042119
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB200710120844XA Expired - Fee Related CN100573452C (zh) | 2007-08-28 | 2007-08-28 | 一种嵌入式设备中调用外部存储介质中应用程序的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100573452C (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105630422B (zh) * | 2015-12-28 | 2018-07-24 | 飞天诚信科技股份有限公司 | 一种基于小容量处理器实现多应用的方法及设备 |
-
2007
- 2007-08-28 CN CNB200710120844XA patent/CN100573452C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101110037A (zh) | 2008-01-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9021512B1 (en) | Runtime management of TOC pointer save and restore commands | |
KR101032563B1 (ko) | 데이터 프로세싱 장치, 머신 구현형 방법 및 컴퓨터 판독가능 매체 | |
US8756590B2 (en) | Binding data parallel device source code | |
US8166194B2 (en) | Lock-free shared audio buffer | |
CN101183345B (zh) | 控制非易失性存储器中的操作处理的设备和方法 | |
EP1711890A2 (en) | Methods and apparatus to provide a modular native method invocation system | |
US20140130026A1 (en) | Operand and limits optimization for binary translation system | |
CN110554998B (zh) | 一种通过替换函数内部指令的钩子方法、装置、终端及存储介质 | |
CN101645003A (zh) | 软件移植方法及装置 | |
CN110716845A (zh) | 一种Android系统的日志信息读取的方法 | |
CN103218428A (zh) | 一种动态链接方法及系统 | |
CN101236489B (zh) | 虚拟硬件系统及其指令执行方法、以及虚拟机 | |
CN100573452C (zh) | 一种嵌入式设备中调用外部存储介质中应用程序的方法 | |
CN105824750A (zh) | 一种在NorFlash程序空间调试的软断点模拟方法 | |
CN104063234A (zh) | 一种兼容方法及装置 | |
CN107391190A (zh) | 一种程序模块动态装载方法 | |
KR20110052902A (ko) | 컴퓨팅 시스템 및 컴퓨팅 시스템의 메모리 관리 방법 | |
CN102253884A (zh) | 模拟单板软件运行环境的方法及装置 | |
KR20100050098A (ko) | 영상처리장치 및 그 제어 방법 | |
JP4852309B2 (ja) | 資産管理装置及び資産管理方法 | |
JP5987501B2 (ja) | 分岐アドレス管理プログラム、方法、及び装置 | |
US8739140B2 (en) | Conflict resolution in applications | |
CN101107591B (zh) | 计算机系统和用于启动其中的基本程序的方法 | |
JP4846226B2 (ja) | 情報処理装置、情報処理方法、およびプログラム | |
WO2004017200A1 (ja) | 情報処理方法とその方法を実現するプログラム及び記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20091223 Termination date: 20160828 |
|
CF01 | Termination of patent right due to non-payment of annual fee |