我正在尝试使用汇编程序来编写一些特定于时间的例程。 我以前用过的东西似乎不再起作用,即
uint16_t myCount;
void foo() {
asm volatile(
"ldi r26, lo8(myCount) \n"
"ldi r27, hi8(myCount) \n"
::);
}
这个组合好,直到我像这样调用foo
void setup() {
foo();
}
然后我收到错误:
显然我做的事情很傻,但我无法弄清楚是什么,这一切都在1.5,我现在正在尝试使用Arduino 1.82未定义的对“myCount”的引用
答案 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
对。在您的机器上可能会略有不同,否则您的原始方法也会起作用。