找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

關(guān)于Cortex-M4內(nèi)核的一個小問題

查看數(shù): 2225 | 評論數(shù): 2 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時間: 2021-2-26 11:24

正文摘要:

本帖最后由 MNwcy 于 2021-2-27 11:13 編輯 在看Cortex-M4的資料,就是權(quán)威指南那本書的時候,看到了關(guān)于異常發(fā)生時的入棧敘述, 看到這里有點疑問了,我的疑問就是“為什么入棧保存的只有八個字的數(shù)據(jù)?”對 ...

回復(fù)

ID:474802 發(fā)表于 2021-3-7 23:39
自己挖的坑自己填!經(jīng)過一番小研究有所收獲,總結(jié)一下:
1.關(guān)于子函數(shù)調(diào)用和異常中斷處理是兩種不同的情況,子函數(shù)調(diào)用是一個明確的關(guān)系,比如說我程序執(zhí)行到哪里會調(diào)用這個子函數(shù)都是已知的(編譯期間就能確定的)。而異常和中斷的出現(xiàn)位置是不可知的。
2.舉個例子在A函數(shù)中調(diào)用了B函數(shù),各個函數(shù)怎么執(zhí)行的在編譯期間就確定了,當(dāng)A調(diào)用B時,此時內(nèi)部寄存器中的數(shù)據(jù)在執(zhí)行完B后A還要接著用,所以就把調(diào)用B時會被改變的寄存器入棧保存(當(dāng)然還有LR寄存器,入棧后LR會自動更新)
3.中斷和異常想來就來,所以并不確定是在那個位置跳轉(zhuǎn)到異常處理部分的,所以當(dāng)異常中斷來后就會把所有的內(nèi)部寄存器保存(這就是所謂的棧幀,所以棧幀的大小也是固定的,注意入棧是區(qū)分調(diào)用者寄存器和被調(diào)用者寄存器,入的棧不同)
進(jìn)調(diào)試看下匯編就明白了。有說的不對的歡迎指正

評分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

ID:474802 發(fā)表于 2021-2-28 19:24

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表