我已经设置了在这个简单的blink arduino程序中替换延迟函数的任务
int ledPin = 13;
void setup()
{
pinMode(ledPin,OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
到目前为止,我已将此作为汇编功能:
asm volatile(
" lp1: ldi r17,10 ; \n"
" lp2: ldi r16,100 ; \n"
" lp3: ldi r18,50 ; \n"
" np: nop ; \n"
" dec r18 ; \n"
" brne np ; \n"
" dec r16 ; \n"
" brne lp3 ; \n"
" dec r17 ; \n"
" brne lp2 ; \n"
" sbiw r30,1 ; \n"
" brne lp1 ; \n"
" ret ; \n"
);
我不确定我到目前为止是否正确,但我主要混淆的是我将如何在程序中稍后调用该功能,所以我可以我想要多次打电话
感谢任何帮助
答案 0 :(得分:1)
asm volatile
通常用于在C例程中嵌入程序集片段。因此,在您的示例中,您可以编写一个简单的C函数,其中只包含给定的汇编代码( nb:您需要删除ret
指令,因为C函数将处理函数返回给你)。然后,您可以随时随地调用C函数。
另一种方法是将代码移动到实际的汇编文件中,但是您必须担心您正在使用的任何编译器/平台的实际C调用约定(这包括函数参数,如果有的话。
根据经验,我建议将以前的方法嵌入到C函数中,因为函数调用的细节留给了编译器,你仍然可以从汇编代码中获益。