Cortex-M3-建立堆栈
生活随笔
收集整理的這篇文章主要介紹了
Cortex-M3-建立堆栈
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Cortex-M3-建立堆棧
- 當開發的程序比較簡單時,可以從頭到尾都只使用 MSP。這時,只需要保證開出一個容量夠大的堆棧,再把 MSP 初始化到其頂即可——這也是單片機開發最常見的做法。堆棧用穿是非常致命的錯誤,必須非常嚴肅地計算安全容量。在計算時,除了要計入最深函數調用時對堆棧的需求,還需要判定最多可能有多少級中斷嵌套。一個笨方法(但是很保險)是假設每個中斷都可以嵌套。對于每一級嵌套的中斷,至少需要 8 個字(32 字節),而且如果 ISR 過于復雜,還可能有更多的堆棧需求。
- 因為 CM3 中的堆棧是以“向下生長的滿棧”來操作 SP 的。在簡單的場合中,經常可以把 SP 初始化為 SRAM 的末尾,這么一來就使所有的空閑內存都能為堆棧所用——反正不用白不用,用了也白用.如下圖
- 從圖中我們可以看出,這種分配方式能給堆棧區留下最大的容量——所有剩余內存,而有省事又省心——省去了令人頭痛的堆棧需求計算了。
- 然而,對于比較大型的或者是有高性能指標的嵌入式系統,往往需要兩個堆棧配合使用。這時,就只好勇敢地面對。必須保證各堆棧都有足夠的容量,尤其是主堆棧,最容易栽在它上面。要注意的是,進程堆棧除了要滿足本進程最大需求量,還需要額外留出 8 個字,用于容納第一級中斷時被保護的寄存器。
- 事實上,準確計算主堆棧需求往往是不可能的任務,也容易過于保守而浪費寶貴的血液資源。在調試階段時,最好先選用內存更大點的器件,然后開出足夠大的內存給主堆棧。然后在調試程序時,允許隨時把主堆棧曾經的最大用量輸出(通過調試串口或仿真器等),這樣時間長了就能估算對主堆棧的需求,正如上圖中邊界的作用。?
總結
以上是生活随笔為你收集整理的Cortex-M3-建立堆栈的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cortex-M3-中断/异常的响应序列
- 下一篇: Cortex-M3-建立向量表