RT-THREAD STUDIO 移植cmbacktrace

一、概叙:

1、开发环境使用的是RT-THREAD STUDIO ,参考了网上一些文档,使用的芯片是STM32H7,针对个人一个小时移植过程的记录。
2、后续使用cmbacktrace持续记录

二、步骤:

1、下载cm-backtrace源码

https://gitee.com/Armink/CmBacktrace
在上述路径下载,如下图所示:
在这里插入图片描述

2、将相关文件拷贝到我们的工程目录下

将cm_backtrace文件下的提取以下放到我们工程下,最终如下图所示
在这里插入图片描述

3、修改cmb_cfg.h

根据需要修改这个文件
我的修改如下:

#ifndef _CMB_CFG_H_
#define _CMB_CFG_H_

#include <rtthread.h>
/* print line, must config by user */
#define cmb_println(...)               rt_kprintf(__VA_ARGS__);rt_kprintf("\r\n")
/* enable OS platform */
#define CMB_USING_OS_PLATFORM
/* OS platform type, must config when CMB_USING_OS_PLATFORM is enable */
#define CMB_OS_PLATFORM_TYPE           CMB_OS_PLATFORM_RTT
/* cpu platform type, must config by user */
#define CMB_CPU_PLATFORM_TYPE          CMB_CPU_ARM_CORTEX_M7
/* enable dump stack information */
#define CMB_USING_DUMP_STACK_INFO
/* language of print information */
#define CMB_PRINT_LANGUAGE             CMB_PRINT_LANGUAGE_ENGLISH
#endif /* _CMB_CFG_H_ */

4、去掉 gcc_contex.s中的hardfault定义

不去掉会报错,如下图所示:
在这里插入图片描述

5、添加头文件到工程

在studio的设置里面添加头文件,注意包含language文件夹

6、代码加入初始化及测试代码

void plt_cmbacktrace_init(void)
{
    rt_kprintf("cm_backtrace init\n");
    cm_backtrace_init("soft_name","v0.0.1","v0.0.1");
}
void cmb_test_pt(void)
{
    // 这里设置SCB->CCR寄存器目的是打开除0异常触发,否则即使除以0也不会触发Hard Fault。

    volatile int *SCB_CCR = (volatile int *)0xE000ED14; // SCB->CCR
    *SCB_CCR |= (1 << 4); /* bit4: DIV_0_TRP. */
     int x, y, z;
    x = 10;
    y = 0;
    z = x / y;
    printf("--------------z:%d\n", z);
}

7、编译工程即可

三、调试过程

1、烧写代码到板子,接好串口显示如下打印信息:

在这里插入图片描述

2、将tool文件下的addr2line 64位版本的拷贝到bin文件根目录下

3、shift+鼠标右键打开powershell

输入串口提示的命令,需要略作修改:.\addr2line -e ATP_APP.elf -afpiC 0807135a 0807115a
文件名改成你工程生成的文件名,最终结果如下图:
在这里插入图片描述
提示结果在740行出错,如下图位实际代码位置:
在这里插入图片描述

四、使用结果反馈

该项为后续使用了cmbacktrace效果记录,持续更新。

<think>好的,我现在需要帮助用户在RT-Thread Studio中使用RT-Thread 4.1.1版本移植LVGL 8.3.10,并实现触摸屏界面显示。首先,我得回忆一下RT-Thread和LVGL的基本知识,以及它们如何集成。 用户之前提到过引用[1],里面提到了LVGL 8.3.11RT-Thread 4.1.0的对接,但用户现在需要的是8.3.10和4.1.1。可能步骤类似,但需要注意版本差异。比如,配置项LV_COLOR_DEPTH的设置,可能需要根据屏幕调整,比如RGB565或ARGB8888,这会影响显示效果和性能。 首先,用户需要在RT-Thread Studio中创建一个基于4.1.1的项目。然后,通过Env工具添加LVGL软件包,但可能软件包默认版本不是8.3.10,所以可能需要手动下载或修改版本。或者用户需要从GitHub获取LVGL 8.3.10的源码,手动添加到项目中。这一步可能需要指导用户如何正确放置文件,并配置Kconfig选项。 接下来,显示驱动和触摸驱动的适配是关键。RT-Thread通常使用SPI或FB设备,需要初始化显示设备,并注册到LVGL的显示接口。同样,触摸屏可能使用I2C或SPI,需要实现触摸输入设备的读取函数,并在LVGL中注册。 然后,LVGL的初始化流程,包括初始化显示缓冲区、注册显示驱动、设置输入设备、添加定时器任务以处理LVGL任务等。用户可能需要编写lv_port_disp_init和lv_port_indev_init这样的函数,并确保它们被正确调用。 另外,内存管理方面,LVGL需要足够的堆内存,用户可能需要调整RT-Thread的堆大小,或者在board.h中修改配置。如果出现内存不足,界面会卡顿或无法显示。 最后,测试例程,比如显示音乐播放器界面,需要确保入口函数被正确调用,比如在main线程中调用lv_user_gui_init,并启动LVGL的任务处理,比如周期性地调用lv_timer_handler。 可能遇到的问题包括:显示颜色格式不匹配导致花屏,触摸坐标不正确,或者任务优先级不够导致界面卡顿。需要指导用户如何调试这些问题,比如检查LV_COLOR_DEPTH设置,校准触摸坐标,调整线程优先级等。 还需要考虑多线程环境下,LVGL的任务处理是否在主线程或单独线程中运行,确保不会与其他任务冲突。同时,确保定时器或线程的周期合理,如每5-10ms处理一次LVGL任务,以保持流畅。 最后,生成相关问题需要考虑用户在移植过程中可能遇到的后续问题,比如性能优化、其他控件使用、多页面切换等,以及如何进一步定制LVGL的配置。</think>### RT-Thread Studio移植LVGL 8.3.10的步骤说明 #### 一、环境准备 1. **创建RT-Thread项目** -RT-Thread Studio中新建项目,选择**基于芯片**的工程模板,确认RT-Thread版本4.1.1- 若官方未提供4.1.1的适配模板,需手动通过Env工具更新系统版本。 2. **添加LVGL软件包** - 打开Env工具,执行命令 `pkgs --upgrade` 更新软件包列表。 - 使用 `menuconfig` 进入配置界面,依次选择: ``` RT-Thread Online Packages → multimedia packages → LVGL: powerful and easy-to-use embedded GUI library ``` - 修改LVGL版本为**v8.3.10**,启用`Enable LVGL demos`,并根据屏幕选择`LV_COLOR_DEPTH`(如16位色对应RGB565)[^1]。 --- #### 二、显示与触摸驱动适配 1. **显示驱动配置** - 在`board/`目录下添加显示屏初始化代码(如SPI或Framebuffer驱动)。 - 实现LVGL显示接口函数: ```c static void disp_flush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p) { // 将color_p数据写入屏幕的指定区域(area) lv_disp_flush_ready(disp_drv); // 必须调用此函数通知LVGL渲染完成 } ``` - 注册显示设备: ```c lv_disp_drv_init(&disp_drv); disp_drv.flush_cb = disp_flush; lv_disp_drv_register(&disp_drv); ``` 2. **触摸驱动配置** - 实现触摸输入接口: ```c static void touchpad_read(lv_indev_drv_t *indev_drv, lv_indev_data_t *data) { // 读取触摸坐标(如通过I2C读取TP数据) data->point.x = x_pos; data->point.y = y_pos; data->state = pressed ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL; } ``` - 注册输入设备: ```c lv_indev_drv_init(&indev_drv); indev_drv.type = LV_INDEV_TYPE_POINTER; indev_drv.read_cb = touchpad_read; lv_indev_drv_register(&indev_drv); ``` --- #### 三、内存与线程配置 1. **调整系统堆内存** - 在`board.h`中增加堆大小至至少64KB: ```c #define HEAP_END (0x8000000 + 64 * 1024) // 根据芯片实际内存修改 ``` 2. **添加LVGL心跳任务** - 创建线程或使用RT-Thread定时器周期性调用 `lv_tick_inc(5)`(每5ms触发一次)。 - 在主线程中循环处理LVGL任务: ```c while (1) { lv_task_handler(); rt_thread_mdelay(10); // 控制刷新频率 } ``` --- #### 四、测试与调试 1. **加载示例界面** - 在入口函数中调用LVGL示例代码: ```c void lv_user_gui_init(void) { lv_demo_widgets(); // 加载内置控件示例 // 或自定义界面 } ``` 2. **常见问题解决** - **花屏问题**:检查`LV_COLOR_DEPTH`是否与屏幕色深匹配[^1]。 - **触摸坐标偏移**:通过`lv_indev_set_calibration_points()`校准坐标。 - **卡顿**:确保心跳任务周期≤10ms,并优化渲染函数。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值