0

我需要你的帮助

我正在使用 AVR studio 7 尝试 atmega128a

但是有一个问题

当我控制 DDRB 和 PORTB 进入 main()

它工作正常

但是如果我在 main() 之外控制 DDRB 和 PORTB

如果变成错误

'预期的标识符或'('在 volatile 之前'

我只想知道为什么总是在 main() 中处理 DDRB 和 PORTB

这是我的代码

#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);
        }
    }
}
4

2 回答 2

2

C 不是脚本语言。实际运行的任何代码行都必须在函数内部。您可以创建一个新函数并从main.

于 2017-04-19T17:55:36.670 回答
1

它们需要在函数内部分配,因为它们是最终被替换为如下所示的宏:

(*(volatile uint8_t *)<address>)

where<address>是与您尝试访问的寄存器相对应的内存地址。您正在尝试强制转换和取消引用指针,这不是函数之外的有效操作。

于 2017-05-17T08:17:36.150 回答