我正試圖編寫一個函數,它將重置我的Cortex M3平臺上的GPIO0。我正在使用Keil編譯器。 目標是將「1」寫入地址0x40041014。我寫了一個代碼:不能使用PUSH彙編指令
static void resetGPIO0()
{
__asm
{
MOV R0, #0x01
MOV R1, #0x1000
MOVT R1, #0x4004
STR R0, [R1, #0x14]
}
}
它的工作,但我有一個問題,我的函數覆蓋R0和R1之前的值。我試圖把它們堆,然後彈回,但是當我添加
PUSH {R0, R1}
到功能開始我得到一個錯誤:
1161: Cannot directly modify the stack pointer SP (r13).
我在做什麼錯?
出了什麼問題只是在做'*爲(int *)0x40041014 = 1; '? – Jester
那麼問題是,這個代碼轉換成: MOVS R0,#0×01 LDR R1,[PC,#740] STR R0,[R1,#0×14] BX LR 和一些很奇怪的原因,我可以不使用pc有 –
R0-R3由ARM ABI調用者保存。 – EOF