Arduino assm ldi r26,(变量)无效

时间:2017-06-18 12:30:19

标签: assembly arduino

我正在尝试使用汇编程序来编写一些特定于时间的例程。 我以前用过的东西似乎不再起作用,即

uint16_t myCount;

void foo() {

  asm volatile(

    "ldi    r26,  lo8(myCount)    \n"
    "ldi    r27,  hi8(myCount)    \n"

  ::);

}

这个组合好,直到我像这样调用foo

void setup() {

  foo(); 

}

然后我收到错误:

  

未定义的对“myCount”的引用

显然我做的事情很傻,但我无法弄清楚是什么,这一切都在1.5,我现在正在尝试使用Arduino 1.82

1 个答案:

答案 0 :(得分:2)

全局变量可能有不同的命名方案。在任何情况下,这都是constraints的用途;改为使用它们,例如:

uint16_t myCount;

void foo() {
  asm volatile(
  "# rest of the code goes here"
  :: "x" (&myCount));
}

在我的机器上生成以下内容:

        ldi r26,lo8(myCount)
        ldi r27,hi8(myCount)
/* #APP */
 ;  6 "t.c" 1
        # rest of the code goes here
 ;  0 "" 2
/* #NOAPP */

请注意,编译器会自动为您发出ldi对。在您的机器上可能会略有不同,否则您的原始方法也会起作用。