支持Cortex-M处理器的objloader组件

objloader是eCos系统提供的用于支持模块动态加载的组件,经过移植后,现已支持Cortex-M处理器架构。

eCos官网:http://ecos.sourceware.org
eCos中文技术网:http://www.52ecos.net
eCos交流QQ群:144940146。
http://blog.csdn.net/zoomdy/article/details/20200355
mingdu.zheng<at>gmail<dot>com

简介

objloader是eCos系统提供的用于支持模块动态加载的组件,经过多日的研究、移植、调试,现已支持Cortex-M处理器架构并通过测试,支持Cortex-M的长调用(BLX)和短调用(BL)。除了添加对Cortex-M处理器架构的支持外,还修补了官方版本的几个漏洞,一是当节名(Section Name)太长时导致缓存溢出的问题,二是对.bss节清零处理。另外,如果打开调试选项,那么在成功加载模块后将打印GDB的add-symbol-file命令参数,这个命令参数可以直接拷贝到GDB中执行以添加模块调试符号。

使用方法

点击这里下载objloader-zoomdy-1.zip,将内容解压,将 zoomdy-1目录拷贝到eCos源代码目录的packages/services/objloader目录下。

 

通过eCos Configuration Tool选择Object file loader时,选择zoomdy-1版本。

 

可以看到Object file loader组件增加了两个选项,一个是Support loading on Cortex-M processors,如果当前的目标机为Cortex-M架构,那么该选项自动选中;另一个是Object filename for load debug symbol,这个选项指定模块文件名,在自动生成add-symbol-file命令时作为<filename>参数,这个参数仅在Verbosity of debug output选项值大于0时有效。

长调用和短调用

Cortex-M的函数调用分为长调用(long-calls)和短调用(short-calls),长调用使用BLX指令,首先将函数地址加载到寄存器,然后使用BLX Rd来调用,长调用可以在4G的存储空间内调用但是调用效率比较低;短调用使用BL指令,被调用函数的偏移地址被编码进BL指令中,只能在16M的空间内进行调用但是效率比较高。默认情况下使用短调用,一般情况下在嵌入式系统中不会有问题,但是如果需要动态加载模块,这将成为问题。如果需要动态加载模块,那么系统被分成两部分,一部分为静态编译存储在Flash,另一部分动态加载存储在RAM,Cortex-M的Flash和RAM通常不会在16M空间内,通常Flash位于0x00000000,而RAM位于0x10000000,这需要将模块编译成长调用的方式否则会导致模块加载失败。

编译成长调用的方式可以通过指定-mlong-calls编译开关实现,也可以在源代码中添加#pragma long_calls指定。更多关于长调用编译的用法,请参考GCC用户手册的ARM选项http://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/ARM-Options.html的-mlong-calls选项部分。

更多内容

更多关于objloader的内容请参考《eCos模块动态加载支持——objloader组件》,此外还可以参考测试用例(tests子目录下)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值