armink / CmBacktrace

Advanced fault backtrace library for ARM Cortex-M series MCU | ARM Cortex-M 系列 MCU 错误追踪库
MIT License
1.59k stars 640 forks source link

error: #147 #12

Open ShaoyuLee opened 6 years ago

ShaoyuLee commented 6 years ago

....\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;

image

armink commented 6 years ago

你的 main stack 段名字不是 STACK 吗?

ShaoyuLee commented 6 years ago

可能是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

armink commented 6 years ago

说明栈的识别不太正常。你用自带的 demo 先试试吧

rh-chen commented 6 years ago

这是编译选项的问题,Linker的设置,对比一下demo工程即可。

LinTeX9527 commented 6 years ago

@ShaoyuLee 我移植到Cortex-M4,编译器 Keil5 也出现类似的问题,地址只打印了一个s。 调试发现堆栈信息解析到了,存储到了 call_stack_info中,但是打印不出来,应该是 keil5 编译器解析字符串出了问题,解决方法是: 1、去掉 print_info[PRINT_CALL_STACK_INFO] 中最后的 %.*s 2、在函数 print_call_stack() 中追加打印 call_stack_info

ShaoyuLee commented 6 years ago

@LinTeX9527 谢谢!上次没成功就搁置了,我找时间再试试。

armink commented 6 years ago

@LinTeX9527 @ShaoyuLee

LinTeX9527 commented 6 years ago

@armink 移植在Cortex-M4上的工程我有,怎么发给你?

tim 20180510171110

tim 20180510171133

armink commented 6 years ago

@LinTeX9527

LinTeX9527 commented 6 years ago

@armink 没有板子测试项目自带的demo。 截图是根据demo改的程序,在Cortex-M4上运行。