QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

热搜: eclipse ecos stm32 ecos源码 如何获取ecos ecos源代码 code goAhead redboot
搜索
发新帖

26

主题

1

听众

617

积分

高级工程师

Rank: 4Rank: 4

该用户从未签到

最后登录
2015-11-9
威望
0
金钱
532
贡献
0
注册时间
2013-10-12
积分
617
帖子
70
主题
26
精华
3
UID
495
发表于 2014-2-28 22:11:08 |显示全部楼层
更多
【简介】
objloader是eCos系统提供的用于支持模块动态加载的组件,经过多日的研究、移植、调试,现已支持Cortex-M处理器架构并通过测试,支持Cortex-M的长调用(BLX)和短调用(BL)。
除了添加对Cortex-M处理器架构的支持外,还修补了官方版本的几个漏洞,一是当节名(Section Name)太长时导致缓存溢出的问题,二是对.bss节清零处理。另外,如果打开调试选项,那么在成功加载模块后将打印GDB的add-symbol-file命令参数,这个命令参数可以直接拷贝到GDB中执行以添加模块调试符号。

【使用方法】
将附件内容解压,将 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

【更多内容】
更多关于objloader的使用方法,请参考测试用例(tests子目录下)。更多关于长调用编译的用法,请参考GCC用户手册的ARM专有特性部分http://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/ARM-Options.html。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册会员 新浪微博账号登陆

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员 新浪微博账号登陆

无觅相关文章插件

申请友链|手机版|关于本站|站点帮助|eCos技术网 ( 粤ICP备12094833号-1 )   

GMT+8, 2016-8-6 02:56 , Processed in 0.144977 second(s), 38 queries .

Powered by Discuz!2.5 X2.5

© 2001-2012 Comsenz Inc.

回顶部