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

发现demo在stm32f103平台上异常 #2

Closed yangang123 closed 7 years ago

yangang123 commented 7 years ago

执行demo: 使用 fault_test_by_div0()异常


Firmware name: CmBacktrace, hardware version: V1.0.0, software version: V0.1.0 Fault on interrupt or bare metal(no OS) environment ====== Main stack information ====== addr: 200005d0 data: 0800269c addr: 200005d4 data: 0800269c addr: 200005d8 data: 2d156cb6 addr: 200005dc data: 8a62e58c addr: 200005e0 data: 6ffffff4 addr: 200005e4 data: 08001db1 addr: 200005e8 data: 0800269c addr: 200005ec data: 08000265

=================== Registers information ==================== R0 : 00000010 R1 : 2000009c R2 : ffffffff R3 : 00000000 R12: fffffdff LR : 08001db1 PC : 08001ce2 PSR: 61000000

Usage fault is caused by Indicates a divide by zero has taken place (can be set only if DIV_0_TRP is set) Show more call stack info by run: addr2line -e CmBacktrace.axf -a -f 08001ce2 08001dad 08002698 08002698 08001dad 08002698 08000261

问题是

为什么会出现多个相同的地址

地址08001dad出现2个

08001ce2 08001dad 08002698 08002698 08001dad 08002698 08000261

地址08001dad出现2个

08001ce2 08001dad 08002698 08002698 08001dad 08002698 08000261

armink commented 7 years ago

现有的获取函数地址方式简单而粗暴,会有一定概率存在脏数据,但使用 addr2line 工具获取函数名称后,基本不会影响阅读的。

ctwfei commented 6 years ago

有没有办法在回溯堆栈时获取到比较准确的函数地址呢?