VxWorks關於任務建立的幾個函式的概述

2021-05-23 00:52:16 字數 2118 閱讀 5365

對於vxworks 的任務建立可以通過呼叫 taskspawn()或是taskinit()/taskactivate()兩種方式,以下就對這兩種方式進行說明。

taskspawn() 實現任務的建立分為兩步:1、分配任務棧的空間,初始化wind_tcb; 2、啟用任務。taskspawn()函式的定義,

int  taskspawn (char *name,              /*任務名稱必須惟一的標示*/

int priority,                /*任務優先順序(0-255)越小標示優先順序越高*/

int options,               /*任務選項*/

int stacksize,            /*任務棧大小(不包含任務名稱)*/

funcptr entrypt,     /*任務入口函式指標*/

int arg1,int arg2, int arg3,int arg4, int arg5, int arg6,int arg7, int arg8, int arg9, int arg10)

函式呼叫成功時,返回新任務的id,或者返回error。 

引數options任務選項,可以是以下的標誌組合:

vx_fp_task:標誌浮點暫存器是否屬於上下文,若函式中使用了浮點數,應帶上此標記。

vx_private_env:支援任務私有環境變數。

vx_no_stack_fill:不進行初始任務棧的填充。

vx_unbreakable:任務不允許斷點除錯(忽略斷點)。

vx_dsp_task:dsp 協處理器支援。

vx_altivec_task:altivec 協處理器支援。

引數int型的10個,主要傳入入口函式的引數,若不足10個,後面剩餘的設為0。

taskinit()實現建立任務,必須由taskactivate()來啟用。以下就對這兩個函式進行分解:

status taskinit (wind_tcb* ptcb,     /*任務控制塊wind_tcb位址*/

char* name,             /*任務名稱必須惟一的標示*/

int priority,               /*任務優先順序(0-255)越小標示優先順序越高*/

int options,               /*任務選項*/

char* pstackbase,   /*任務棧的起始位址*/

int stacksize,           /*任務棧大小(不包含任務名稱)*/

funcptr entrypt,    /*任務入口函式指標*/

int arg1,int arg2, int arg3,int arg4, int arg5, int arg6,int arg7, int arg8, int arg9, int arg10)

與taskspawn() 相比多了兩個引數wind_tcb*和char* pstackbase,任務控制塊引數由呼叫者分配空間,並由其釋放;而任務棧也也是由除錯者分配與釋放,特別留意的是任務棧的起始位址有兩種可能,地段位址或高階位址,具體由bsp而定。

status taskactivate (int tid) /*tid = (int )ptcb;*/

引數tid是表示惟一的任務id。

其實 taskspawn() 內部呼叫taskinit()/taskactivate()來完成的。或者提供了更為細緻的任務控制而已。而這兩種的建立任務的差別:

1、taskspawn()自動在系統堆上分配任務棧空間,並在任務棧上建立tcb;而taskinit()由呼叫者分配與釋放的,tcb不屬於任務棧的空間。

2、taskspawn()生成任務後進入就緒佇列;而taskinit()生成任務後處於掛起狀態,不能被直接呼叫,直到taskactivate()啟用。

vxworks任務的建立和刪除

任務的建立,暫停,恢復以及刪除 設定 任務鉤子 用以觀察任務的建立和刪除 程式建立了2個任務 taska與taskb,優先順序分別為125和130 由於vxworks的優先順序從高到低為0 255,因此task1會優先執行。taska中的i 2時,taskb將暫停,taska迴圈結束後,taskb恢...

VxWorks的任務與任務排程

作為實時作業系統,任務排程是基於優先順序的,且可搶占式的排程方式。同時對於相同優先順序的任務,支援round robin迴圈排程方式 以下簡稱rr排程 vxworks核心三個佇列 tick 佇列,ready 佇列,active 佇列,另外還有乙個佇列涉及到任務,即任務等待資源時所處的佇列,這個佇列可...

VxWorks 任務使用的學習

對任務的操作使用tasklib 中的庫函式,需要包含的標頭檔案為 tasklib.h.此外,經常使用的庫還有taskinfo,主要包括的是獲得任務資訊的庫的數。需要包含的標頭檔案為 tasklib.h.涉及的函式為 tasknametoid0,即從任務的任務名獲得對應的id號。在任務延遲時還需要和系...