一种嵌入式设备中调用外部存储介质中应用程序的方法

文档序号:6610230阅读:381来源:国知局
专利名称:一种嵌入式设备中调用外部存储介质中应用程序的方法
技术领域
本发明涉及嵌入式设备的应用,具体涉及一种嵌入式设备中调 用外部存储介质中应用程序的方法.背景技术对于嵌入式设备,往往要根据市场的需求添加新的功能.一 般情况下,新的功能往往跟随主程序进行发布。但是随着功能的 增加,会使主系统设计变得复杂。模块化的代码虽然在一定程度 上可以相对简化流程、但也会造成主程序变得庞大,系统各个部 分的关联性上升,造成开发和维护的时间延长、成本增加,所以, 有必要分离主程序和应用程序,将两部分程序独立开发,在使用 时利用主程序加载应用程序.在现有的嵌入式设备应用中,加载程序从被加载的程序中返回一般通过使用一个完整的商用操作系统(如linux操作系统)来 完成.使用这些操作系统要支付一定的费用,而且需要一个强大 的MCU处理器,这些都会增加系统的成本,影响产品的市场竟争 力。而在不使用商用操作系统以及使用不含MMU功能的MCU处理 器的低成本嵌入式设备应用上,编译器编译出的代码是使用绝对 地址的.如果要加载应用程序并能正确退出,就必须考虑空间复 用、应用程序初始化,以及恢复主程序状态等因素。解决了这些 问题,加载应用程序的过程才能正确执行。发明内容本发明的目的在于提供一种嵌入式设备中调用外部存储介质 中应用程序的方法,以解决在不附加商用操作系统且使用不支持 MMU功能的MCU处理器的低成本嵌入式设备下加栽外部存储介质中
应用程序的问题.为了达到上述目的,本发明提供了一种嵌入式设备中调用外部存储介质中应用程序的方法.该方法包括步骤a.将应用程序 的代码和关键数据调入到主程序空间中,复用主程序运行数据空 间;b.备份系统栈,并跳转到应用程序;c.返回主程序,并且 还原系统栈.由于采用了上述技术方案,仅通过简单的编译限定,即实现 了主程序的编译过程与应用程序分离、主程序自由加载应用程序 并可以退出的应用目的。


下面将参照附图对本发明的具体实施方案进行更详细的说 明,其中图l是根据本发明的一个实施例的程序空间分配图;图2是根据本发明的一个实施例的主程序调用应用程序流程图。
具体实施方式
图l是程序空间分配图.如图1所示,主程序编译时,在嵌入式设备的存储空间中分 配主程序空间.并将主程序空间划分为一级中断向量表102、 二级 中断向量表104、主程序代码空间106、主程序关键数据空间108、 主程序运行数据空间IIO和数据交换区112。主程序运行时,主程 序空间状态不变.其中,主程序代码空间106是主程序存储运行的空间。主程序关键数据空间108是主程序的变量与要保存的数据空 间,也就是系统变量的位置。主程序运行数据空间110包括图像显示緩冲、声音播放緩冲、 临时数据緩冲等在切换程序时不需要保存的数据。一级中断向量表102是真正硬件中断的产生位置,它的功能 是跳转到二级中断向量表的位置,二级中断向量表103存储记载中断服务程序入口地址的中断 向量,它的作用是根据中断向量跳转到相应的中断服务程序的指 定的代码区域.数据交换区112用于主程序调用应用程序时传递所需数据.应用程序运行时,主程序空间状态发生变化.应用程序的一级中断向量表和二级中断向量表复用主程序的 空间.特别的,应用程序的一级中断向量表与主程序的一级中断 向量表102相同.应用程序的二级中断向量表复用主程序的二级 中断向量表104,形成应用程序的二级中断向量表1040。应用程序的代码和关键数据空间复用主程序的运行数据空间 IIO,形成应用程序代码空间IIOO和应用程序关键数据空间1102。主程序代码空间106、主程序关键数据空间108以及数据交换 区112不变.在应用程序独立编译成功后,将一个特殊的汇编文件添加到 整个工程中.此汇编文件含有两个记录, 一是用于写入应用程序 的初始入口地址;另一是用于从数据交换区中读取应用程序返回 时的地址,并根据此地址返回主程序.添加完成后,将此时的应用程序文件重新编译生成一个烧录 文件。在一个例子中,将应用程序文件编译生成一个标准bin文 件,在另一个例子中,将应用程序文件编译生成一个标准hex文 件.编译生成的应用程序bin文件中,包含应用程序的一级中断 向量表、二级中断向量表、应用程序代码、应用程序关键数据以 及应用程序的初始入口地址、从数据交换区读取应用程序返回时 的地址的指令和根据此地址返回主程序的指令.图2是主程序调用应用程序流程图。如图2所示,在步骤202,当主程序要调用应用程序时,主程 序首先关闭所有用到主程序运行数据空间110的应用,4吏运行数 据空间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,打开中断.此时,完成调用应用程序的过程,主程序继续运行。 显而易见,在此描述的本发明可以有许多变化,这种变化不 能认为偏离本发明的精神和范围。因此,所有对本领域技术人员
显而易见的改变,都包括在本权利要求书的涵盖范围之内.
权利要求
1.一种嵌入式设备中调用外部存储介质中应用程序的方法,其特征在于a.将应用程序的代码和关键数据调入到主程序空间中,复用主程序运行数据空间;b.备份系统栈,并跳转到应用程序;c.返回主程序,并且还原系统栈。
2. 如权利要求1所述的方法,其特征在于,包括在将应用程序的代码 和关键数据调入到主程序运行数据空间前将所有用到主程序运行数据空 间的应用关闭的步骤,以使主程序运行数据空间空闲。
3. 如权利要求1所述的方法,其特征在于,所述主程序空间包括二 级中断向量表;步骤b还包括关闭中断,并将二级中断向量表更新为应 用程序的二级中断向量表的步骤;步骤c还包括关闭中断,并恢复主程 序的二级中断向量表的步骤.
4. 如权利要求1所述的方法,其特征在于,所述应用程序的代码和关 键数据是从编译生成的应用程序烧录文件中调出。
5. 如权利要求4所述的方法,其特征在于,所述应用程序烧录文件是 在应用程序独立编译后再添加一个汇编文件进行编译得来.
6. 如权利要求5所述的方法,其特征在于,所述汇编文件包含了一个 记录,用于写入应用程序的初始入口地址;并且步骤b还包括从应用程 序烧录文件中读取此地址,并跳转到应用程序的步骤。
7. 如权利要求5所述的方法,其特征在于,所述汇编文件还包含了另 一组指令,用于从数据交换区中读取应用程序返回时的地址,并根据此 地址返回主程序;并且步骤b还包括读取主程序向数据交换区写入应用 程序返回时的地址的步骤.
8. 如权利要求1所述的方法,其特征在于,所述编译生成的应用程序 烧录文件是标准bin文件,或标准hex文件。
9. 如权利要求1所述的方法,其特征在于,所述主程序空间在主程序 编译时分配。
全文摘要
本发明提供了一种嵌入式设备中调用外部存储介质中应用程序的方法。该方法包括步骤a.将应用程序的代码和关键数据调入到主程序空间中,复用主程序运行数据空间;b.备份系统栈,并跳转到应用程序;c.返回主程序,并且还原系统栈。由于采用了该方法,仅通过简单的编译限定,即实现了主程序的编译过程与应用程序分离、主程序自由加载应用程序并可以退出的应用目的。
文档编号G06F9/46GK101110037SQ20071012084
公开日2008年1月23日 申请日期2007年8月28日 优先权日2007年8月28日
发明者岩 史, 钧 敖 申请人:北京海尔集成电路设计有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1