(二)任務堆疊

2021-08-02 03:52:04 字數 1537 閱讀 2790

任務堆疊的建立                           

1、為了方便定義任務堆疊,在檔案os_cpu.h中定義了乙個資料型別os_stk:

typedef unsigned int  os_stk; //該型別長度為16位 2、

在定義任務堆疊的棧區時,只要定義乙個os_stk型別的陣列即可。例如:

#define  task_stk_size    512   //定義堆疊的長度(1024位元組)

os_stk   taskstk[task_stk_size];   //定義乙個陣列來作為任務堆疊

3、堆疊增長方向隨處理器的不同而不同:

堆疊的生長方向從最本質的理解是堆疊入棧方向是從高位址向位址還是低位址向高位址。

從高位址向低位址生長一般叫做向下生長,也叫作逆向生長。

從低位址向高位址生長一般叫做向上生長,也叫作正向生長。

51微控制器的堆疊生長方向為正向生長,因為

執行push指令

時先將sp的值加1

再將指定的8位資料單元的內容入棧

80x86微機的堆疊生長方向為逆向生長,因為

執行push指令時

先將sp的值減2

再將指定的16位資料單元內容入棧

。高位元組放高位址,低位元組放低位址(小端模式)。

stm32的堆疊生長方向是逆向生長

為提高可移植性,利用os_cfg.h檔案中的常數os_stk_crowth作為選擇開關,使用者通過定義改常數的值來選擇不同的**段,以適應不同的堆疊增長方式的需要。

#define  os_stk_crowth  1  // 1:向下增長方式,0:向上增長方式

例如:

#define task_stk_size   64

os_stk mytaskstk[task_stk_size]; //任務堆疊

void main(void)

任務堆疊的初始化                     

當cpu在啟動執行乙個任務時,cpu的各暫存器總是需要預置一些初始資料。由於它們都是任務的私有資料,所以應該將它們都存放在任務堆疊。

把任務初始資料放到任務堆疊的工作叫做任務堆疊的初始化,uc/os-ii提供了任務堆疊初始化函式ostaskstkinit():

os_stk* ostaskstkinit(

void (*task)(void *pd),

void *pdata,

os_stk *ptos,

int16u opt );

該函式由任務建立函式ostaskcreate()來呼叫。

另外,因為處理器中暫存器及對堆疊的操作方式不盡相同,所以該函式需要使用者在進行uc/os-ii移植時,按所使用的處理器來編寫,請參考uc/os-ii移植說明

實驗二任務一

1.掌握如何建立乙個activity 2.掌握如何在activity中新增控制項並進行事件處理 3.掌握如何通過intent啟動另外乙個 activity 4.掌握如何通過intent在多個 activity 之間傳遞資料 5.掌握activity的生命週期 裝有android開發環境的計算機 1....

專案二(任務五)

任務五 管理linux系統的使用者與使用者 使用者可分為普通使用者和超級使用者,除了使用者以外還有使用者組,所謂使用者組就是使用者的集合,centos組中有兩種型別,私有組和標準組。當建立乙個新使用者時,若沒有指定它所屬的組,centos就建立乙個和該使用者相同的私有組,此私有組中只包括使用者自己,...

UCOSII學習 二 任務管理

uc os ii 中最多可以支援64 個任務,分別對應優先順序0 63,其中0 為最高優先順序。63為最低階,系統保留了4個最高優先順序的任務和4個最低優先順序的任務,所有使用者可以使用的任務數有56個。uc os ii提供了任務管理的各種函式呼叫,包括建立任務,刪除任務,改變任務的優先順序,任務掛...