VxWorks关于任务创建的几个函数的概述
? 對于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关于任务创建的几个函数的概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在手机上续写影像传奇:一加11与哈苏的色
- 下一篇: PowerPC VxWorks BSP分