UCOS局部變量、任務堆棧

UCOS中局部變量的生命週期:

任務一直存在,所以在任務中(非子函數)定義的局部變量不會死亡,在任務間的信息傳遞因局部變量未死亡而可行。在子函數中定義的局部變量在退出該函數時才死亡,在子函數中調用任務切換時局部變量保留,在任務切換所至任務執行完成並回到子函數正常退出時才死亡。

UCOS任務堆棧:

【函數嵌套、所調用函數局部變量分配內存、中斷服務子程序嵌套】
1、當任務運行時保存一些局部變量(CPU寄存器有限)。
2、當任務掛起時,負責保存運行現場,即CPU寄存器的值。

當任務掛起時,任務堆棧中保存任務掛起前CPU寄存器的這一連續的區域肯定在整個堆棧的最上面。
任務每次掛起前用來保存當前CPU寄存器這一連續區域在整個任務堆棧空間是浮動的。

初始化堆棧:

1,任務是第一次運行,而任務從本質上講就是一段代碼,所以PC指針應該定位到這段代碼的第一行處,即所謂的入口地址,這個地址由任務指針保存着,所以把該指針值賦給PC即可。
2,這段代碼還未被執行過,所以代碼中變量與CPU的其他寄存器一點關係也沒有,因此R0-R12,R14可隨意給值,或者不賦值,讓這些寄存器保存原來的值。

發佈了16 篇原創文章 · 獲贊 10 · 訪問量 3602
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章