Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Debug
RT-Thread Debug 分析与调整
5.00
发布于 2023-06-29 18:03:51 浏览:1516
订阅该版
[tocm] # RT-Thread Debug 分析与调整 RT-Thread 中可以通过 menuconfig 使能相关宏,配置和使用 debug 功能,即可向工作台输出程序运行信息,方便调试和使用。 但目前的 rt-thread(5.0.0) 关于 debug 存在 `rtdebug.h` 和 `rtdbg.h` 这两个文件;存在冗余,并且 `rtdbg.h` 中实现的 `LOG_E` , `LOG_W` , `LOG_I` , `LOG_D` 更优,因此考虑**将 `rtdebug.h` 中的 `RT_DEBUG_LOG` 废弃,全部替换为 `LOG_x`** ## 问题分析 `rtdebug.h` 中的 `RT_DEBUG_LOG` 具体实现如下: ``` #define RT_DEBUG_LOG(type, message) do { if (type) rt_kprintf message; } while (0) ``` 调用示例如下: ``` RT_DEBUG_LOG(RT_DEBUG_THREAD, ("startup a thread:%s with priority:%d\n", thread->parent.name, thread->current_priority)); /* RT_DEBUG_THREAD default is 0 */ ``` 可以看出, `RT_DEBUG_LOG` 可以通过相关宏,实现对特定内核对象的单独使能调试。 但 `rtdbg.h` 中的 `LOG_x` 是将调试信息分为不同的等级,通过与设定的 `DBG_LVL` 进行比较,输出不同等级的调试信息。 可以看出 `LOG_x` 主要针对的是不同等级, `RT_DEBUG_LOG` 针对的是不同对象。那接下来要考虑的重点就是:**废弃 `rtdebug.h` 中 `RT_DEBUG_LOG` 的同时,如何使用 `LOG_x` 保留单独调试不同内核对象的特性。** ## 解决方案 使用以下解决方案: ```C #define DBG_TAG "kernel.thread" #ifdef RT_DEBUG_THREAD #define DBG_LVL DBG_LOG #else #define DBG_LVL DBG_WARNING #endif #include
``` 以内核对象 thread 为例,将以上代码添加到对应的 thread.c 文件中,即可使用对应的 LOG_x,可以注意到,宏判断使用的是 `#ifdef RT_DEBUG_THREAD` 而不再是通过判断对应宏值为 0 还是 1,这是因为 rtdebug.h 老版本问题,现在可以通过 Kconfig 非常便捷的定义相关宏,因此修改了相应的 Kconifg 文件: ```python /* old version */ config RT_DEBUG_THREAD_CONFIG bool "Enable debugging of Thread State Changes" default n config RT_DEBUG_THREAD int default 1 if RT_DEBUG_THREAD_CONFIG /* old version */ ============================================================================== /* new version */ config RT_DEBUG_THREAD bool "Enable debugging of Thread State Changes" default n /* new version */ ``` 可以看出,修改后更加的简洁明了。 并且之前使用 `RT_DEBUG_LOG` 的内核对象的调试信息基本都为 `LOG_D` 级别,于是就可以使用 `LOG_D` 进行替换。 需要注意,使用 `LOG_x` 替换 `RT_DEBUG_LOG` 时,要删去换行符,因为 `LOG_x` 已经带有换行的效果。 于是我们就通过定义相关的宏,更改了对应内核对象的调试等级,使用 `LOG_x` 实现了单独调试不同内核对象的效果。 ## 后续优化方向 考虑如何优化 `rtdebug.h` 中的 `RT_DEBUG_CONTEXT_CHECK` 相关,实现 `rtdebug.h` 的彻底优化,感兴趣的小伙伴可以一起交流。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
螺丝松掉的人
这家伙很懒,什么也没写!
文章
42
回答
0
被采纳
0
关注TA
发私信
相关文章
1
RTTStudio调试时出现Debugger connection lost错误
2
RTT Studio ST-Link 每次Debug调试前都出错,但下载程序正常
3
使用RTT-Thread studio出现无法调试,且程序下载进去毫无反应?
4
rtt-studio debug模式优化
5
stlink下载程序不成功
6
studio中不能进入debug
7
studio Stlink 调试问题
8
同时接多个JLink,下载程序时需选择2次
9
studio的debug,有现场表达式吗?
10
大神们,rtthread-studio怎么自动刷新DEBUG的变量区的值?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
a1012112796
20
个答案
3
次被采纳
张世争
11
个答案
3
次被采纳
踩姑娘的小蘑菇
7
个答案
3
次被采纳
rv666
9
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
6
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部