faq debug cpu exception - XradioTech/xradiotech-wiki GitHub Wiki
中文 | EN
主页 | 产品 | 下载 | 开发指南 | FAQ | 联系我们 | 购买样品
Q: 如何调试CPU异常?
现象
exception:6 happen!!
appos pstack:0x53d30 msp:0x7ffe0 psp:0x53d50
usage fault happen, UFSR:0x1
CPU registers:
R00:[0x53d50]: 0x00000015
R01:[0x53d54]: 0x0005bf48
R02:[0x53d58]: 0xffff67c9
R03:[0x53d5c]: 0x00058ff0
R04:[0x53d30]: 0xd7e33f4a
R05:[0x53d34]: 0x00058b28
R06:[0x53d38]: 0xffffb7b9
R07:[0x53d3c]: 0x00000000
R08:[0x53d40]: 0x00000016
R09:[0x53d44]: 0xfe2ebdc6
R10:[0x53d48]: 0x7ffcb263
R11:[0x53d4c]: 0x6dc253f0
R12:[0x53d60]: 0xff86c25d
R14(LR):[0x53d64]: 0x00000000
R15(PC):[0x53d68]: 0x10006fe2
xPSR:[0x53d6c]: 0x41000000
SHCSR:0x00070008 step:0
FPSCR:0xe000ed38
stack info:
[0x53d70]: 0x00000000 0x00000004 0x00000002 0xbe2500aa
[0x53d80]: 0x00058688 0x70dcebe4 0xc39e4949 0x00033460
[0x53d90]: 0x798d6e73 0xd7e33f4a 0x00000000 0x00058b28
[0x53da0]: 0x7ddd40a7 0xe8b71176 0x7f6d20b7 0xf3e4fe2f
[0x53db0]: 0x7fe47e40 0xfac1a3c7 0x7fffc694 0x00000012
[0x53dc0]: 0x0000003c 0x00000016 0x00000013 0x10003c99
[0x53dd0]: 0x000000b1 0x000587d8 0x00058572 0x00058b28
[0x53de0]: 0x00059d28 0x00000004 0x00058518 0xffff7d7d
[0x53df0]: 0xffff7db5 0xffff74fc 0xffff6d43 0x00000012
[0x53e00]: 0x0000abba 0x00000000 0x00058560 0x00058b28
[0x53e10]: 0x00000000 0x00058518 0x00000000 0x00058560
[0x53e20]: 0x000574b8 0x000587d8 0x00058688 0x10003897
[0x53e30]: 0x000586b0 0x00058560 0x00058af0 0x1000481e
[0x53e40]: 0x00000000 0x00058b28 0x00058b28 0x00058af0
[0x53e50]: 0x000586f8 0x00059d2c 0x00000000 0x00059d2c
[0x53e60]: 0x00000000 0x00000000 0x000584f4 0x000574b8
[LR]:0x0
[PC]:0x10006fe2
tasks state:
Name State Pri HWM Idx StkCur StkBot
pthread R 3 1333 14 0x53f1c 0x52828
IDLE R 0 97 2 0x43014 0x42e80
ServersTask B 3 2411 12 0x512a4 0x4ec30
SchedulerTask B 3 2270 11 0x4ea1c 0x4c3c0
ad_button_ctrl B 3 659 8 0x483f4 0x47860
pthread B 3 961 9 0x4b32c 0x49dd8
tcpip B 3 385 5 0x45514 0x44de0
B 3 471 7 0x46904 0x461a8
pthread B 3 629 10 0x4c194 0x4b6c8
B 4 371 6 0x4608c 0x45938
Publish Thread B 4 387 4 0x44ae4 0x44398
pthread B 3 598 15 0x551ec 0x54830
Tmr Svc B 6 479 3 0x4396c 0x431f0
原因分析
通常产生CPU异常大部分都是因为内存访问出错造成的,内存访问出错可能有空指针, 数组越界, 栈溢出以及其他操作
追查步骤
- 查看log中产生异常之前的打印看是否有各种warning,error, fail等不正常的信息,确定是否有逻辑错误
- 根据上下文逻辑臆测错误的位置,通过增加UART打印定位
- 通过反汇编定位
<1> arm-none-eabi-objdump -d -S xxx.axf > xxx.asm 或通过make objdump生成反汇编文件
<2> 查找上面log中的LR和PC,确定跑飞的上下文位置
<3> 通过增加UART打印辅助调试
R14(LR):[0x53d64]: 0x00000000 >>>> 这个全0为非法,数据已被破坏,无法追查
R15(PC):[0x53d68]: 0x10006fe2 >>>> 这个地址落在.xip段,为code的合法地址,可追查