VxWorks关于任务创建的几个函数的概述
? 對(duì)于VxWorks?的任務(wù)創(chuàng)建可以通過(guò)調(diào)用 taskSpawn()或是taskInit()/taskActivate()兩種方式,以下就對(duì)這兩種方式進(jìn)行說(shuō)明。
? taskSpawn() 實(shí)現(xiàn)任務(wù)的創(chuàng)建分為兩步:1、分配任務(wù)棧的空間,初始化WIND_TCB; 2、激活任務(wù)。taskSpawn()函數(shù)的定義,
int? taskSpawn (char *name,????????????? /*任務(wù)名稱(chēng)必須惟一的標(biāo)示*/
????????????????????????? int priority,??????????????? /*任務(wù)優(yōu)先級(jí)(0-255)越小標(biāo)示優(yōu)先級(jí)越高*/
????????????????????????? int options,?????????????? /*任務(wù)選項(xiàng)*/
??????????????????????????int stackSize,??????????? /*任務(wù)棧大小(不包含任務(wù)名稱(chēng))*/
????????????????????????? FUNCPTR entryPt,?????/*任務(wù)入口函數(shù)指針*/
????????????????????????? int arg1,int arg2, int arg3,int arg4, int arg5, int arg6,int arg7, int arg8, int arg9, int arg10)
函數(shù)調(diào)用成功時(shí),返回新任務(wù)的ID,或者返回ERROR。?
參數(shù)options任務(wù)選項(xiàng),可以是以下的標(biāo)志組合:
????????????? VX_FP_TASK:標(biāo)志浮點(diǎn)寄存器是否屬于上下文,若函數(shù)中使用了浮點(diǎn)數(shù),應(yīng)帶上此標(biāo)記。
????????????? VX_PRIVATE_ENV:支持任務(wù)私有環(huán)境變量。
????????????? VX_NO_STACK_FILL:不進(jìn)行初始任務(wù)棧的填充。
????????????? VX_UNBREAKABLE:任務(wù)不允許斷點(diǎn)調(diào)試(忽略斷點(diǎn))。
????????????? VX_DSP_TASK:DSP 協(xié)處理器支持。
????????????? VX_ALTIVEC_TASK:ALTIVEC 協(xié)處理器支持。
參數(shù)int型的10個(gè),主要傳入入口函數(shù)的參數(shù),若不足10個(gè),后面剩余的設(shè)為0。
?? taskInit()實(shí)現(xiàn)創(chuàng)建任務(wù),必須由taskActivate()來(lái)激活。以下就對(duì)這兩個(gè)函數(shù)進(jìn)行分解:
STATUS taskInit (WIND_TCB* Ptcb,???? /*任務(wù)控制塊WIND_TCB地址*/
????????????????????????? char* name,???????????? /*任務(wù)名稱(chēng)必須惟一的標(biāo)示*/
????????????????????????? int priority,?????????????? /*任務(wù)優(yōu)先級(jí)(0-255)越小標(biāo)示優(yōu)先級(jí)越高*/
????????????????????????? int options,???????????????/*任務(wù)選項(xiàng)*/
????????????????????????? char* pStackBase,?? /*任務(wù)棧的起始地址*/
???????????????????????? ?int stackSize,?????????? /*任務(wù)棧大小(不包含任務(wù)名稱(chēng))*/
??????????????????????????FUNCPTR entryPt,??? /*任務(wù)入口函數(shù)指針*/
??????????????????????????int arg1,int arg2, int arg3,int arg4, int arg5, int arg6,int arg7, int arg8, int arg9, int arg10)
與taskSpawn() 相比多了兩個(gè)參數(shù)WIND_TCB*和char* pStackBase,任務(wù)控制塊參數(shù)由調(diào)用者分配空間,并由其釋放;而任務(wù)棧也也是由調(diào)試者分配與釋放,特別留意的是任務(wù)棧的起始地址有兩種可能,地段地址或高端地址,具體由BSP而定。
STATUS?taskActivate (int tid) /*tid = (int )pTcb;*/
參數(shù)tid是表示惟一的任務(wù)ID。
?? 其實(shí) taskSpawn() 內(nèi)部調(diào)用taskInit()/taskActivate()來(lái)完成的。或者提供了更為細(xì)致的任務(wù)控制而已。而這兩種的創(chuàng)建任務(wù)的差別:
??? 1、taskSpawn()自動(dòng)在系統(tǒng)堆上分配任務(wù)??臻g,并在任務(wù)棧上創(chuàng)建TCB;而taskInit()由調(diào)用者分配與釋放的,TCB不屬于任務(wù)棧的空間。
??? 2、taskSpawn()生成任務(wù)后進(jìn)入就緒隊(duì)列;而taskInit()生成任務(wù)后處于掛起狀態(tài),不能被直接調(diào)用,直到taskActivate()激活。
總結(jié)
以上是生活随笔為你收集整理的VxWorks关于任务创建的几个函数的概述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在手机上续写影像传奇:一加11与哈苏的色
- 下一篇: PowerPC VxWorks BSP分