我需要你的帮助
我正在使用AVR studio 7尝试atmega128a
但是存在一个问题
当我将DDRB和PORTB控制为main()
时一切正常
但如果我从main()
中控制DDRB和PORTB如果出现错误
'预期标识符'('在'volatile'之前
我只是想知道为什么总是处理DDRB和PORTB仅在main()
中这是我的代码
#define F_CPU 14745600UL
#include <avr/io.h>
#include <util/delay.h>
DDRB = 0xFF;
PORTB = 0x00;
int main(void)
{
/* Replace with your application code */
PORTB = 0x01;
_delay_ms(300);
while (1)
{
PORTB <<= 1;
_delay_ms(300);
if(PORTB == 0x80){
PORTB = 0x01;
_delay_ms(300);
}
}
}
答案 0 :(得分:1)
C不是脚本语言。实际运行的任何代码行必须在函数内。您可以创建一个新功能,并从main
调用它。
答案 1 :(得分:0)
它们需要在函数内部分配,因为它们是宏,最终被替换为看起来像这样的东西:
SalesTransaction
其中(*(volatile uint8_t *)<address>)
是与您尝试访问的寄存器对应的内存地址。您正在尝试强制转换和取消引用指针,该指针不是函数之外的有效操作。