0/*條件編譯,是否同意任務(wù)的創(chuàng)建*/INT8UOSTaskCreate(void(*task)(void*pd),/*函數(shù)指針,void*pd為函數(shù)的參數(shù)*/void*pdata,/*建立任務(wù)時(shí),傳遞的參數(shù)*/OS_ST" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

uC/OS II 函數(shù)說明 之–OSTaskCreate()與OSTask

系統(tǒng) 1919 0

1. OSTaskCreate()
??? OSTaskCreate()建立一個(gè)新任務(wù),能夠在多任務(wù)環(huán)境啟動(dòng)之前,或者執(zhí)行任務(wù)中建立任務(wù)。 注意,ISR中禁止建立任務(wù),一個(gè)任務(wù)必須為無限循環(huán)結(jié)構(gòu)。 ???
??? 源碼例如以下:

#if OS_TASK_CREATE_EN > 0??????????????????? /* 條件編譯,是否同意任務(wù)的創(chuàng)建?????????????? */
INT8U? OSTaskCreate (void (*task)(void *pd), /* 函數(shù)指針,void *pd為函數(shù)的參數(shù)???????????? */
???????????????????? void *pdata,??????????? /* 建立任務(wù)時(shí),傳遞的參數(shù)???????????????????? */
???????????????????? OS_STK *ptos,?????????? /* 指向堆棧任務(wù)棧頂?shù)闹羔???????????????????? */
???????????????????? INT8U prio)???????????? /* 任務(wù)優(yōu)先級(jí)???????????????????????????????? */
{
#if OS_CRITICAL_METHOD == 3????????????????? /* Allocate storage for CPU status register?? */
??? OS_CPU_SR? cpu_sr;
#endif
??? OS_STK??? *psp;
??? INT8U????? err;

#if OS_ARG_CHK_EN > 0
??? if (prio > OS_LOWEST_PRIO) {???????????? /* 參數(shù)檢查,優(yōu)先級(jí)是否處于同意優(yōu)先級(jí)之內(nèi)???? */
??????? return (OS_PRIO_INVALID);
??? }
#endif
??? OS_ENTER_CRITICAL();???????????????????? /* 關(guān)中斷???????????????????????????????????? */
??? if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* 推斷任務(wù)的優(yōu)先級(jí)是否存在,如不存在,設(shè)置任 */
??????? OSTCBPrioTbl[prio] = (OS_TCB *)1;??? /* 務(wù)優(yōu)先級(jí)為1設(shè)置優(yōu)先級(jí)后,就能夠開中斷了,? */
???????????????????????????????????????????? /* 不用操心沖突,由于該優(yōu)先級(jí)已經(jīng)被占了?????? */
??????? OS_EXIT_CRITICAL();
??????? psp = (OS_STK *)OSTaskStkInit(task, pdata, ptos, 0);???
??????????????????????????????????? /* 初始化堆棧,此函數(shù)與詳細(xì)的硬件有關(guān),OS_CPU_C.C????? */
??????? err = OS_TCBInit(prio, psp, (OS_STK *)0, 0, 0, (void *)0, 0); /* 詳見此函數(shù)的說明? */
??????? if (err == OS_NO_ERR) {
??????????? OS_ENTER_CRITICAL();
??????????? OSTaskCtr++;???????????????????? /* 任務(wù)計(jì)數(shù)器加1,統(tǒng)計(jì)執(zhí)行的任務(wù)數(shù)??????????? */
??????????? OS_EXIT_CRITICAL();
??????????? if (OSRunning == TRUE) {???????? /* 假設(shè)是在任務(wù)執(zhí)行過程中新建任務(wù),須要進(jìn)行?? */
??????????????? OS_Sched();????????????????? /* 任務(wù)調(diào)度,保證 優(yōu)先級(jí)最高的任務(wù)處于執(zhí)行態(tài)? */
??????????? }
??????? } else {
??????????? OS_ENTER_CRITICAL();
??????????? OSTCBPrioTbl[prio] = (OS_TCB *)0;/* 假設(shè)任務(wù)創(chuàng)建失敗,優(yōu)先級(jí)設(shè)置為0,放棄該??? */
???????????????????????????????????????????? /* 任務(wù)的優(yōu)先級(jí)保證別的任務(wù)創(chuàng)建時(shí)能夠使用???? */
???????????????????????????????????????????? /* 此優(yōu)先級(jí)?????????????????????????????????? */
??????????? OS_EXIT_CRITICAL();
??????? }
??????? return (err);??????????????????????? /* 創(chuàng)建任務(wù)失敗,返回錯(cuò)誤代碼???????????????? */
??? }
??? OS_EXIT_CRITICAL();
??? return (OS_PRIO_EXIST);????????????????? /* 返回OS_PRIO_EXIST,告知任務(wù)優(yōu)先級(jí)已經(jīng)存在? */
}
#endif

2. OSTaskCreateExt()
??? OSTaskCreateExt()為OSTaskCreate()的擴(kuò)展函數(shù),同意很多其它的內(nèi)容設(shè)置。
??? 源碼例如以下:

#if OS_TASK_CREATE_EXT_EN > 0
INT8U? OSTaskCreateExt (void?? (*task)(void *pd), /* 同上??????????????????????????????????? */
??????????????????????? void??? *pdata,??? /* 同上?????????????????????????????????????????? */
??????????????????????? OS_STK? *ptos,???? /* 同上?????????????????????????????????????????? */
??????????????????????? INT8U??? prio,???? /* 同上?????????????????????????????????????????? */
??????????????????????? INT16U?? id,?????? /* 任務(wù)ID,2.52版本號(hào),無實(shí)際作用,保留作為擴(kuò)展用?? */
??????????????????????? OS_STK? *pbos,???? /* 指向堆棧底部的指針,用于OSTaskStkChk()函數(shù)???? */
??????????????????????? INT32U?? stk_size, /* 指定任務(wù)堆棧的大小,由OS_STK類型決定?????????? */
??????????????????????? void??? *pext,???? /* 定義數(shù)據(jù)結(jié)構(gòu)的指針,作為TCB的擴(kuò)展????????????? */
??????????????????????? INT16U?? opt)????? /* 存放于任務(wù)操作相關(guān)的信息,詳見uCOS-II.H??????? */
{
#if OS_CRITICAL_METHOD == 3??????????????? /* Allocate storage for CPU status register?????? */
??? OS_CPU_SR? cpu_sr;
#endif
??? OS_STK??? *psp;
??? INT8U????? err;

#if OS_ARG_CHK_EN > 0
??? if (prio > OS_LOWEST_PRIO) {?????????? /* Make sure priority is within allowable range?? */
??????? return (OS_PRIO_INVALID);
??? }
#endif
??? OS_ENTER_CRITICAL();
??? if (OSTCBPrioTbl[prio] == (OS_TCB *)0) {
?????? /* Make sure task doesn’t already exist at this priority? */

?????? /* Reserve the priority to prevent others from doing …? */
?????? /* … the same thing until task is created.????????????? */

??????? OSTCBPrioTbl[prio] = (OS_TCB *)1;??????????????? OS_EXIT_CRITICAL();

??????? if (((opt & OS_TASK_OPT_STK_CHK) != 0×0000) ||??
?????????? /* See if stack checking has been enabled???? */
??????????? ((opt & OS_TASK_OPT_STK_CLR) != 0×0000)) {??
?????????? /* See if stack needs to be cleared?????????? */
??????????? #if OS_STK_GROWTH == 1
??????????? (void)memset(pbos, 0, stk_size * sizeof(OS_STK));
??????????? #else
??????????? (void)memset(ptos, 0, stk_size * sizeof(OS_STK));
??????????? #endif
??????? }

??????? psp = (OS_STK *)OSTaskStkInit(task, pdata, ptos, opt);
????????????????????????????????????????? /* Initialize the task’s stack?????????????????? */
??????? err = OS_TCBInit(prio, psp, pbos, id, stk_size, pext, opt);
??????? if (err == OS_NO_ERR) {
??????????? OS_ENTER_CRITICAL();
??????????? OSTaskCtr++;????????????????? /* Increment the #tasks counter????????????????? */
??????????? OS_EXIT_CRITICAL();
??????????? if (OSRunning == TRUE) {????? /* Find HPT if multitasking has started????????? */
??????????????? OS_Sched();
??????????? }
??????? } else {
??????????? OS_ENTER_CRITICAL();
??????????? OSTCBPrioTbl[prio] = (OS_TCB *)0;????? /* Make this priority avail. to others? */
??????????? OS_EXIT_CRITICAL();
??????? }
??????? return (err);
??? }
??? OS_EXIT_CRITICAL();
??? return (OS_PRIO_EXIST);
}
#endif

?

uC/OS II 函數(shù)說明 之–OSTaskCreate()與OSTaskCreateExt()


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲日本中文字幕天天更新 | 无遮挡羞羞视频 | 九九综合九九 | 男女一进一出无遮挡黄 | 久在线| 九九精品激情在线视频 | 亚洲精品视频在线 | 黄色aaa视频 | 国产精品人妻无码久久久2022 | 黑色丝袜美女被视频网站 | 中文字幕三区 | 亚洲娇小性xxxx色 | cao视频 | 国产一国产一区秋霞在线观看 | 精品三级在线 | 精品久久久久久久 | 久久影院在线观看 | 99久久久无码国产精品 | 日本不卡视频在线观看 | 美腿丝袜中文字幕 | 日韩免费视频观看 | 久久综合伊人 | 一区二区三区四区国产精品视频 | 天天碰夜夜 | 精品国产一级毛片 | 伊人久久99亚洲精品久久频 | 亚洲 日本 欧美 日韩精品 | 在线播放国产精品 | 亚洲一区 中文字幕 | 久草com | 欧美一级www片免费观看 | 欧美三级免费看 | 国产91久久最新观看地址 | 一级毛片视频免费 | 四色永久 | 国产精选一区二区 | 91精品国产综合久久婷婷香蕉 | 一级毛片网 | 欧美一区二区三区精品国产 | 国产AV一区二区三区传媒 | 久热草视频|