我目前正在嘗試編寫一些代碼來檢查某個地址處的SRAM值,然後執行一些C代碼(如果它匹配)。這是在一個atmega32u4 AVR芯片上運行的。以下是我迄今爲止:AVR內聯彙編:註冊到變量?
volatile char a = 0;
void setup(){
}
void loop(){
asm(
"LDI r16,77\n" //load value 77 into r16
"STS 0x0160,r16\n" //copy r16 value into RAM location 0x0160
"LDS r17,0x0160\n" //copy value of RAM location 0x0160 into register r17
//some code to copy value r17 to char a?
);
if(a == 77){
//do something
}
}
我有麻煩搞清楚的部分,我從裝配回C.過渡如何獲得寄存器R17中的數值,並把它變成在一個變量C代碼?
我確實發現了this代碼片段,但是我不太明白它是如何工作的,或者如果這是解決這個問題的最佳方法。
內聯語法看起來與gcc相同。這可以幫助:http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html – dbrank0