freertos作業系統 任務排程

2021-09-29 23:16:52 字數 1518 閱讀 2952

一. 任務建立

目的:應用程式中如何給各任務分配處理時間;

任意時刻,os如何使任務投入執行;

優先順序如何影響系統行為;

任務狀態;

如何實現任務;

建立乙個或多個任務的例項;

任務引數的使用 right

改變任務優先順序

刪除任務

週期性處理

空閒任務何時執行,可以用來幹什麼;

解決:任務實現—任務函式—void ataskfunction(void* para);為

任務刪除—vtaskdelete(null); 表示刪除當前任務;但是任務刪除時存在兩部分的記憶體需要被釋放:1. 核心為任務分配的內存在任務刪除時被**,2. 任務本身,比如**之類的需要使用者自己釋放。

任務建立—xtaskcreate(函式名,描述性名字,堆疊深度,傳入任務函式的引數,任務優先順序,函式控制代碼);

任務開始排程—vtaskstartscheduler ();

任務優先順序設定函式:vtaskpriorityset(函式控制代碼,優先順序數字);相關檔案freertosconfig.h

獲取優先順序:vtaskprioriitygeet(任務控制代碼)

任務引數的設定,

任務狀態,詳見freertos核心開發手冊p21——1;

週期性處理:使用api函式——vtaskdelay()函式實現;延時過程中任務將被阻塞,延時結束後,任務進入就緒,延時時間是相對於api被排程的時間的。vtaskdelayuntil(當前時間,時間增量),精準延時。

空閒任務:在排程器啟動時,自行建立的乙個任務idle。程式設計師可以通過空閒鉤子函式設定系統預設執行的狀態。詳見例子1。

疑問:為什麼乙個任務函式可以建立多個任務;

解答:參考核心開發手冊p15,只有乙個任務函式,,但是可以使用多次create()api函式。

freertos 排程器什麼時侯啟動排程;

解答: 每乙個任務有乙個時間片的概念,為了完成排程,在每個時間片的結束後,排程器執行自身——心跳中斷的週期性中斷完成排程,在中斷執行完成後,cpu自行切換到下乙個任務進行排程。在freertosconfig.h中配置常量configtick_path_hz設定頻率。porttick_path_ms將以心跳為單位的時間值轉化為以毫秒為單位的時間值。

補充:freertos任務排程方式: 搶占式、時間片式

搶占式:任務會一直執行到被高優先順序的任務搶占或者被阻塞式函式所阻擋,沒有時間片的概念,餓死現象

時間片式子:每個任務的優先順序相同,任務會執行到固定時間片或者被阻塞,才會執行同優先順序

排程方式的設定:在配置檔案freertosconfig.h中禁止時間片排程,系統預設的方式是時間片的排程。

c語言volatille關鍵字:

多工時,該標誌可以作為程序共享變數的標誌。

擴充套件「非執行態」:

對於高優先順序人任務,我們需要在設定乙個任務驅動事件,只有在該事件執行以後,高優先順序的任務才可以順利的進行,否則執行低優先順序不需要驅動事件的任務文件中使用了api函式vtaskdelay()和vtaskdelayuntil()作為驅動事件。

freeRTOS作業系統任務排程方式

任務排程的方式 一.搶占式 如果使用者在 freertos 的配置檔案 freertosconfig.h 中禁止使用時間片排程,那麼每個任務必須配置不同的優先順序。當 freertos 多工啟動執行後,基本會按照如下的方式去執行 1.首先執行的最高優先順序的任務 task1,task1 會一直執行直...

了解FreeRTOS作業系統

1 與freertos核心有關的檔案數量為3個,分別是list.c queue.c tasks.c 該檔案位於freertos source 2 與記憶體分配有關的檔案共有5個,分別是heap 1.c,heap 2.c,heap 3.c,heap 4.c,heap 5.c。5個檔案只需選擇其中的1個...

FreeRTOS 作業系統學習(二) 任務

freertos 作業系統學習 1.任務 1.1 freertos 中的任務 只要硬體和記憶體足夠,freertos 執行的任務數量不受限制,作為乙個實時作業系統,freertos 同時支援迴圈和非迴圈任務。在 rtos 中,任務由乙個簡單的c函式定義,引數為void 型別,無返回值 void 用些...