讀書筆記 usOS II 任務管理

2021-06-17 22:04:54 字數 1692 閱讀 3222

任務建立

使用者可以通過傳遞任務位址和其它引數到以下兩個函式之一來建立任務:ostaskcreate() 或 ostaskcreateext()。

注意事項

任務可以在多任務排程開始前建立,也可以在其它任務的執行過程中被建立。在開始多任務排程(即呼叫osstart())前,使用者必須建立至少乙個任務。任務不能由中斷服務程式(isr)來建立。

任務堆疊大小確定

任務所需的堆疊的容量是由應用程式指定的。使用者在指定堆疊大小的時候必須考慮使用者的任務所呼叫的所有函式的巢狀情況,任務所呼叫的所有函式會分配的區域性變數的數目,以及所有可能的中斷服務例程巢狀的堆疊需求。另外,使用者的堆疊必須能儲存所有的cpu暫存器。

堆疊增長方向

堆疊從上往下遞減: os_stk_growth == 1

堆疊從下往上遞增: os_stk_growth == 0

任務控制塊中部分成員:

.ostcbstkbottom是指向任務棧底的指標。如果微處理器的棧指標是遞減的,即棧儲存器從高位址向低位址方向分配,則ostcbstkbottom指向任務使用的棧空間的最低位址。類似地,如果微處理器的棧是從低位址向高位址遞增型的,則ostcbstkbottom指向任務可以使用的棧空間的最高位址。函式ostaskstkchk()要用到變數ostcbstkbottom,在執行中檢驗棧空間的使用情況。使用者可以用它來確定任務實際需要的棧空間。這個功能只有當使用者在任務建立時允許使用ostaskcreateext()函式時才能實現。這就要求使用者將os_task_create_ext_en設為1,以便允許該功能。

.ostcbx, .ostcby, .ostcbbitx和 .ostcbbity用於加速任務進入就緒態的過程或進入等待事件發生狀態的過程(避免在執行中去計算這些值)。這些值是在任務建立時算好的,或者是在改變任務優先順序時算出的。這些值的演算法見程式清單l3.4。

程式清單 l 3.4     任務控制塊os_tcb中幾個成員的演算法

ostcby

= priority >> 3;//組

ostcbbity

= osmaptbl[priority >> 3];//組掩碼

ostcbx

= priority & 0x07;//位

ostcbbitx

= osmaptbl[priority & 0x07];//位掩碼

任務的優先順序表是用「組位碼」表示的。優先順序的值的高3位表示組,低3位表示位。

任務刪除操作:ostaskdel

確保使用者所要刪除的任務並非是空閒任務,因為刪除空閒任務是不允許的。可以刪除statistic任務。

確保使用者不是在isr例程中去試圖刪除乙個任務,因為這也是不被允許的。

將被刪除的任務的os_tcb從os_tcb雙向鍊錶中移除[l4.11(16)]。注意,沒有必要檢驗ptcb->ostcbnext==0的情況,因為ostaskdel()不能刪除空閒任務,而空閒任務就處於鍊錶的末端(ptcb->ostcbnext==0)。接下來,os_tcb返回到空閒os_tcb表中,並允許其它任務的建立[l4.11(17)]。最後,呼叫任務排程程式來檢視在ostaskdel()重新允許中斷的時候[l4.11(11)],中斷服務子程式是否曾使更高優先順序的任務處於就緒狀態[l4.11(18)]

讀書筆記 usOS II 任務管理

任務建立 使用者可以通過傳遞任務位址和其它引數到以下兩個函式之一來建立任務 ostaskcreate 或 ostaskcreateext 注意事項 任務可以在多任務排程開始前建立,也可以在其它任務的執行過程中被建立。在開始多任務排程 即呼叫osstart 前,使用者必須建立至少乙個任務。任務不能由中...

《精力管理》讀書筆記

該書作者是吉姆 洛爾和托尼 施瓦茨,感謝他們讓我看到如此精彩的書。我喜歡觀察自己,但是總是覺得霧裡看花,看不通。生活 工作 年齡等無形的壓力也讓我覺得頗為焦慮和難受,但是又無力施為。我以為是我自己的時間管理做的不夠好才讓自己的時間總是捉襟見肘,想做的事情總是一拖再拖,想學的東西一直沒法開動。看完這本...

《人員管理》讀書筆記

人員管理101問 管理的任務是讓人們能夠協同工作,有效發揮他們的優勢,同時摒棄其弱點。彼得.德魯克 優秀管理者應具備的要素 3c原則 collaboration 協同 一位優秀的管理者會創造機會,讓員工在制定目標 決定如何開展工作,以及確定衡量專案成功率的標準方面相互協調,達成一致。cooperat...