uC/OS-II內核架構解析(4)---uC/OS-II任務管理

1. C可執行代碼結構

2010051115131239.jpg

   (1)代碼段.text:存放CPU執行的機器指令,通常.text是可共享且只讀的。

   (2)數據段.data:.rodata(常量數據)、.rwdata(已初始化全局變量、靜態變量)。

   (3)未初始化數據段.bss:未初始化的全局變量、靜態變量。

   (4)棧.stack:存放函數參數、局部變量及任務切換時的上下文。

   (5)堆.heap:用於動態內存分配。

2. 任務結構

2010051115144455.jpg

     在uC/OS-II中,任務是事件運行和管理的基本單元。一個uC/OS-II任務至少包含程序代碼、棧和TCB,還可選擇性使用相當於堆的動態內存空間。程序運行時,uC/OS-II中的任務相當於可執行代碼(可單獨運行的單元)。

uC/OS-II任務的各部分如何管理???

3. 任務棧

  • 任務棧數據類型:typedef unsigned short OS_STK

  • 任務棧增長方向:#define OS_STK_GROWTH 0/1

  • 任務棧基本功能:???

4. 任務控制塊

(1) TCB描述

     主要用來存儲任務的當前屬性。(問:任務第一次被調度時,該如何運行?)

(2) TCB主要成員

  • 任務棧空間位置:OSTCBStkPtr、OSTCBStkBottom、OSTCBStkSize;

  • 任務通信與同步:OSTCBEventPtr、OSTCBMsg;

  • 任務事件組標誌:OSTCBFlagNode、OSTCBFlagsRdy;

  • 任務等待/阻塞:OSTCBDly、OSTCBPendTO;

  • 任務當前狀態:OSTCBStat;

  • 任務優先級:OSTCBPrio;

(3)TCB全局變量

  • OS_EXT OS_TCB OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS];

  • OS_EXT OS_TCB OSTCBPrioTbl[OS_LOWEST_PRIO + 1];

  • OS_EXT OS_TCB *OSTCBFreeList;

  • OS_EXT OS_TCB *OSTCBList;

  • OS_EXT OS_TCB *OSTCBHighRdy;

  • OS_EXT OS_TCB *OSTCBCur;

5. 任務狀態切換

2010051115181675.jpg

6. 任務管理函數

 OS_TASK.C:11個函數

  • OSTaskCreate();

  • OSTaskCreateExt();

  • OSTaskDel();

  • OSTaskDelReq();

  • OSTaskChangePrio();

  • OSTaskSuspend();

  • OSTaskResume();

  • OSTaskNameGet();

  • OSTaskNameSet();

  • OSTaskStkChk();

  • OS_TaskStkClr();

  • OSTaskQuery();


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章