了解Arduino内联汇编中的SBI和CBI

时间:2017-01-17 07:25:47

标签: assembly arduino inline

我正在尝试使用内联汇编在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内联装配的新手,所以任何帮助都会受到赞赏

1 个答案:

答案 0 :(得分:1)

根据GCC

“ asm语句可能不会执行到其他asm语句的跳转。GCC不了解这些跳转,因此在决定如何优化时无法考虑它们。仅在扩展的asm中支持从asm到C标签的跳转。”

考虑到文档,如果您在一个asm调用中包含程序集的 all ,我认为您会比较幸运。这使我获得了您在问题中描述的所需功能。