我已经花了很长时间使用完整的GCC工具链设置我的AVR开发系统(一切都是最新的当前稳定版本),我用它解决了大多数问题。
以下代码给出了一个我没有得到的错误。 AVR汇编手册指出sbi指令可以接受0-7作为常量表达式,但它仍然在我身上出错。有人可以解释为什么这样做吗?
#ifndef __AVR_ATmega168__
#define __AVR_ATmega168__
#endif
#include <avr/io.h>
rjmp Init
Init:
ser r16
out DDRB, r16
out DDRD, r16
clr r16
out PORTB, r16
out PORTD, r16
Start:
sbi PORTB, 0
rjmp Start
有问题的行是sbi PORTB,0。
编译/汇编:
avr-gcc ledon.S -mmcu = atmega168
答案 0 :(得分:6)
更新事实证明您应该write your assembly code like this when using avr-libc:
#include <avr/io.h>
sbi _SFR_IO_ADDR(PORTB), 0
[已删除调试提示,没有实际解决方案]
答案 1 :(得分:2)
我认为它抱怨PORTB而不是位数(0)。你是如何定义PORTB的?它需要在0..31的范围内。如果您的端口定义在32..63?
范围内,您可能需要从PORTB中减去32