我正在尝试使用内联汇编在Arduino中编写一个小的闪烁程序。第一个标签(start :)下的代码工作,LED亮;然而,问题是跳跃停止。理论上,这似乎是正确的 - 我将该位设置为寄存器5,位5,然后清除该位,但这不起作用。
void setup(){
asm("sbi 0x05, 5");
}
void loop(){
asm("start:");
asm("sbi 0x05, 5");
asm("jmp stop");
asm("stop:");
asm("cbi 0x05, 5");
asm("jmp start");
}
我是Arduino内联装配的新手,所以任何帮助都会受到赞赏
答案 0 :(得分:1)
根据GCC:
“ asm语句可能不会执行到其他asm语句的跳转。GCC不了解这些跳转,因此在决定如何优化时无法考虑它们。仅在扩展的asm中支持从asm到C标签的跳转。”
考虑到文档,如果您在一个asm调用中包含程序集的 all ,我认为您会比较幸运。这使我获得了您在问题中描述的所需功能。