基于GR5515移植开源库CM_Breaktrace

本文参考博客:https://blog.csdn.net/Mculover666/article/details/106373147 ,

1、下载代码:https://github.com/armink/CmBacktrace

2、将cm_backtrace.c相关代码添加到工程中;

3、在interrupt_gr55xx.c 修改 HardFault_Handler 函数,异常时跳转到cm_backtrace_fault 执行;

SECTION_RAM_CODE __asm void HardFault_Handler (void) 
{

    IMPORT cm_backtrace_fault

    MOV     r0, lr                  ; get lr
    MOV     r1, sp                  ; get stack pointer (current is MSP)
    BL      cm_backtrace_fault

Fault_Loop
    BL      Fault_Loop              ;while(1)
    ENDP

    END
}

4、CmBacktrace的配置文件在cmb_cfg.h,针对不同的平台和场景,需要自行手动配置:

本文是基于SDK freertos 工程移植的,配置如下:

5、不同平台存在差异性,在 cmb_def.h 需要根据flash_scatter_common.sct文件字段设置

CMB_CSTACK_BLOCK_NAME 与 CMB_CODE_SECTION_NAME

 

6、在cm_breaktrace.c,根据statup_gr55xx.s 中stack设置 CSTACK_BLOCK_START 和CSTACK_BLOCK_END值

 

 

如若该字段配置错误的情况下,编译会有warning提示,以及初始化报错

7、由于需要用到串口打印,cm_backtrace_fault.c 最后加入串口缓冲app_log_flush();

至此,CmBacktrace移植、配置完成!

8. 使用CmBacktrace使用时包含头文件:

#include "cm_backtrace.h"

初始化CmBacktrace

void cm_backtrace_init(const char *firmware_name, const char *hardware_ver, const char *software_ver);

该 API 用来初始化CmBacktrace,其中传入的参数分别为:

firmware_name:固件名称,需与编译器生成的固件名称对应;

hardware_ver:固件对应的硬件版本号;

software_ver:固件的软件版本号;

这三个参数用宏定义的方式,会比较方便:

/* Private define ------------------------------------------------------------*/

/* USER CODE BEGIN PD */

#define APPNAME                        "CmBacktrace"

#define HARDWARE_VERSION               "V1.0.0"

#define SOFTWARE_VERSION               "V0.0.1"

在main函数中初始化CmBacktrace :

/* USER CODE BEGIN 2 */

printf("CmBacktrace Test...\r\n");

cm_backtrace_init(APPNAME, HARDWARE_VERSION, SOFTWARE_VERSION);

定义一个除0错误的函数:

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

void fault_test_by_div0(void)

{

    volatile int * SCB_CCR = (volatile int *) 0xE000ED14; // SCB->CCR

    int x, y, z;


    *SCB_CCR |= (1 << 4); /* bit4: DIV_0_TRP. */


    x = 10;

    y = 0;

    z = x / y;

    printf("z:%d\n", z);

}

然后在初始化之后调用执行此函数:

/* USER CODE BEGIN 2 */

printf("CmBacktrace Test...\r\n");

cm_backtrace_init(APPNAME, HARDWARE_VERSION, SOFTWARE_VERSION);

fault_test_by_div0();

编译,下载运行,在串口助手中查看结果:

查看进一步的信息,需要使用addr2line工具,此工具在cmbacktrace的源码中,按照你的电脑选择32位的或者64位选择,并将此复制到对应ble_app_template_freertos.axf文件夹中;

打开cmd命令行,进入axf所在目录,执行串口中提示的命令:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习GR5515系列芯片需要掌握以下几个方面: 1. 学习GR5515系列芯片的硬件结构和特性,包括芯片引脚、时钟、中断、存储器、通信接口等。 2. 学习GR5515系列芯片的软件开发环境,包括Keil、IAR等开发工具的使用方法,以及芯片数据手册、应用笔记等文档的查阅方法。 3. 学习GR5515系列芯片的程序设计,包括C语言编程、芯片底层驱动编写、ARM Cortex-M33内核架构等。 4. 学习GR5515系列芯片的应用开发,包括常用的应用场景,如智能家居、智能穿戴、智能制造等。 以下是一些学习GR5515系列芯片的方法和技巧: 1. 阅读芯片数据手册和应用笔记是学习GR5515系列芯片的基础。数据手册包含了芯片的详细技术规格和功能描述,应用笔记则提供了实际应用中的开发指导和案例。 2. 参加在线课程和培训。许多在线课程和培训机构提供了GR5515系列芯片的学习课程,包括硬件设计、软件编程、应用开发等方面。 3. 参与社区交流和博客。参与社区交流和阅读博客可以获得GR5515系列芯片的实践经验和技巧,同时也可以与其他芯片开发者分享自己的经验和知识。 4. 实践和调试。进行实际应用开发,进行调试和测试可以进一步加深对GR5515系列芯片的理解和掌握,同时也可以发现和解决一些实际问题。 5. 阅读相关书籍和教程。阅读相关的书籍和教程可以帮助理解和掌握GR5515系列芯片的基本原理和应用开发方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值