环境 Rt-thread studio ,at32F437程序中使用了软件包rt_vsnprintf,使用jlink下载程序后,程序运行总会出现莫名的逻辑故障。
分析锁定问题后,发现rt_vsnprintf包的函数print_integer,buf的地址是 0x20000a68 为何没有分配在栈内?怀疑是此处的问题
map文件的栈设置如下
本来默认的栈大小是0x400,更改为0x800后,buf的地址依然不在栈内。。。。
对照另外一个at32F437工程内,也使用的软件包rt_vsnprintf,buf的分配就是在栈内的。
问题:为何此工程的函数内部数组buf分配不在栈内呢?程序才刚刚跑起来,0x800大小的栈不可能这么快用完
看调用还在复位中断里面,意思是此时还没用使用0x800这个栈吗?
用了bootloader没?
如果没用,应该是芯片内的代码帮你设置start.S入口+4位置的值。
你可以在start.S中下断点,检查下此时MSP这个位置的值是否对得上。
使用了qboot,他的栈是0x400大小的 这需要注意哪里呢
可以在start.S中手动设置一下。
这是启动文件的前面部分,麻烦明示下如何设置呢
debug中显示的msp确实和map中的不一致
最后锁定症结在qboot里面。qboot_at32.c文件里面的函数qbt_jump_to_app我修改的不对,导致没有设置好新的栈地址😭
@sync
您好,栈区的地址不对,最终您是怎么解决?