位置无关代码设置

最近在折腾一个bootloader,里面使用的flash 擦除和编程函数不能放在目标MCU程序空间。

具体步骤可参考文章:

Bootloader升级方式一————擦、写flash在RAM中运行_bootloader flash擦写代码拷贝到ram-优快云博客

问题出在最后,将擦除和编程函数对应的代码数据,添加到数组中,在目标MCU运行出错。尽管注意到了不使用全局变量,仍然无法正确运行。跟踪汇编,发现以下问题:

而原生擦写函数,寄存器的变化如下:

从上面代码运行情况可以看出,想要代码在其他上下文环境中也能正常运行,需要产生与位置无关的代码,并且禁止在Code中访问Data。 勾选no data reads in code memory,编译后bin体积变大,应该是将所使用的常量数据也增加到Code中了。

不同设置产生的bin对比,勾选后代码体积增大:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值