首页 > 解决方案 > ImageCraft IDE 中的非法存储类 __flash

问题描述

我正在尝试构建一个最初在 Atmel Studio 中构建的项目,该项目编译良好,没有任何错误或警告,但如果我尝试在 ImageCraft IDE 中构建项目,它会说没有错误,但它会无法构建。

我试图在 ImageCraft 中构建的源代码片段:

static inline void PORTA_set_pin_pull_mode(const uint8_t pin, const enum port_pull_mode pull_mode)
{

    if (pull_mode == PORT_PULL_UP)
    {

        DDRA &= ~(1 << pin);

        PORTA |= 1 << pin;
    }
    else if (pull_mode == PORT_PULL_OFF)
    {
        PORTA &= ~(1 << pin);
    }
}

这是构建日志的结果

iccavr.exe:'C:\iccv8avr\bin\iccomavr.exe' 返回错误代码 -1073741819 进程以状态 -1073741819 终止(0 分钟,2 秒)构建失败:0 错误,158警告(0 分钟,2 秒)

尝试构建项目时显示的警告

!W C:\Sahil\Basic WifiBuild\WifiBoard\include\port.h(63):[warning] Illegal storage class __flash for parameter 'pin'. Storage class removed.

!W C:\Sahil\Basic WifiBuild\WifiBoard\include\port.h(63):[warning] Illegal storage class __flash for parameter 'pull_mode'. Storage class removed.

!W C:\Sahil\Basic WifiBuild\WifiBoard\include\port.h(92):[warning] Illegal storage class __flash for parameter 'mask'. Storage class removed.

!W C:\Sahil\Basic WifiBuild\WifiBoard\include\port.h(92):[warning] Illegal storage class __flash for parameter 'direction'. Storage class removed.

!W C:\Sahil\Basic WifiBuild\WifiBoard\include\port.h(123):[warning] Illegal storage class __flash for parameter 'pin'. Storage class removed.

!W C:\Sahil\Basic WifiBuild\WifiBoard\include\port.h(123):[warning] Illegal storage class __flash for parameter 'direction'. Storage class removed.

标签: embeddedcodeblocksavratmega

解决方案


__flash是一个命名的地址空间,用于指定一些常量应该保存在闪存中,而不是在程序启动时被复制到 RAM 的 .data 部分。它不是真正的标准 C,而是属于一组称为嵌入式 C的扩展。这是 AVR 上一个非常有用的功能,有助于节省宝贵的 RAM。它由 gcc 支持,并且显然由您尝试使用代码编译的 port.h 标头使用。

从您显示的警告来看,您的编译器似乎不支持此功能。在包含标题之前,您可以尝试将#define __flash其作为空字符串。但是,您将失去此 RAM 保护程序的好处。


推荐阅读