#include <avr/io.h>
int main(void){
asm volatile("ldi r16, %0\n\t"
"out %1, r16\n\t"
"ldi r16, %0\n\t"
"out %2, r16\n\t"::"M" (0xff),"I" (_SFR_IO_ADDR(DDRB)),"I" (_SFR_IO_ADDR(PORTB)));
while(1) {
asm volatile("cbi %0, %1\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"sbi %0, %1\n\t"::"I" (SFR_IO_ADDR(PORTB)), "M" (0xff));
}
}
在编译时:错误:不可能约束指针设置为asm语句位置: 11-9 (asm volatile(“CBI%0,%1\n\t") )
但是为什么呢?
发布于 2014-05-04 21:23:56
您在SFR_IO_ADDR(PORTB)
中缺少前导下划线,因此它被编译为对返回整数的外部函数的调用。如果您启用了警告,您将看到以下内容:warning: implicit declaration of function 'SFR_IO_ADDR'
https://stackoverflow.com/questions/23456661
复制相似问题