AVR IO 端口不能是全局的

AVR IO Ports can not be global

我在 Atmel Studio 上写了一个 AVR 代码,我错误地忘记在 main 中写 IO 端口设置(DDRx,PORTx,...等),而是我把它放在 main 之外,如图所示:

#include <avr/io.h>
#define F_CPU 1000000UL
#include <util/delay.h>
#include <avr/interrupt.h>

void delay_250ms();
uint8_t t_hr = 0 , t_min = 0 , t_sec = 0 , i = 0 , tempp;
uint8_t start_stopwatch = 0;
DDRA |= 0xFF;
PORTA = 0x00;
DDRD = 0x00;
PORTD |= 0xFF;

然后我得到了那个错误:

  • expected ) before ( token
  • expected identifier or ( before volatile
  • expected ) before ( token
  • expected identifier or ( before volatile
  • expected ) before ( token …

当我将它们添加回主函数时没有出现错误

问题是为什么我不能在 main 之外添加它们? 我是否漏掉了一些要点?

DDRA |= 0xFF这样的一行代码就是一条语句。它在执行时执行特定操作(如设置 DDRA 的所有位)。

语句必须出现在函数中,这样它才能作为函数的一部分执行。它不能放在源文件的顶层,因为不执行源文件——只有函数。