当前位置:必发彩票官网 > 次动作函数 >

中断调用方式的ARM二次开发接口设计

  芯片的可编程智能嵌入式设备在我们的日常生活中扮演着越来越重要的角色。由于程序的设计者在设计软件程序和功能的时候,所针对的对象是社会上的通常情况,并没有根据最终不同的使用者来加以设计,因此各个软件的实际使用者在使用软件时会根据自己的使用要求和市场需求预测,对软件再加以开发,即俗称的二次开发[1]。如今,Android系统和苹果产品等都给用户提供开发平台,便于用户开发自己的程序。为了适应用户简易嵌入式应用程序的开发,缩短二次开发周期,开发一种低成本的专用嵌入式二次开发工具就显得十分必要。其中,二次开发工具最重要的部分就是二次开发接口的设计。

  通过对现有嵌入式二次开发技术的研究发现3个问题。问题一,现有嵌入式二次开发技术主要是直接给用户提供系统函数的OBJ中间文件,以及函数声明的头文件。用户通过调用系统函数编写自己的程序,进行编译链接后直接烧录进芯片进行使用,但是这样会造成芯片存储空间的浪费。问题二是系统程序函数的安全问题,它直接给用户提供系统OBJ中间文件,通过反编译能够很容易地破解出原有系统函数,系统程序的保密性将大大地降低。问题三是用户编写程序的复杂性问题,一般专业的嵌入式工程师编写的系统函数考虑到重用性,会把一些过程细分为多个子函数,普通用户为实现一个功能也需要调用多个函数,对于二次开发十分不利。函数一般采用嵌入式专业术语进行命名,普通用户很难通过函数名直接了解此函数具体的用途。

  二次开发接口的构架如图1所示,通过二次开发接口可以轻松地实现系统程序和用户应用程序的分离。

  通过这种应用程序和系统程序的分离方式,可以轻松地实现系统程序的升级和应用程序的通用。

  1和Funtion3这2个函数,则在编译应用程序文件的时候,编译器会从系统提供的OBJ文件中把Funtion1和Funtion3这2个函数的实体再次编译链接进入bin文件,从而造成bin文件的冗余。当把应用程序的bin文件烧录至Flash中时会浪费大量的空间资源。其结果如图2所示。

  针对Flash的冗余问题,笔者提出了一个方案,就是在应用程序中保存的不是系统函数本身,而是其地址,当运行到那个函数的时候则实现跳转到指定地址,函数运行完成后跳转回来,应用程序继续执行下去。

  因为使用基于1.1节中的地址直接跳转方式,所以不需再向用户提供函数体本身,而是提供函数体的地址,相对于原始方法来说进行反编译更难。

  可以针对用户群进行函数的二次封装,把一些实现整体动作的函数,重新打包成一个新的函数,函数名直接采用直译方式命名,更易明白。比如显示屏特定位置显示字符的过程,可以直接把清屏、输出指针移动、输出字符这3个函数封闭在一起。

  在实现接口的设计过程中发现2个问题。第1个问题,在给用户提供可用函数库的时候需要提供所有函数的地址,对于二次接口的编写者来说工作量比较大。第2个问题,在系统程序更新后,所有函数在Flash中存放的地址会发生变动,在更新以前编写的应用程序都需要重新定义函数地址才可以再次使用。这一点不利于用户应用程序的开发,没有考虑到应用程序的通用性。

  是返回DOS系统的通过给AH寄存器赋值4CH,然后调用INT 21H指令,计算机就会根据AH寄存器中的值执行相应的操作。其中,4CH返回DOS系统,还可以给AH寄存器赋其他值[2]。

  同理这里提出了一种基于上面函数地址跳转的改进方法,即通过设置一个中间跳转函数(这里函数名设置为SysCallLib)来解决接口的设计过程中发现的 2个问题。改进的基于地址跳转方法的实现效果如图3所示。通过这种方法,把SysCallLib函数体固定在特定的地址,用户只需要知道一个地址即可实现跳转。SysCallLib函数体内部通过Case语句来实现内部函数的跳转。

  打造的开发工具也是基于GNU 工具链的。在目前,支持CM3的GNU工具链可以由CodeSourcery网站免费下载。

  而GNU的C编译器则在以后支持CortexM3。和其他ARM开发工具相似,GNU工具链也包含了编译器、汇编器和链接器,使得源代码既可以使用C语言,也可以使用汇编完成,基于GNU工具链的开发模式图如图4 所示[3]。

http://syn992.com/cidongzuohanshu/40.html
点击次数:??更新时间2019-04-08??【打印此页】??【关闭
  • Copyright © 2002-2017 DEDECMS. 织梦科技 版权所有  
  • 点击这里给我发消息
在线交流 
客服咨询
【我们的专业】
【效果的保证】
【百度百科】
【因为有我】
【所以精彩】