开源CmBacktrace移植到RT-Thread Nano

2023-11-04

一、CmBacktrace特性

       CmBacktrace 是一款针对 ARM Cortex-M 系列 MCU 的错误代码自动追踪、定位,错误原因自动分析的开源库。

  • 支持的错误包括:

  • 断言(assert)

  • 故障(Hard Fault, Memory Management Fault, Bus Fault, Usage Fault, Debug Fault)

  • 故障原因 自动诊断 :可在故障发生时,自动分析出故障的原因,定位发生故障的代码位置,而无需再手动分析繁杂的故障寄存器;

  • 支持 裸机 及以下操作系统平台:

  • UCOS

  • FreeRTOS(需修改源码)

  • 故障诊断信息支持多国语言(目前:简体中文、英文);

  • 适配 Cortex-M0/M3/M4/M7 MCU;

  • 支持 IAR、KEIL、GCC 编译器;

CmBacktrace 源码下载地址:https://github.com/armink/CmBacktrace

二、移植步骤

       从下载的源码中将cm_backtrace文件夹复制到已有的工程目录下,在Keil工程中添加cmbacktrace目录,并将cm_backtrace.c和cmb_fault.S添加到cmbacktrace目录线下;记住要勾选C99模式。

       上述操作完成后执行编译会报错,此时需要修改cmb_cfg.h文件内的相关配置,修改后的配置如下:

       再次编译还产生一个error,这是因为cmb_fault.c与.S中的HardFault_Handler函数重定义了,此时将context_rvds.S修改如下:

       上述修改全部完成后编译OK。

       编译OK后,将CmBacktrace源码目录下的tools文件夹的addr2line.exe工具拷贝到工程的可执行文件所在目录下。

三、代码测试

       cmbacktrace初始化:

      上图红色框中的字符串为工程可执行文件名;

      下面编写一个测试函数进行测试:

       运行代码后程序发生崩溃,打印串口输出如下:

      进入到工程的可执行文件所在目录,按住键盘Shift+鼠标右键,打开Powershell窗口;

       复制串口输出窗口的红色框内容,粘贴到Powershell的命令行中(注意win10系统要在命令行先输入.\),然后回车。

       从命令行输出Log可以看出,是fault_test_by_div0这个函数发生了错误,并且错误出现在bll_4gcat1.c第653行。

       通过以上方法可以发现,使用CmBacktrace 库能帮助我们有效、快速地定位到HardFault之类的错误,提高代码开发效率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

开源CmBacktrace移植到RT-Thread Nano 的相关文章

  • 监督学习-贝叶斯分类器

    贝叶斯分类器 1 原理 先验概率 某个事件B发生的概率P B 条件 后验 概率 事件B在另一事件A已发生条件下的发生概率P B A 联合概率 两个事件共同发生的概率P A B P B A 2 多个离散属性的条件概率 样本x是n维的特征向量
  • iOS APP打包上传到APPstore的最新步骤

    一 前言 作为一名iOS开发者 把辛辛苦苦开发出来的App上传到App Store是件必要的事 但是很多人还是不知道该怎么上传到App Store上 下面就来详细讲解一下具体流程步骤 二 准备 一个已付费的开发者账号 可分为 账号类型分为个
  • VS2019查找库函数文件夹的方法

    我的路径 C Program Files x86 Windows Kits 10 Include 10 0 19041 0 ucrt 方法 1 新建一个项目 打上所想找到的库函数 2 右击 gt 转到文档 3 右击选项卡 gt 打开文件夹

随机推荐

  • PyTorch预训练和微调:以VGG16为例

    文章目录 预训练和微调代码 测试结果 参考来源 预训练和微调代码 数据集 CIFAR10 CIFAR 10数据集由10类32x32的彩色图片组成 一共包含60000张图片 每一类包含6000图片 其中50000张图片作为训练集 10000张
  • 记一次APP脱壳重打包过程

    小伙伴分享了一个开车软件 但是有播放次数限制 对此小伙伴放言要制裁它 无奈APP加固了 咳咳 本着学 wei 习 le 研 fu 究 li 的态度 尝试着脱壳并重打包 为证清白 伸出双手 上操作 右键直接解压APK 查看特征是360加固 使
  • 成为一个优秀的测试工程师需要具备哪些知识和经验?

    软件测试每个阶段有不同的要掌握的技术和经验 先按照薪资范围划分下 月薪 5 9K 零基础入门 学会功能测试能够找到工作 15 25K 测试在职能搞定性能测试和自动化测试 25K 搞定测试开发 在一线大厂工作 每一个阶段的侧重也不同 入门到找
  • 开关电源与线性电源

    一 线性电源 1 三极管有截止区 放大区 饱和区 而当三极管工作在放大区的时候由它的输出特性曲线可以发现它可以近似看成一个线性输出 因此可以利用三极管来构建一个线性电源 2 另外一种方式当输入一个交流信号时候 我们可以先通过一个整流桥转换为
  • [806]Jenkins安装部署

    Jenkins文档 https www jenkins io zh doc jenkins依赖java环境 下载jenkins 在windows系统上搭建jenkins持续集成有两种方法 1 war文件 可以用tomcat或者java命令直
  • PAT (Basic Level) Practice 部分汇总(C++版)

    目录 1003 我要通过 测试点2没通过 已解决 1008 数组元素循环右移问题 1009 说反话 1003 我要通过 测试点2没通过 已解决 有没有好心人帮我看看为什么错了一个 题目 答案正确 是自动判题系统给出的最令人欢喜的回复 本题属
  • OCP开-闭原则

    概念 开闭原则由Bertrand Meyer 于1988年提出 是指软件应该对扩展开放 对修改关闭 OCP开闭原则的动机 软件是变化的 OCP说明了软件设计应该尽可能地使架构稳定而又容易 满足不同的需求 软件设计本身所追求的目标就是封装变化
  • Mac OS下使用X11访问远程Unix 主机图形界面

    1 启动XQuartz2 打开偏好设置 勾选输入下的 模拟三按键鼠标 3 输出可以选择 全屏模式 按Command Option A切换4 如果修改了配置需要退出重新启动生效5 选择 应用程序 终端 6 终端窗口打开后输入 xhost 然后
  • TCP和UDP区别通俗理解

    TCP协议与UDP协议的区别 首先咱们弄清楚 TCP协议和UCP协议与TCP IP协议的联系 很多人犯糊涂了 一直都是说TCP IP协议与UDP协议的区别 我觉得这是没有从本质上弄清楚网络通信 TCP IP协议是一个协议簇 里面包括很多协议
  • 调整vscode工具栏字体大小

    之前的效果 文件 菜单 控制台字体都很小 修改过后 文件 gt 首选项 gt 设置 gt 窗口 gt Zoom level 只修改代码字体大小如下
  • DiskGenius无损windows系统迁移(增加硬盘)

    在DiskGenius主菜单 点击 工具 系统迁移 菜单项 根据引导选择源磁盘 目标磁盘 最后 注意最好选择重启到微pe迁移 这样不容易出错 迁移完成之后 电脑会自动重启 此时很可能会遇到一个问题 电脑黑屏 只有鼠标能动 只能强制关机 此问
  • stress-ng交叉编译在板子上运行

    一 直接用我移植好的 https github com fanchenxinok stress ng arm 二 自己移植过程 1 下载源码包 https kernel ubuntu com cking tarballs stress ng
  • Spring Bean的作用域

    Spring Bean的作用域 我们在Spring中定义一个Bean时 需要声明该Bean的作用域 默认值是singleton Spring框架支持的作用域有以下几种 1 singleton singleton 是默认的作用域 当将一个be
  • JPA、Hibernate和Mybatis的比较

    一 应用场合 传统公司 部分个人开发者喜欢用jpa 而互联网公司更青睐于mybatis 原因 1 mybatis更加灵活 开发迭代模式决定了他是互联网公司的首先 每一次的修改不会带来性能上的下降 2 传统公司需求迭代速度慢 项目改动小 hi
  • 五大常用算法之五:分支限界法

    分支限界法 我们已知 回溯法的思想是深度优先搜索加剪枝 与之相对 分支限界法的思想是广度优先搜索加剪枝 搜索过程使用剪枝函数来为了避免无效的搜索 剪枝函数包括两类 1 使用约束函数 剪去不满足约束条件的路径 2 使用限界函数 剪去不能得到最
  • Docker-Compose 内容介绍

    一 Docker Compose 简介 Docker Compose 项目是Docker官方的开源项目 负责实现对Docker容器集群的快速编排 Docker Compose 项目由 Python 编写 调用 Docker 服务提供的API
  • Dev c++中文乱码,codeblocks运行结果乱码解决办法

    Dev c 乱码 codeblocks也乱码 最近Dev c 打开C语言的文件中文乱码 用codeblocks打开代码没事但是运行结果乱码了 情况如下 因为只有2020 10 12之后的 Dec C 版本的编码支持 utf 8 旧版的 De
  • 电巢独家直播|第七届世界无人机大会圆满落幕!

    当前 全球化秩序正进入新的调整阶段 数字化技术与生产生活深度融合 将加速推动数字化经济的全面渗透 中国经济也正由高速增长向高质量发展转变 这为无人机行业创造了更多的战略机遇 根据深圳市无人机行业协会统计 2022年 全国1 2万多家无人机企
  • 腾讯云服务器+ContOS 7.6安装MySql(二)

    腾讯云服务器 ContOS 7 6安装MySql 二 安装 使用XShell的登录到我们的云服务器 网上说在CentOS中默认安装有MariaDB 先来查查看有没有 root VM 4 7 centos yum search mysql L
  • 开源CmBacktrace移植到RT-Thread Nano

    一 CmBacktrace特性 CmBacktrace 是一款针对 ARM Cortex M 系列 MCU 的错误代码自动追踪 定位 错误原因自动分析的开源库 支持的错误包括 断言 assert 故障 Hard Fault Memory M