4nt*_*ine 4 c assembly gcc gnu-assembler
我发现asm内联汇编正在工作,我无法理解(链接):
// busy wait
__asm__ __volatile__ (
"1: sbiw %0,1" "\n\t" // 2 cycles
"brne 1b" : "=w" (us) : "0" (us) // 2 cycles
);
Run Code Online (Sandbox Code Playgroud)
我已经发现了一些气体教程像这样,但我无法找到解释.无论如何,文件可以由avr-gcc编译:
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-gcc -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu = atmega328p -DF_CPU = 16000000L -MMD -DUSB_VID = null -DUSB_PID = null -DARDUINO = 105 -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/variants/standard /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/wiring.c -o /var/folders/64/fwfkm1k51zbd4_c5lwpsbljh0000gn/T/build5450310618632673119.tmp/wiring.co
那么GCC内联汇编中的"= w"是什么意思呢?
这"="意味着它的输出."w"是一种约束.答案部分见于GCC手册,部分见于2012年海湾合作委员会办理登机手续.
其他字母可以以机器相关的方式定义,以代表特定类别的寄存器或其他任意操作数类型.'d','a'和'f'在68000/68020上定义为代表数据,地址和浮点寄存器.
这是添加约束的签到:[Patch,AVR]:添加"w"约束替代addhi3.这是办理登机手续的评论:
这个补丁为*addhi3和addhi3_clobber添加了一个"w"替代,以便为"w"类投票.这类似于版本4.6的orgiginal addhi3 insn.并且在addhi3_clobber中没有更明确的投票给"l",它只是"r".
意图是更好地使用ADIW和SBIW指令.
所以"w"是AVR相关的约束.