吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RT-Thread Debug分析與調整方案

冬至子 ? 來源:螺絲松掉的人 ? 作者:螺絲松掉的人 ? 2023-07-22 15:32 ? 次閱讀

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:%dn",
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 保留單獨調試不同內核對象的特性。

解決方案

使用以下解決方案:

#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 文件:

/* 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 實現了單獨調試不同內核對象的效果。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RT-Thread
    +關注

    關注

    31

    文章

    1305

    瀏覽量

    40386
收藏 人收藏

    評論

    相關推薦

    RT-Thread記錄(二、RT-Thread內核啟動流程)

    在前面我們RT-Thread Studio工程基礎之上講一講RT-Thread內核啟動流程.
    的頭像 發表于 06-20 00:30 ?5096次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(二、<b class='flag-5'>RT-Thread</b>內核啟動流程)

    RT-Thread編程指南

    RT-Thread編程指南——RT-Thread開發組(2015-03-31)。RT-Thread做為國內有較大影響力的開源實時操作系統,本文是RT-Thread實時操作系統的編程指南
    發表于 11-26 16:06 ?0次下載

    RT-Thread用戶手冊

    RT-Thread用戶手冊——本書是RT-Thread的編程手冊,用于指導在RT-Thread實時操作系統環境下如何進行編 程。
    發表于 11-26 16:16 ?0次下載

    RT-Thread全球技術大會:螢石研發團隊使用RT-Thread的技術挑戰

    RT-Thread全球技術大會:研發團隊使用RT-Thread的技術挑戰 ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 11:36 ?1357次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:螢石研發團隊使用<b class='flag-5'>RT-Thread</b>的技術挑戰

    RT-Thread全球技術大會:Kconfig在RT-Thread中的工作機制

    RT-Thread全球技術大會:Kconfig在RT-Thread中的工作機制 ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 14:49 ?1584次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:Kconfig在<b class='flag-5'>RT-Thread</b>中的工作機制

    RT-Thread全球技術大會:在RT-Thread上編寫測試用例

    RT-Thread全球技術大會:在RT-Thread上編寫測試用例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 16:28 ?1520次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:在<b class='flag-5'>RT-Thread</b>上編寫測試用例

    RT-Thread全球技術大會:RT-Thread測試用例集合案例

    RT-Thread全球技術大會:RT-Thread測試用例集合案例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 16:34 ?2142次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:<b class='flag-5'>RT-Thread</b>測試用例集合案例

    RT-Thread學習筆記 RT-Thread的架構概述

    RT-Thread 簡介 作為一名 RTOS 的初學者,也許你對 RT-Thread 還比較陌生。然而,隨著你的深入接觸,你會逐漸發現 RT-Thread 的魅力和它相較于其他同類型 RTOS
    的頭像 發表于 07-09 11:27 ?4610次閱讀
    <b class='flag-5'>RT-Thread</b>學習筆記 <b class='flag-5'>RT-Thread</b>的架構概述

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡介

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
    發表于 02-22 18:23 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    RT-Thread文檔_ringbuffer

    RT-Thread文檔_ringbuffer
    發表于 02-22 18:40 ?3次下載
    <b class='flag-5'>RT-Thread</b>文檔_ringbuffer

    RT-Thread文檔_workqueue

    RT-Thread文檔_workqueue
    發表于 02-22 18:40 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_workqueue

    基于RT-Thread Studio學習

    前期準備:從官網下載 RT-Thread Studio,弄個賬號登陸,開啟rt-thread學習之旅。
    的頭像 發表于 05-15 11:00 ?4123次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio學習

    RT-Thread v5.0.2 發布

    RT-Thread 代碼倉庫地址: ●? https://github.com/RT-Thread/rt-thread RT-Thread 5.0.2 版本發布日志詳情: ●? htt
    的頭像 發表于 10-10 18:45 ?1565次閱讀
    <b class='flag-5'>RT-Thread</b> v5.0.2 發布
    蓝盾百家乐官网平台| 德州百家乐扑克桌| 石渠县| 保单百家乐路单| 利澳娱乐城注册| 金赞百家乐官网的玩法技巧和规则 | 宜良县| 百家乐技巧娱乐博彩| 明升88| 百家乐傻瓜式投注法| 张家界市| 娱乐城百家乐送白菜| 新葡京百家乐官网现金网| 百家乐策略大全| 百家乐官网胜率被控制| 百家乐棋牌交| 百家乐官网下注的规律| 机械手百家乐的玩法技巧和规则| 澳门1百家乐官网网| 尊龙百家乐娱乐城| 神人百家乐官网赌场| 大发888官方备用| 柬埔寨百家乐官网的玩法技巧和规则| 大发888开户注册哪家好| 百家乐官网怎么玩| 百家乐网址| 百家乐现场投注平台| 百家乐官网美女真人| 最新百家乐电脑游戏机| 百家乐官网下载免费软件| 威尼斯人娱乐城简介| 聚宝盆百家乐官网的玩法技巧和规则 | 淘金盈国际线上娱乐| 电玩城百家乐技巧| 百家乐官网赌博讨论群| 大发888支付宝代充| 网上百家乐真实吗| 百家乐官网概率怎么算| 威尼斯人娱乐城真人赌博| 百家乐官网双峰县| 温宿县|