熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2021-2-26 11:24
正文摘要:本帖最后由 MNwcy 于 2021-2-27 11:13 編輯 在看Cortex-M4的資料,就是權(quán)威指南那本書的時(shí)候,看到了關(guān)于異常發(fā)生時(shí)的入棧敘述, 看到這里有點(diǎn)疑問(wèn)了,我的疑問(wèn)就是“為什么入棧保存的只有八個(gè)字的數(shù)據(jù)?”對(duì) ... |
|
自己挖的坑自己填!經(jīng)過(guò)一番小研究有所收獲,總結(jié)一下: 1.關(guān)于子函數(shù)調(diào)用和異常中斷處理是兩種不同的情況,子函數(shù)調(diào)用是一個(gè)明確的關(guān)系,比如說(shuō)我程序執(zhí)行到哪里會(huì)調(diào)用這個(gè)子函數(shù)都是已知的(編譯期間就能確定的)。而異常和中斷的出現(xiàn)位置是不可知的。 2.舉個(gè)例子在A函數(shù)中調(diào)用了B函數(shù),各個(gè)函數(shù)怎么執(zhí)行的在編譯期間就確定了,當(dāng)A調(diào)用B時(shí),此時(shí)內(nèi)部寄存器中的數(shù)據(jù)在執(zhí)行完B后A還要接著用,所以就把調(diào)用B時(shí)會(huì)被改變的寄存器入棧保存(當(dāng)然還有LR寄存器,入棧后LR會(huì)自動(dòng)更新) 3.中斷和異常想來(lái)就來(lái),所以并不確定是在那個(gè)位置跳轉(zhuǎn)到異常處理部分的,所以當(dāng)異常中斷來(lái)后就會(huì)把所有的內(nèi)部寄存器保存(這就是所謂的棧幀,所以棧幀的大小也是固定的,注意入棧是區(qū)分調(diào)用者寄存器和被調(diào)用者寄存器,入的棧不同) 進(jìn)調(diào)試看下匯編就明白了。有說(shuō)的不對(duì)的歡迎指正 |
| 參與人數(shù) 1 | 黑幣 +40 | 收起 理由 |
|---|---|---|
|
| + 40 | 回帖助人的獎(jiǎng)勵(lì)! |
|
歡迎討論 |
Powered by 單片機(jī)教程網(wǎng)