日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UCOSIIIAPI函数接口OSTaskCreate();函数

發布時間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UCOSIIIAPI函数接口OSTaskCreate();函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

任務的創建和刪除實驗
uCOSIII是多任務系統,那么肯定要創建任務,創建任務就是將任務控制塊、任務堆棧、任務代碼等聯系在一起,并且初始化任務控制塊的相應字段。在UCOSIII中我們通過函數OSTaskCreate ();來創建任務,OSTaskCreate();函數原型如下(在os_task.c中有定義)。電泳OSTaskCreate ();創建一個任務之后,剛創建的任務就會進入就緒狀態,注意!不能夠在中斷服務程序中調用OSTaskCreate ();函數創建任務。

void OSTaskCreate (OS_TCB *p_tcb,CPU_CHAR *p_name,OS_TASK_PTR p_task,void *p_arg,OS_PRIO prio,CPU_STK *p_stk_base,CPU_STK_SIZE stk_limit,CPU_STK_SIZE stk_size,OS_MSG_QTY q_size,OS_TICK time_quanta,void *p_ext,OS_OPT opt,OS_ERR *p_err) {CPU_STK_SIZE i; #if OS_CFG_TASK_REG_TBL_SIZE > 0uOS_REG_ID reg_nbr; #endif #if defined(OS_CFG_TLS_TBL_SIZE) && (OS_CFG_TLS_TBL_SIZE > 0u)OS_TLS_ID id; #endifCPU_STK *p_sp;CPU_STK *p_stk_limit;CPU_SR_ALLOC();#ifdef OS_SAFETY_CRITICALif (p_err == (OS_ERR *)0) {OS_SAFETY_CRITICAL_EXCEPTION();return;} #endif#ifdef OS_SAFETY_CRITICAL_IEC61508if (OSSafetyCriticalStartFlag == DEF_TRUE) {*p_err = OS_ERR_ILLEGAL_CREATE_RUN_TIME;return;} #endif#if OS_CFG_CALLED_FROM_ISR_CHK_EN > 0uif (OSIntNestingCtr > (OS_NESTING_CTR)0) { /* ---------- CANNOT CREATE A TASK FROM AN ISR ---------- */*p_err = OS_ERR_TASK_CREATE_ISR;return;} #endif#if OS_CFG_ARG_CHK_EN > 0u /* ---------------- VALIDATE ARGUMENTS ------------------ */if (p_tcb == (OS_TCB *)0) { /* User must supply a valid OS_TCB */*p_err = OS_ERR_TCB_INVALID;return;}if (p_task == (OS_TASK_PTR)0) { /* User must supply a valid task */*p_err = OS_ERR_TASK_INVALID;return;}if (p_stk_base == (CPU_STK *)0) { /* User must supply a valid stack base address */*p_err = OS_ERR_STK_INVALID;return;}if (stk_size < OSCfg_StkSizeMin) { /* User must supply a valid minimum stack size */*p_err = OS_ERR_STK_SIZE_INVALID;return;}if (stk_limit >= stk_size) { /* User must supply a valid stack limit */*p_err = OS_ERR_STK_LIMIT_INVALID;return;}if (prio >= OS_CFG_PRIO_MAX) { /* Priority must be within 0 and OS_CFG_PRIO_MAX-1 */*p_err = OS_ERR_PRIO_INVALID;return;} #endif#if OS_CFG_ISR_POST_DEFERRED_EN > 0uif (prio == (OS_PRIO)0) {if (p_tcb != &OSIntQTaskTCB) {*p_err = OS_ERR_PRIO_INVALID; /* Not allowed to use priority 0 */return;}} #endifif (prio == (OS_CFG_PRIO_MAX - 1u)) {if (p_tcb != &OSIdleTaskTCB) {*p_err = OS_ERR_PRIO_INVALID; /* Not allowed to use same priority as idle task */return;}}OS_TaskInitTCB(p_tcb); /* Initialize the TCB to default values */*p_err = OS_ERR_NONE;/* --------------- CLEAR THE TASK'S STACK --------------- */if ((opt & OS_OPT_TASK_STK_CHK) != (OS_OPT)0) { /* See if stack checking has been enabled */if ((opt & OS_OPT_TASK_STK_CLR) != (OS_OPT)0) { /* See if stack needs to be cleared */p_sp = p_stk_base;for (i = 0u; i < stk_size; i++) { /* Stack grows from HIGH to LOW memory */*p_sp = (CPU_STK)0; /* Clear from bottom of stack and up! */p_sp++;}}}/* ------- INITIALIZE THE STACK FRAME OF THE TASK ------- */ #if (CPU_CFG_STK_GROWTH == CPU_STK_GROWTH_HI_TO_LO)p_stk_limit = p_stk_base + stk_limit; #elsep_stk_limit = p_stk_base + (stk_size - 1u) - stk_limit; #endifp_sp = OSTaskStkInit(p_task,p_arg,p_stk_base,p_stk_limit,stk_size,opt);/* -------------- INITIALIZE THE TCB FIELDS ------------- */p_tcb->TaskEntryAddr = p_task; /* Save task entry point address */p_tcb->TaskEntryArg = p_arg; /* Save task entry argument */p_tcb->NamePtr = p_name; /* Save task name */p_tcb->Prio = prio; /* Save the task's priority */p_tcb->StkPtr = p_sp; /* Save the new top-of-stack pointer */p_tcb->StkLimitPtr = p_stk_limit; /* Save the stack limit pointer */p_tcb->TimeQuanta = time_quanta; /* Save the #ticks for time slice (0 means not sliced) */ #if OS_CFG_SCHED_ROUND_ROBIN_EN > 0uif (time_quanta == (OS_TICK)0) {p_tcb->TimeQuantaCtr = OSSchedRoundRobinDfltTimeQuanta;} else {p_tcb->TimeQuantaCtr = time_quanta;} #endifp_tcb->ExtPtr = p_ext; /* Save pointer to TCB extension */p_tcb->StkBasePtr = p_stk_base; /* Save pointer to the base address of the stack */p_tcb->StkSize = stk_size; /* Save the stack size (in number of CPU_STK elements) */p_tcb->Opt = opt; /* Save task options */#if OS_CFG_TASK_REG_TBL_SIZE > 0ufor (reg_nbr = 0u; reg_nbr < OS_CFG_TASK_REG_TBL_SIZE; reg_nbr++) {p_tcb->RegTbl[reg_nbr] = (OS_REG)0;} #endif#if OS_CFG_TASK_Q_EN > 0uOS_MsgQInit(&p_tcb->MsgQ, /* Initialize the task's message queue */q_size); #else(void)&q_size; #endifOSTaskCreateHook(p_tcb); /* Call user defined hook */#if defined(OS_CFG_TLS_TBL_SIZE) && (OS_CFG_TLS_TBL_SIZE > 0u)for (id = 0u; id < OS_CFG_TLS_TBL_SIZE; id++) {p_tcb->TLS_Tbl[id] = (OS_TLS)0;}OS_TLS_TaskCreate(p_tcb); /* Call TLS hook */ #endif/* --------------- ADD TASK TO READY LIST --------------- */OS_CRITICAL_ENTER();OS_PrioInsert(p_tcb->Prio);OS_RdyListInsertTail(p_tcb);#if OS_CFG_DBG_EN > 0uOS_TaskDbgListAdd(p_tcb); #endifOSTaskQty++; /* Increment the #tasks counter */if (OSRunning != OS_STATE_OS_RUNNING) { /* Return if multitasking has not started */OS_CRITICAL_EXIT();return;}OS_CRITICAL_EXIT_NO_SCHED();OSSched(); }
**void OSTaskCreate (OS_TCB *p_tcb,CPU_CHAR *p_name,OS_TASK_PTR p_task,void *p_arg,OS_PRIO prio,CPU_STK *p_stk_base,CPU_STK_SIZE stk_limit,CPU_STK_SIZE stk_size,OS_MSG_QTY q_size,OS_TICK time_quanta,void *p_ext,OS_OPT opt,OS_ERR *p_err)**

*p_tcb 指向任務的控制塊OS_TCB
*p_name 指向任務的名字,我們可以為每一個任務取一個名字
p_task 執行任務代碼,也就是任務函數的名字
*p_arg 傳遞給任務的參數
prio 任務優先級,數值越低優先級越高,用戶不能夠使用系統任務使用的那些優先級!
*p_stk_base 指向任務堆棧的基地址
stk_limit 任務堆棧深度,用來檢測和確保堆棧不溢出
stk_size 任務堆棧大小
q_size COSIII中每個任務都有一個可選的內部消息隊列,我們要定義OS_CFG_TASK_Q_EN>0,這時才能使用這個內部 消息隊列
time_quanta 在使能時間片輪轉調用時用來設置時間片長度,默認節拍為時鐘節拍除以10.
*p_ext 指向用戶補充的存儲區。
opt 包含任務的特定選項,有如下選項可以設置。
OS_OPT_TASK_NONE 表示沒有任何選項
OS_OPT_TASK_STK_CHK 指定是否允許檢測該任務的堆棧
OS_OPT_TASK_STK_CLR 指定是否清除該任務的堆棧
OS_OPT_TASK_SAVE_FP 指定是否存浮點寄存器,CPU需要浮點運算硬件并且有專用代碼保護浮點 寄存器
*p_err 用來保存調用該函數后返回的錯誤代碼。

總結

以上是生活随笔為你收集整理的UCOSIIIAPI函数接口OSTaskCreate();函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩一级网站 | 精品无码一区二区三区 | 欧美最猛性xxxxx(亚洲精品) | 天堂俺去俺来也www 欧美大片在线播放 | 亚洲欧美在线观看 | 日韩欧美一区二区三区在线 | 日韩中文字幕一区二区 | 成人在线观看网站 | 一级片在线| 日韩色图一区 | 国产一区二区在线免费观看视频 | 日韩r级电影在线观看 | 国产一二三四五区 | 欧美日韩精品一区二区 | 亚洲一区二区三区精品视频 | 成年人看的毛片 | 亚洲三级a | 色欲久久久天天天综合网精品 | 狠狠干在线视频 | 国产精品久久久久久久久免费软件 | 亚洲精品www. | 国产麻豆一区二区三区在线观看 | 永久免费精品影视网站 | 手机成人在线视频 | 婷婷亚洲综合 | 欧美性受xxxx黑人 | 精品不卡一区二区 | 尤物精品视频在线观看 | 艳妇臀荡乳欲伦交换电影 | 一区精品在线 | av一本在线 | 午夜精品一区二区三区三上悠亚 | 致单身男女免费观看完整版 | 公侵犯人妻一区二区 | 狠狠干夜夜骑 | gogo人体做爰大胆视频 | 妹子色综合 | 亚洲精品欧美精品 | 天堂国产精品 | 婷婷去俺也去 | 亚洲一区中文字幕永久在线 | 精品久久久久久中文字幕 | 欧美日韩欧美 | 中文字幕一区二区三区免费看 | 免费播放毛片精品视频 | 国产骚b| 九九视屏 | 国产91丝袜在线播放0 | 欧美人一级淫片a免费播放 西方av在线 | 性囗交免费视频观看 | 在线观看黄网 | 日本艳妇 | 男人日女人b视频 | 日本黄色网络 | 亚洲日本中文字幕在线 | 久久久久久伦理 | 毛片免费一区二区三区 | 色婷婷中文字幕 | 干干干日日日 | 久久精品国产免费看久久精品 | 日本三级少妇 | 中文字幕人妻色偷偷久久 | 一本色道综合久久欧美日韩精品 | 青青国产视频 | 伊人久久大香线蕉av色婷婷色 | 熟妇大屁股一区二区三区视频 | 黄色国产 | av综合在线观看 | 成人免费看片' | jlzzjlzz国产精品久久 | 久久久九九九热 | 国产黄色大片视频 | 伊人成人久久 | av视| 国产激情av一区二区三区 | www.4虎| 尤物国产在线 | 91在线看视频 | 毛片视频在线免费观看 | 欧美一级黄色片 | 三级欧美视频 | 国产αv| 亚洲天堂国产 | 久久久男人的天堂 | 久久久久毛片 | 国产色网址 | 亚洲精品欧美 | 精品自拍视频在线观看 | 亚洲激情久久 | 少妇乱淫 | 少妇免费看 | 欧美一二区| 精品久久在线观看 | 国产又黄又粗 | 亚洲色婷婷久久精品av蜜桃 | 国产精品无码中文 | 亚洲伦理在线播放 | 欧洲-级毛片内射 | 久久最新免费视频 |