当前位置: 首页 > article >正文

十四、从0开始卷出一个新项目之瑞萨RZN2L之栈回溯(Default_Handler/hartfault)

目录

一、概述

二、参考资料

三、代码

四、日志

五、定位函数调用

六、README和工具


一、概述

  • 软件开发中常见的比较棘手的问题就是hartfault/Default_Handler/dump,俗称跑飞了。

  • 参考cmbacktrace,在瑞萨RZN2L/T2M实现栈回溯,串口打印栈回溯信息。

  • 使用add2line或Python打印发生错误函数位置。

  • 循环打印栈回溯信息和编译日期,便于追溯bug。

二、参考资料

https://github.com/armink/CmBacktrace/tree/master
https://cloud.tencent.com/developer/article/1736680
https://www.segger.com/downloads/application-notes/AN00016
https://stackoverflow.com/questions/47331426/stack-backtrace-for-arm-core-using-gcc-compiler-when-there-is-a-msp-to-psp-swit/50923698#50923698
https://blog.csdn.net/laviolette/article/details/51376751
https://blog.csdn.net/Teminator_/article/details/143177973?ops_request_misc=&request_id=&biz_id=102&utm_term=cmbacktrace&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-143177973.142^v100^pc_search_result_base9&spm=1018.2226.3001.4187
https://github.com/RT-Thread-Studio/sdk-bsp-rzn2l-etherkit

三、代码

  • 1、加入rzn2_rzt2_backtrace.c

  • 2、void Default_Handler (void)
    {
    extern void rzt2_rzn2_backtrace(void);
    rzt2_rzn2_backtrace();
    while(1);
    /** A error has occurred. The user will need to investigate the cause. Common problems are stack corruption

    • or use of an invalid pointer. Use the Fault Status window in e2 studio or manually check the fault status

    • registers for more information.
      */
      BSP_CFG_HANDLE_UNRECOVERABLE_ERROR(0);
      }

四、日志

  • 循环打印栈回溯信息和编译日期

date:Dec 17 2024 time:11:47:45 file:../src/rzn2_rzt2_backtrace.c func:backtrace_fault,line:110 hello world! current:lr=807,sp=106480 ====== Main stack information ====== main_stack_start_addr:105510, main_stack_size:1000 ====== code addr information ====== code_start_addr=100, code_size=84c4 ====== sp information ====== stack_pointer: 106480 ====== stack data information ====== line address value 1 106510 92043202 2 10650c 106510 3 106508 0 4 106504 1020e4 5 106500 78787a8 6 1064fc 1023b5 7 1064f8 106500 8 1064f4 921 9 1064f0 1064f8 10 1064ec 2 11 1064e8 f8 12 1064e4 3e8 13 1064e0 2 14 1064dc 1f4 15 1064d8 40490fda 16 1064d4 9d54 17 1064d0 2 18 1064cc 86 19 1064c8 8d20 20 1064c4 3ef 21 1064c0 1064d0 22 1064bc 1 23 1064b8 8d18 24 1064b4 311 25 1064b0 1064b8 26 1064ac 1 27 1064a8 f8 28 1064a4 2f3 29 1064a0 1064a8 30 10649c 1 31 106498 78787a8 32 106494 2d5 33 106490 106498 34 10648c e000ed14 35 106488 78fb261 36 106484 1 37 106480 9d6c ====== result information ====== addr2line.exe -e rzt2m_cmbacktrace.elf -afpiC 8cd 889 703 6e5 6c7 python -u backtrace.py rzt2m_cmbacktrace.elf 8cd 889 703 6e5 6c7 921 3ef 311 2f3 2d5

五、定位函数调用

Jerry.Chen@WTNB-6719 MINGW64 /e/RS_workspace/rzt2m_cmbacktrace/Debug $ python -u backtrace.py rzt2m_cmbacktrace.elf 8ef 3ef 311 2f3 2d5 elf: rzt2m_cmbacktrace.elf main --> hal_entry --> func_a --> func_b --> func_c Jerry.Chen@WTNB-6719 MINGW64 /e/RS_workspace/rzt2m_cmbacktrace/Debug $ ./addr2line.exe -e rzt2m_cmbacktrace.elf -afpiC 8ef 3ef 311 2f3 2d5 0x000008ef: main at E:\RS_workspace\rzt2m_cmbacktrace\Debug/../rzt_gen/main.c:6 0x000003ef: hal_entry at E:\RS_workspace\rzt2m_cmbacktrace\Debug/../src/hal_entry.c:144 0x00000311: func_a at E:\RS_workspace\rzt2m_cmbacktrace\Debug/../src/hal_entry.c:93 0x000002f3: func_b at E:\RS_workspace\rzt2m_cmbacktrace\Debug/../src/hal_entry.c:87 0x000002d5: func_c at E:\RS_workspace\rzt2m_cmbacktrace\Debug/../src/hal_entry.c:81

六、README和工具

#rzt2/n2 栈回溯 1、加入rzn2_rzt2_backtrace.c 2、void Default_Handler (void) { extern void rzt2_rzn2_backtrace(void); rzt2_rzn2_backtrace(); while(1); /** A error has occurred. The user will need to investigate the cause. Common problems are stack corruption * or use of an invalid pointer. Use the Fault Status window in e2 studio or manually check the fault status * registers for more information. */ BSP_CFG_HANDLE_UNRECOVERABLE_ERROR(0); } 3、addr2line.exe -e rzt2m_cmbacktrace.elf -afpiC 8cd 889 703 6e5 6c7 或python -u backtrace.py rzt2m_cmbacktrace.elf 8cd 889 703 6e5 6c7 4、工具在工程根目录

图片


http://www.kler.cn/a/450545.html

相关文章:

  • YOLO模型格式转换:pt -> onnx -> rknn
  • PyTorch 神经网络回归(Regression)任务:关系拟合与优化过程
  • D102【python 接口自动化学习】- pytest进阶之fixture用法
  • 各种电机原理介绍
  • 华院计算参与项目再次被《新闻联播》报道
  • ECharts关系图-关系图11,附视频讲解与代码下载
  • 图为科技与奥比中光强强联手,打造机器人专用的全景全域AI视觉解决方案
  • 计算机网络:IP地址相关知识总结
  • 神经网络-LeNet
  • OBIEE 12C 功能测试:运行总和的运用
  • 概率论 期末 笔记
  • JVM系列(十三) -常用调优工具介绍
  • 14-C语言多文件编程
  • CES Asia(赛逸展)有哪些科技创新产品?
  • 静态路由配置包括DHCP
  • 华为ensp--BGP路由反射器
  • 数据库操作【JDBC HIbernate Mybatis】
  • C#变量作用域详解
  • uni-app 统一请求处理 请求拦截器 响应拦截器 请求封装
  • 熊军出席ACDU·中国行南京站,详解SQL管理之道
  • 大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
  • OpenGL 笔记(2)
  • 家用无线路由器的 2.4GHz 和 5GHz
  • flink+kafka实现流数据处理学习
  • VSCode 性能优化指南:提高编码效率,减少资源占用
  • [机器学习]sklearn入门指南(1)