RTAI的使用者空間程式設計(一) 任務建立

2021-07-26 21:44:17 字數 1572 閱讀 3884

實時任務的建立主要完成對代表實時任務實體的任務結構變數的初始化操作,包括分配任務棧、初始化任務棧、初始化鍊錶指標等。

1. 函式

rt_task* rt_task_init(unsigned

long name, int priority, int stack_size, int max_msg_size)

rt_task*rt_task_init_schmod(unsigned

long name, int priority, int stack_size, int

max_msg_size, int policy, int cpus_allowed)

正如你可以看到的,有兩個選項可以用來建立乙個使用者模式下的實時任務。在使用者模式下,rt_task_init被認為是乙個更簡單但因此有限的捷徑。總之他們都可以用於這個特定的目的。只是為了記錄第乙個被定義為以下的:

rtai_proto(rt_task *,rt_task_init,(unsigned

long name, int priority, int stack_size, int max_msg_size))

它的意思是,它使用sched_fifo策略並且設定cpu允許0xff。

他們建立乙個新的實時任務在使用者空間,或者更好的說法是,他們在使用者空間為linux程序/任務建立了乙個rtai任務擴充套件。

2. 引數

name:任務名。

priority:任務優先順序,0最高。

stack_size:棧大小(不再被使用的遺留引數,只是為了可移植性才保留的)。預設值是512。

max_msg_size:可為0,在這種情況下使用乙個預設的內部值。預設值為256。為了適合你的需求,有可能需要設定乙個更大的值。在這種情況下,要麼合理設定巨集msg_size來重新編譯sys.c,要麼在這裡明確分配大點的尺寸。但是,注意這點,訊息大小不是關鍵的。事實上在任何需要的時候,模組都會重新分配它,動態並且設定好了合適的大小。

policy:排程策略,預設的是sched_fifo,也可以設定成 rt_sched_rr。rr只是在有多個使用相同的優先順序並且不釋放cpu的任務的時候使用,。在這種情況下,rr政策將會照顧它的平衡

cpus_allowed:你想讓任務執行的cpu。它是個bit。當rtai希望乙個任務靜態地在乙個特定的cpu上執行的時候,它是強制性的。注意,如果你想在任務建立之後改變cpu,這一舉動將會殺死real_time。如果指定了更多的bit,rtai通過盡量平衡這工作強迫任務執行在第乙個可用的cpu上。//smp用的

3. 注意

 訊息有個動態記憶體增加,每次buffer大小溢位時,現有的都會被釋放,rtai real_time heap會新建立乙個大約比原來大20%新buffer。這個操作顯然是時間消費, 所以為了最好的效能表現,強烈建議從最初始階段就定義正確的大小。

4. 示例**

int main(void)

return

0;

FreeRTOS學習 一 任務的建立和刪除

宣告及感謝 跟隨正點原子資料學習,在此作為學習的記錄和總結 環境 keil stm32f103 1.任務的建立 建立任務的方法有三種 1 動態建立 xtaskcreate 使用此xtaskcreate函式 需配置 configsupport dynamic allocation 巨集定義為1 建立開...

一 任務排程quartz 基礎概念和原理

1 quartz是乙個任務排程框架,幾乎可以整合到任乙個應用系統中 主要負責執行或通知其他軟體元件在預定時間執行的服務元件。2 quartz使用quartz.properties配置檔案 配置檔案中的引數沒有所必須需要的引數配置,可根據具體情況進行配置 系統有預設的配置檔案 3 quartz既可以單...

ucos II 核心學習之一 任務狀態及任務控制塊

ucos ii 核心學習之一 任務狀態及任務控制塊 乙個任務被建立之後,可以處於以下五種狀態之一。這五種狀態分別是 1.睡眠狀態 2.就緒狀態 3.等待狀態 4.中斷服務狀態 5.執行狀態 下面簡單介紹下各狀態的含義及各狀態切換的方法。睡眠狀態 睡眠態 dormant 指任務駐留在程式空間之中,還沒...