文章目錄
- 怎麼控制STM32跳轉到指定程式:
- STM32的LR寄存器和PC寄存器:
- 結語:
怎麼控制STM32跳轉到指定程式:
首先,使用标号加goto語句可以使程式強制跳轉,而goto的原理實際上是彙編語言裡面的強制跳轉。
我們看STM32的啟動檔案,發現裡面有這兩句程式:
其中LDR R0 ,=一個函數名
意思是把這個函數的位址放到寄存器R0裡面
BLX R0和BX R0意思都是跳轉到以R0寄存器所存的位址

STM32的LR寄存器和PC寄存器:
PC寄存器是程式計數器,内部存的是程式目前執行到了哪個位址。LR寄存器是連接配接寄存器,在執行子函數前,LR會儲存執行完子函數後,應該回到哪個地方。驗證如下:
我們在主函數執行裡面打一個斷點,當程式執行到端點處時,我們發現端點處的PC指針是0X080002A2,
那麼在執行函數raw_os_init()前,LR寄存器會記住執行完raw_os_init()函數後,PC指針應該跳轉到哪個位址。我們再在raw_os_init()函數裡面打斷點,看執行子函數raw_os_init()時LR是不是存的是執行完子函數後應該傳回的位址。
在執行子函數raw_os_init()時,我們發現LR裡面存的是0X080002A3,比我們在temppp += 1;斷點處看到的PC指針大了1。這是為什麼呢?
這是因為我們在temppp += 1;打斷點時,是還沒執行temppp += 1;語句的PC指針位址,則執行temppp += 1;時PC指針值應該是0X080002A2 + 1=0X080002A3,剛好和LR寄存器中存的值一樣。
結語:
LR存是:執行子函數後,PC指針應該跳轉回去是,應該跳轉的地方