最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

FreeRTOS 調(diào)試方法

2023-07-06 08:59 作者:自閉選手的Z23  | 我要投稿

????很多時候,我們需要了解任務(wù)的執(zhí)行狀態(tài),任務(wù)棧的使用情況以及各個任務(wù)的 CPU 使用率,這時就需要用到官方提供的兩個函數(shù) vTaskList vTaskGetRunTimeStats。用戶就可以通過這兩個函數(shù)獲得任務(wù)的執(zhí)行情況。


????STM32F103 實現(xiàn)串口打印調(diào)試

????為了獲取 FreeRTOS 的任務(wù)信息,需要創(chuàng)建一個定時器,這個定時器的時間基準(zhǔn)精度要高于系統(tǒng)時鐘節(jié)拍,這樣得到的任務(wù)信息才準(zhǔn)確。這里提供的函數(shù)僅用于測試目的,切不可將其用于實際項目,原因有兩點:

◆ FreeRTOS 的系統(tǒng)內(nèi)核沒有對總的計數(shù)時間做溢出保護。?

◆ 定時器中斷是 50us 進入一次,比較影響系統(tǒng)性能。 這里使用的是 32 位變量來保存 50us 一次的計數(shù)值,最大支持計數(shù)時間:2^32 * 50us / 3600s = 59.6 分鐘。運行時間超過了 59.6 分鐘將不準(zhǔn)確。 具體在 FreeRTOS 的工程中如何做才可以實現(xiàn)任務(wù)信息獲取呢?

????下面分三步進行說明。

1 使能相關(guān)宏定義 需要在 FreeRTOSConfig.h 文件中使能如下宏定義:

其中變量 ulHighFrequencyTimerTicks 是需要用戶去定義的,這里是將其定義在了定時器初始化文件 SysInfoTest.c 里面。


2 精度高于滴答定時器的時鐘初始化

????這里采用 STM32F103 內(nèi)部的TIM6 實現(xiàn) 50us 一次的中斷,在中斷函數(shù)里面對變量 ulHighFrequencyTimerTicks 進行計數(shù)操作,以供 FreeRTOS 系統(tǒng)使用,具體的代碼如下:

其中函數(shù) bsp_SetTIMforInt 在文件 bsp_tim_pwm.c 里面進行了實現(xiàn),源代碼如下:

????了解函數(shù)功能,不必細(xì)看


3 獲取任務(wù)執(zhí)行情況

????通過前面的設(shè)置后,就可以在工程中通過FreeRTOS的兩個函數(shù)vTaskList和 vTaskGetRunTimeStats 獲取任務(wù)的執(zhí)行情況。這里我們分成簡單的兩步進行說明:

????◆ 第 1 步:先做精度高于滴答定時器的時鐘初始化

◆ 第 2 步:初始化好以后就可以在 FreeRTOS 的任務(wù)中使用了。這里將任務(wù)信息獲取功能放在了任務(wù) vTaskTaskUserIF 里面去實現(xiàn):


????

上面截圖中打印出來的任務(wù)狀態(tài)字母 B, R, D, S 對應(yīng)如下含義:?

#define tskBLOCKED_CHAR ( 'B' ) 任務(wù)阻塞

#define tskREADY_CHAR ( 'R' ) 任務(wù)就緒?

#define tskDELETED_CHAR ( 'D' ) 任務(wù)刪除?

#define tskSUSPENDED_CHAR ( 'S' ) 任務(wù)掛起?

另外要注意剩余棧的單位是 word,即 4 字節(jié)。比如 vTaskUserIF 任務(wù)的剩余棧是 321,代表 321*4 = 1284 字節(jié)

FreeRTOS 調(diào)試方法的評論 (共 條)

分享到微博請遵守國家法律
克山县| 乡城县| 平顶山市| 栖霞市| 鸡西市| 凤翔县| 进贤县| 金寨县| 嵊州市| 临泉县| 新宁县| 泸州市| 定襄县| 临泽县| 铜山县| 邓州市| 恭城| 呼伦贝尔市| 普格县| 托克逊县| 铜山县| 安多县| 南安市| 临沧市| 柳州市| 富平县| 和静县| 图木舒克市| 鄯善县| 志丹县| 广南县| 潼关县| 新源县| 阿鲁科尔沁旗| 榆中县| 舞阳县| 梓潼县| 睢宁县| 左权县| 黎平县| 沈阳市|