Недопустимый класс хранения __fla sh в ImageCraft IDE - PullRequest
0 голосов
/ 02 августа 2020
• 1000 build.

Фрагмент исходного кода того, что я пытаюсь построить в 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.

1 Ответ

1 голос
/ 14 августа 2020

__flash - это именованное адресное пространство , используемое для указания, что некоторая константа должна храниться в памяти fla sh вместо того, чтобы копироваться в раздел .data ОЗУ при запуске программы. Это не совсем стандартный C, но принадлежит набору расширений под названием embedded C. Это очень полезная функция AVR, которая помогает сэкономить драгоценную оперативную память. Это поддерживается g cc и, по-видимому, используется заголовком port.h, который вы пытаетесь скомпилировать с вашим кодом.

Судя по предупреждениям, которые вы показываете, похоже, ваш компилятор не поддерживает эту функцию. Вы можете попробовать #define __flash как пустую строку перед включением заголовка. Но тогда вы потеряете выгоду от этого средства экономии оперативной памяти.

...