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)論
主站蜘蛛池模板: 国产亚洲欧美在线人成aaaa | yw在线播放 | 中文字幕一区在线观看视频 | 天天综合色天天综合 | 午夜免费视频 | 成人免费网站在线观看 | 成人亚洲| 亚洲精品乱码久久久久久9色 | 精品国产一区二区亚洲人成毛片 | 亚洲精品成A人在线观看拍拍拍 | 草草草在线视频 | 亚洲欧美综合人成野草 | 美女羞羞视频网站 | 在线成人免费视频 | 亚洲精品久久久 | 国产三级在线观看 | 欧美久久久久久久一区二区三区 | 色天天天天综合男人的天堂 | 黄色的视频免费观看 | 久久综合九色综合国产 | 免费黄色在线 | 成人久久精品一区二区三区 | www.成人.com | 激情视频免费 | 99久久一区二区 | 综合色在线 | 欧美二区三区 | 婷婷色综合网 | 久久综合一 | 久久久久久网站 | 91精品国产一区二区三区蜜臀 | 亚洲精品无码成人A片九色播放 | 毛片毛片毛片 | 边摸边吃奶边做激情叫床文章 | 一级欧美日韩 | 一级毛片免费播放 | av在线等 | 亚洲综合一二三区 | 9久9久女女热精品视频免费观看 | 91婷婷| 免费精品美女久久久久久久久久 |