环境 Rt-thread studio ,at32F437程序中使用了软件包rt_vsnprintf,使用jlink下载程序后,程序运行总会出现莫名的逻辑故障。
分析锁定问题后,发现rt_vsnprintf包的函数print_integer,buf的地址是 0x20000a68 为何没有分配在栈内?怀疑是此处的问题
map文件的栈设置如下
.stack 0x20000f68 0x800 load address 0x0809becc
0x20000f68 . = ALIGN (0x4)
0x20000f68 _sstack = .
0x20001768 . = (. + _system_stack_size)
fill 0x20000f68 0x800
0x20001768 . = ALIGN (0x4)
0x20001768 _estack = .
0x20001768 __bss_start = .
本来默认的栈大小是0x400,更改为0x800后,buf的地址依然不在栈内。
对照另外一个at32F437工程内,也使用的软件包rt_vsnprintf,buf的分配就是在栈内的。
问题:为何此工程的函数内部数组buf分配不在栈内呢?程序才刚刚跑起来,0x800大小的栈不可能这么快用完
更多回帖