2024-07-02
GR5526 GUI专题(4) - Lvgl字体的位图数组合并转换为bin文件的说明
写技术文章
精选推荐
best
开源项目CmBacktrace 是一款针对 ARM Cortex-M 系列 MCU 的错误代码自动追踪、定位,错误原因自动分析的开源库,作者armink。
目前 CmBacktrace支持以下功能:
参考博客: https://blog.csdn.net/Mculover666/article/details/106373147
本文主要介绍基于GR5515 freertos工程移植CmBacktrace。
1.将cm_backtrace.c相关代码添加到工程中;
2.在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
}
3.CmBacktrace的配置文件在cmb_cfg.h,针对不同的平台和场景,需要自行手动配置:
4.本文是基于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移植、配置已全部完成。
下面看看该如何应用和测试这个模块。
1.使用CmBacktrace使用时包含头文件:
#include "cm_backtrace.h"
2. 初始化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 "ble_app_template_freertos"
#define HARDWARE_VERSION "V1.0.0"
#define SOFTWARE_VERSION "V0.0.1"
3.在main函数中初始化CmBacktrace :
/* USER CODE BEGIN 2 */
printf("CmBacktrace Test...\r\n");
cm_backtrace_init(APPNAME, HARDWARE_VERSION, SOFTWARE_VERSION);
4.定义一个除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);
}
5.在并在print_test_task中 调用执行此函数:
fault_test_by_div0();
6.编译,下载运行,在串口助手中查看结果:
查看进一步的信息,需要使用addr2line工具,此工具在cmbacktrace的源码中,按照你的电脑选择32位的或者64位选择,并将此复制到对应ble_app_template_freertos.axf文件夹中;打开cmd命令行,进入axf所在目录,执行串口中提示的命令:
可以从addr2line 结果看到,该错误是 divide by zero,调用函数层级是 fault_test_by_div0 <-- print_test_task
打开微信,使用“扫一扫”即可关注