Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 理解Arduino内联组装中的SBI和CBI_Assembly_Arduino_Inline - Fatal编程技术网

Assembly 理解Arduino内联组装中的SBI和CBI

Assembly 理解Arduino内联组装中的SBI和CBI,assembly,arduino,inline,Assembly,Arduino,Inline,我正在尝试使用内联汇编在Arduino中编写一个小的blink程序。第一个标签(开始:)下的代码工作,LED亮起;然而,问题在于如何停止。理论上,这似乎是正确的-我将位设置到寄存器5,位5,然后清除位,但这不起作用 void setup(){ asm("sbi 0x05, 5"); } void loop(){ asm("start:"); asm("sbi 0x05, 5"); asm("jmp stop"); asm("stop:"); a

我正在尝试使用内联汇编在Arduino中编写一个小的blink程序。第一个标签(开始:)下的代码工作,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内联装配的新手,因此任何帮助都将不胜感激

asm语句不能跳转到其他asm语句中。GCC不知道这些跳转,因此在决定如何优化时不能考虑这些跳转。从asm到C标签的跳转仅在扩展asm中受支持


考虑到文档,我认为如果您在一次asm调用中包含程序集的所有内容,您的运气会更好。这使我能够获得您在问题中描述的所需功能。

您检查过装配说明的计时了吗?嗨,Ignacio,没有,我没有。这是一个因素吗?LED会亮,但不会熄灭,这让我想到,在任何情况下,都没有试图清除此处的bitlook。呃,是的,这将是导致代码失败的主要因素(或者更确切地说,没有失败,但没有给出您想要的结果)。LED亮起和熄灭后的延迟在哪里?如果您不插入这样的延迟,led闪烁得太快,以至于您无法看到它闪烁!