天天看點

在Tricore上移植μC/OS-III——2.4 CSA的存儲和調用

CSA的存儲:

當程式發生**函數調用(CALL)、中斷(Interrupt)和陷阱(Trap)**時,系統自動将目前程式的UCX儲存至FCX所指向的空CSA節點,同時寄存器PCXI指向這個節點,FCX向後移動一個節點。LCX不會自動儲存,需要使用者根據需要進行存儲。但在實際使用的時候發現,對于中斷和Trap, Tasking編譯器會自動生成代碼,儲存LCX。

儲存LCX的過程和UCX相同,同樣會占用一個CSA節點,已儲存的LCX和UCX連接配接在一條連結清單中,用PCXI字段中的UL(見上圖)位來辨別該節點是UCX還是LCX。

當FCX = LCX時,就會因為CSA耗盡而發生Trap。

CSA的調用:

當程式從上述CALL、Interrupt、Trap傳回原運作位置的時候,系統将恢複PCXI所指向的節點的寄存器值,這個節點就被釋放出來,需要添加到FCX連結清單中,添加的時候先把這個節點的PCXI字段指向原FCX所指向的節點,然後把FCX指向該節點,就完成了添加。

除了上述CSA存儲和調用情況外,還有一些指令可以直接對CSA進行存儲和調用,官方手冊中整理如下:

繼續閱讀