Open ShaoyuLee opened 6 years ago
你的 main stack 段名字不是 STACK
吗?
可能是stack定义的类型不一样吧,你定义的是 extern const int CSTACK_BLOCK_START(CMB_CSTACK_BLOCK_NAME);,我的工程里用的是 char。 我把你的类型改成 extern char CSTACK_BLOCK_START(CMB_CSTACK_BLOCK_NAME),编译过了。
现在遇到问题,最后的打印为什么没有打出地址呢?只是个“s”,是对的吗? Show more call stack info by run: addr2line -e Si_Gateway_v100.axf -a -f s
说明栈的识别不太正常。你用自带的 demo 先试试吧
这是编译选项的问题,Linker的设置,对比一下demo工程即可。
@ShaoyuLee
我移植到Cortex-M4,编译器 Keil5 也出现类似的问题,地址只打印了一个s。
调试发现堆栈信息解析到了,存储到了 call_stack_info
中,但是打印不出来,应该是 keil5 编译器解析字符串出了问题,解决方法是:
1、去掉 print_info[PRINT_CALL_STACK_INFO] 中最后的 %.*s
2、在函数 print_call_stack() 中追加打印 call_stack_info
@LinTeX9527 谢谢!上次没成功就搁置了,我找时间再试试。
@LinTeX9527 @ShaoyuLee
@armink 移植在Cortex-M4上的工程我有,怎么发给你?
@LinTeX9527
@armink 没有板子测试项目自带的demo。 截图是根据demo改的程序,在Cortex-M4上运行。
....\lib\cm_backtrace\cm_backtrace.c(48): error: #147: declaration is incompatible with "char STACK$$Base" (declared at line 65 of "......\components\libraries\util\app_util.h")
the line 65 of "......\components\libraries\util\app_util.h" as follow
extern char STACK$$Base;