嵌入式技术论坛
直播中

贾埃罗

7年用户 1693经验值
私信 关注
[问答]

使用RTthread nano搭建了两个工程BOOT和APP,Bootloader无法正常跳转到APP是为什么?

使用RTthread nano 搭建了两个工程 BOOT和APP。其中 BOOT占用40K ROM, 12K RAM;APP 占用59K ROM, 12K RAM。使用芯片为STM32F103CBT6 ROM 128K, RAM 20K;
为了方便在rtthread nano中都移植了串口设备进去。
单独运营BOOT和APP程序都能顺利跑起来,加在一起联调就跑不起来了。在设置好中断向量表偏移和程序下载地址后,boot正常运行,但跳转到APP会进入hardfault.
在编译程序时如果设置了将boot和APP程序的RAM分别设置到两块地方,APP就能正常跑起来。
为什么将BOOT和APP 程序的RAM空间设成都从0x2000000开始,占用20K会导致APP跑飞。所有的变量我在使用前都初始化了,但在实际调试的时候会发现,有些变量的值会被莫名的修改,导致程序跑飞

回帖(2)

杨海清

2023-9-3 11:48:55
可能是BOOT跳APP时环境没清理干净(比如中断没关)导致的
举报

李桂兰

2023-9-26 10:27:09
这个问题可能是由于内存地址空间分配不当引起的。在将BOOT和APP编译到同一片内存中时,需要注意两个程序使用的内存地址范围不能重叠,否则会导致数据混乱。建议将BOOT和APP分别编译到不同的内存地址区域,并在两个程序中使用完全不同的变量名,以避免变量冲突。

另外,跳转到APP程序可能也与系统堆栈大小有关。如果APP程序使用的堆栈大小超出了设定的堆栈大小,则会导致hardfault异常。可以考虑增大堆栈大小或优化APP程序的代码以减小堆栈使用。

最后,建议使用调试器逐步单步执行代码来查看程序运行过程中变量值的改变情况,以帮助定位问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分