avr-gcc 中的致命错误,指定了不正确的 MCU

Fatal error in avr-gcc, specifies incorrect MCU

我正在学习使用 MiniPro 在没有引导加载程序的情况下为我的 ATtiny85 编程,我想生成一个 hex 文件。首先,我尝试使用 avr-gcc 命令编译我的文件,但我收到一条错误消息:

Fatal error: unknown MCU: gcc-isr

这是我用来编译文件的命令

avr-gcc -Wall -mmcu=avr25 -Os -DF_CPU=8000000 -c main.c -o main.o

这是我要编译的代码

#define __AVR_ATtiny85__
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    DDRB = 0b00001000;
    while (1)
    {
        PORTB = 0b00001000;
        _delay_ms(20);
        PORTB = 0b00000000;
        _delay_ms(20);

        PORTB = 0b00001000;
        _delay_ms(200);
        PORTB = 0b00000000;
        _delay_ms(200);
    }

    return 1;
}

我不完全确定这个错误是什么意思以及为什么它首先出现,因为我的 mcu 被明确指定为 avr25 类别,而 attiny85 属于该类别。如果我将 mmcu 变量显式设置为 attiny85

,则会产生相同的错误

avr-gcc --version

的输出
% avr-gcc --version
avr-gcc (GCC) 11.2.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

我还从 AUR 安装了最新的 binutils-avravr-libc 软件包(分别为 2.20 和 2.1.0)

Fatal error: unknown MCU: gcc-isr

这表明您使用的是过时的 Binutils (as),并且编译器配置的 Binutils 版本比您实际使用的 Binutils 更新。

从 v8 开始,avr-gcc 支持选项 -mgas-isr-prologues, and it will activate the respective part of the assembler by calling it with option -mgcc-isr。该功能是在 Binutils v2.29 中引入的。

你可以

  • Re-configure 并针对您喜欢使用的 Binutils 版本构建 avr-gccconfigure 脚本会检查 Binutils 是否支持 -mgcc-isr;如果不是这种情况,相应的 GCC 功能将被禁用。

  • 使用 avr-gcc 并禁用优化功能 PR20296 / PR21683,即使用 -mno-gas-isr-prologues.

    编译