UCOS區域性變數 任務堆疊

2021-06-21 21:15:02 字數 572 閱讀 5116

ucos中區域性變數的生命週期:

任務一直存在,所以在任務中(非子函式)定義的區域性變數不會死亡,在任務間的資訊傳遞因區域性變數未死亡而可行。在子函式中定義的區域性變數在退出該函式時才死亡,在子函式中呼叫任務切換時區域性變數保留,在任務切換所至任務執行完成並回到子函式正常退出時才死亡。

ucos任務堆疊:

【函式巢狀、所呼叫函式區域性變數分配記憶體、中斷服務子程式巢狀】

1、當任務執行時儲存一些區域性變數(cpu暫存器有限)。

2、當任務掛起時,負責儲存執行現場,即cpu暫存器的值。

當任務掛起時,任務堆疊中儲存任務掛起前cpu暫存器的這一連續的區域肯定在整個堆疊的最上面。

任務每次掛起前用來儲存當前cpu暫存器這一連續區域在整個任務堆疊空間是浮動的。

初始化堆疊:

1,任務是第一次執行,而任務從本質上講就是一段**,所以pc指標應該定位到這段**的第一行處,即所謂的入口位址,這個位址由任務指標儲存著,所以把該指標值賦給pc即可。

2,這段**還未被執行過,所以**中變數與cpu的其他暫存器一點關係也沒有,因此r0-r12,r14可隨意給值,或者不賦值,讓這些暫存器儲存原來的值。  

區域性變數與堆疊

我們知道函式中的區域性變數儲存在堆疊之中,如下圖所示,當區域性變數1 2 3存到堆疊中後,堆疊指標esp並沒有下移,依然指向原來的位置。出現這種情況的原因是 區域性變數進入堆疊並不是使用push而是使用mov操作,所以esp無變化。正是因為這樣,如果函式把任何資料壓入堆疊,那麼區域性變數將會被覆蓋。...

成員變數 區域性變數

成員變數 作為類的成員而存在,直接存在於類中。所有類的成員變 量可以通過this來引用。區域性變數 作為方法或語句塊的成員而存在,存在於方法的引數列表和方法定義中。1.成員變數可以被 public,protect,private,static等修飾符修飾,而 區域性變數不能被控制修飾符及 stati...

成員變數 區域性變數

一.相同點 1.都遵循變數的宣告格式 修飾符 資料型別 變數名 初始化值 2.都有各自的作用域 二.不同點 1.宣告的位置不同 成員變數 宣告在類內,方法外。區域性變數 宣告在方法內 方法的形參部分 塊內 2.成員變數的修飾符有四個 public private protected 預設 區域性變數...