1. 程式人生 > >UCOS_III(原子戰艦STM32)學習筆記二

UCOS_III(原子戰艦STM32)學習筆記二

- 1.任務堆疊

#define START_STK_SIZE 512
CPU_STK START_TASK_STK[START_STK_SIZE]

任務堆疊定義為512,CPU_STK 為uint型[4個位元組],故定義的堆疊陣列 START_TASK_STK大小為512*4=2048位元組。

- 2.任務堆疊初始化

  • 任務如何才能切換回上一個任務並且還能接著從上次被中斷的地方開始執行?恢復現場即可,現場就是CPU的內部各個暫存器。因此在建立一個新任務時,必須把系統啟動這個任務時所需的CPU各個暫存器初始值事先存放在任務堆疊中。這樣當任務獲得CPU使用權時,就把任務堆疊的內容複製到CPU的各個暫存器,從而可以任務順利地啟動並執行。

任務堆疊初始化函式為OSTaskStkInit(),這個函式在任務建立函式OSTaskCreate()中呼叫。

- 3.建立任務堆疊

  • 1

- 4.任務控制塊

-OS_TCB StartTaskTCB
任務控制塊初始化函式OS_TaskInitTCB(),這個函式在任務建立函式OSTaskCreate()中呼叫。

- 5.任務優先順序

  • 任務優先順序數由巨集OS_CFG_PRIO_MAX來定;
    數值越小,優先順序越高;
    最低優先順序為OS_CFG_PRIO_MAX-1;
    該巨集位於os_cfg.h裡面,預設為64級;
    2

- 6.任務就緒表

  • 1、優先順序位對映表OSPrioTbl[](int定義):用來記錄哪個優先順序下有任務就緒。
    2、就緒任務列表OSRdyList[](結構體定義):用來記錄每一個優先順序下所有就緒的任務。
    此圖預設優先順序為64個:
    3