最近學習ucos2,關於任務棧哪邊是棧頂哪邊是棧底的問題

2022-10-01 01:50:14 字數 1468 閱讀 4676

1樓:匿名使用者

棧頂應該是指最開始壓入的資料,棧底是指最後壓入的資料,這樣應該才能解釋。

2樓:匿名使用者

這一段我糾結了很久很久,如果看多了會把最初對堆疊的理解全部推翻,查了很多資料也沒找到權威的,也沒有說出個所以然,因此我認為是作者從一開始就搞錯了(當然也許我一直沒有理解到位)。不要糾結棧頂棧底了,只要記住如果os_stk_growth ==1,堆疊就是用由高地址向地址增長,或說是堆疊遞減,那麼就要把堆疊起始地址賦給ptos就可以了;同樣如果os_stk_growth == 0,堆疊就是由低地址向高地址長,或說是堆疊遞增,那麼仍然要把堆疊起始地址賦給ptos。

總之,賦給ptos的地址是堆疊的起始地址!這樣不會錯。

3樓:

我也是這麼覺得的,我認為是作者的概念錯了,雖然他**邏輯上的實現並沒有錯

ucos2問題:使用c語言建立一個任務堆疊,將這個堆疊賦值給一個任務控制塊?求解決?

4樓:小明

ucos的任務堆疊就是一個記憶體區域,由於其不支援動態記憶體分配所以可以用陣列的方式定義堆疊,如unsinged char task_tack[2000];就會有一個2000位元組記憶體空間 然後將 task_tack賦給任務控制即可。

ucos-ii作業系統的任務堆疊和函式堆疊區別

5樓:在西津渡鬥牛的積雨雲

任務棧和函式棧有很大不同,要回答你的問題首先應該需要知道任務是怎樣切換的以及切換過程對棧的操作。

正如你所說,每個任務都需要分配一個記憶體空間,這個記憶體空間作為任務棧,在任務執行時使用。先說單任務情況,給該任務分配一個記憶體空間作為任務棧,假設在一個時候程式暫停,再執行任務時,仍然可以接著剛才停之前執行處繼續執行,為啥呢?因為在停的時候該任務棧儲存了所有該任務的資訊,再回來時可以繼續執行。

換到多工,每次執行**cpu是不會關心是什麼任務,它只會根據當前指令和棧裡的資訊執行而已。試想一下,一個任務執行的時候被打斷,再次返回時棧裡的資訊不變,它是不是可以按照被打斷前那樣繼續執行。

好了,接下來該說切換任務時怎麼找到棧。要切換任務一般在中斷或者陷阱產生後才切換,也就是說當前任務將被打斷,進去中斷後作業系統(ucos2等)需要將一些必要的暫存器資訊儲存到該任務棧中,然後找到即將執行的任務棧,恢復暫存器資訊即可執行別的任務。舉個例子,假設任務a在地址為0x0a0000的指令處被打斷,此時pc暫存器(假設該暫存器存放當前指令地址的暫存器)和其他一些相關暫存器被儲存到該任務的任務棧中。

需要切回該任務時,只要從該任務棧中恢復這些暫存器即可,此時cpu就知道任務剛才被打斷時在地址為0x0a0000處,就可以沿著該地址繼續執行。

任務切換時cpu入棧出棧確實不用普通使用者關係,不關心並不是什麼都沒做,這部分已經由作業系統處理(如果你需要移植的話,怎麼出棧怎麼入棧可以自己寫),出棧入棧按照一定的順序保障暫存器恢復正確。

差不多就這些吧,希望能幫助你。

ucos和linux區別,聯絡。學了ucos再學linux會不會有幫助嵌入式初學者)

區別 ucos有執行效率高 佔用空間小 實時性和可擴充套件性強等特點,linux有穩定性 強大網路功能和出色的檔案系統等優點。聯絡 是兩種效能優良原始碼公開且被廣泛應用的的免費嵌入式作業系統,可以作為研究實時作業系統和非實時作業系統的典範。c os ii micro controller opera...

《談談你最近的學習情況》作文,《談談你最近的學習情況》 350字作文

在剛剛結束的期中考試裡,我犯了很多不該犯的錯誤。我一向語文很好,可是這次鬼使神差的,語文竟然錯了很多不該錯的地方。經過我的仔細反思,我想這和我閱讀題目不認真有著很大的關係。這點也同樣延伸到了數學和英語方面。很多計算和語法上的小錯誤讓我丟掉了不少分數。例如 這個我不能替你寫,不知道你究竟錯了什麼,舉上...

最近學習不好,想問問大家

第一,我覺得你應該好好的去反思,去思考為什麼你平常樣樣都好,可是到了考試卻搞砸了,如果你能夠做到這點的話,我相信你會解決你所說的難題,第二,你應該好好的去理解,真正學習成績好的,在班中通常是比較低調,因為它懂得去思考和考量周圍的環境,它會去思考應該如何去適應和應變環境變化對它學習的影響,怎麼樣把影響...