宣告及感謝: 跟隨正點原子資料學習, 在此作為學習的記錄和總結
環境 keil , stm32f103
api函式預覽:
1. ubasetype_t uxtaskpriorityget( taskhandle_t xtask )// 獲取某個任務的優先順序
引數: xtask 傳入任務控制代碼
unsigned portbase_type priority;
priority = uxtaskpriorityget(led0task_handler);
// 列印 priority 即可看到 led0task_handler 任務的優先順序
2. vtaskpriorityset()
設定任務的優先順序
vtaskpriorityset(led0task_handler, 10);
// 給 led0task_handler 任務控制代碼的任務設定優先順序為10;
// 可以使用步驟1檢視任務修改後的優先順序.
3.uxtaskgetsystemstate
// 獲取系統所有任務的狀態.
u32 totalruntime; // 系統總執行時間
ubasetype_t arraysize,x; //
taskstatus_t *statusarray;
arraysize = uxtaskgetnumberoftasks(); // 獲取系統任務數量
statusarray = pvportmalloc(arraysize*sizeof(taskstatus_t)); // 申請記憶體
if(statusarray!=null) // 記憶體申請成功
etaskstate;
6.vtasklist():
以一種**的形式輸出當前系統中所有任務的詳細資訊
char infobuffer[1000];
vtasklist(infobuffer); // 獲取系統任務的資訊儲存在infobuffer 陣列中
列印 infobuffer 會看到如下資訊
query_task r 3 192 5
idle r 0 108 2
led0_task b 2 108 4
tmr svc s 31 236 3
資訊中每一列代表含義
任務名稱 任務狀態 任務優先順序 任務剩餘堆疊大小 任務編號
使用此功能需要 將這兩個巨集定義
configuse_trace_facility 1
configuse_stats_formatting_functions 1
最後 在任務狀態中
r 表示 就緒
b 表示 阻塞
s 表示 暫停
7.xtaskgethandle()
// 根據任務名稱獲取任務控制代碼
taskhandle_t taskhandle;
taskhandle=xtaskgethandle(「query_task」); // 引數傳入任務名稱 ,返回值 為任務控制代碼
8.vtaskgetruntimestats
統計任務的執行時間資訊
要使用此函式的話需要將
configgenerate_run_time_stats 和 configuse_stats_formatting_functions
的巨集定義定為1.
需要實現 兩個巨集
portconfigure_timer_for_run_time_stats()
portget_run_time_counter_value()
// 首先注意這兩個巨集雖然不需要傳引數, 但是需要括號的。
portconfigure_timer_for_run_time_stats 這個巨集用來初始化時間統計功能所需的時基, 一般是定時器/計數器。
這個時鐘時基比系統時鐘高10~20倍。
portget_run_time_counter_value 這個巨集 是當前時基的值。
示例:巨集定義設定
#define portconfigure_timer_for_run_time_stats() configuretimeforruntimestats() // 定時器3 提供時間統計的時基, 頻率為20k 即週期為50us
#define portget_run_time_counter_value() freertosruntimeticks // 獲取時間統計值 ,乙個全域性變數
巨集定義實現
// freertos時間統計所有的節拍計數器
volatile unsigned long long freertosruntimeticks; // 使用 unsigned long long 防止溢位
// 初始化tim3使其為freertos的時間統計提供時基
void configuretimeforruntimestats(void)
// 定時器3中斷服務函式
void tim3_irqhandler(void)
tim_clearitpendingbit(tim3,tim_it_update); // 清除中斷標誌位
}
具體使用
// 在任務中使用
void runtimestats_task(void *pvparameters)
vtaskdelay(10); // 延時10ms
}}
// 串列埠輸出資訊
一共三列, 分別表示 任務名稱, 任務執行時間。 執行所佔百分比
在執行時間中,需要將其值 * 時基
vtaskgetruntimestats 此功能只能在調式階段使用, 因為實現此功能較佔系統時間。
FreeRTOS學習(二)任務基礎
2.任務基礎知識 在嵌入式開發中,有兩種常見的開發方式 前後臺系統和嵌入式作業系統。1.1 前後臺系統 前台 就是中斷,可以多級巢狀,處於處理一些實時性要求比較高的事件,比如按鍵的狀態獲取。後台 乙個無限迴圈,在迴圈中呼叫相關函式完成相應操作。這種程式設計方式的主要缺陷在於兩方面 1 複雜度方面 無...
FreeRTOS學習(三)任務管理
2.任務刪除 3.任務掛起與恢復 4.任務相關api freertos 提供了多種任務建立的api,這裡主要列舉了動態建立和靜態建立 函式 api 功能描述 xtaskcreate 動態建立,堆疊由 freertos 動態分配 xtaskcreatestatic 靜態建立,堆疊由使用者指定分配 1....
FreeRTOS學習 二 任務掛起和恢復
宣告及感謝 跟隨正點原子資料學習,在此作為學習的記錄和總結 環境 keil stm32f103 1.任務掛起 vtasksuspend task1task handler 引數傳入任務控制代碼 2.任務恢復 任務恢復有兩種情況,第一種 在非中斷中恢復 vtaskresume task1task ha...