Перейти к содержанию
    

AVR Toolchain - как работать с __flash?

все, тему можно закрывать :blush:

 

А какая версия последняя?

Наберите в консоли:

avr-gcc --v

4.8.1

 

хотя еще рано закрывать тему: просветите еще, пожалуйста, как правильно определять массив в flash:

1. __flash const bla_bla_bla array[];

2. const bla_bla_bla __flash array[];

 

Eclipsе не распарсивает второй вариант, хотя вроде как он правильный...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

хотя вроде как он правильный...
По моему тоже. Эклипс несовершенен. Можно попытаться направить им сообщение об ошибке.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у меня с английским не очень хорошо, а автопереводчикам не очень доверяю...

 

Eclipse Luna мало того, что второй вариант объявления не понимает, но если такое объявление находится в числе параметров функции - вся функция не подсвечивется, и ниже по коду могут быть сбои парсера синтаксиса...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Eclipse Luna мало того, что второй вариант объявления не понимает, но если такое объявление находится в числе параметров функции - вся функция не подсвечивется, и ниже по коду могут быть сбои парсера синтаксиса...

Эклипса понятия не имеет, что такое "__flash". Помогите ей, задайте в Project - Properties - C/C++ General - Paths and Symbols - Symbols пустой дефайн "__flash".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эклипса понятия не имеет, что такое "__flash". Помогите ей, задайте в Project - Properties - C/C++ General - Paths and Symbols - Symbols пустой дефайн "__flash".

Думаю, что цель DISCOVERY тоже решает эту задачу, но более правильным способом.

#discovery target for Eclipse parser
#usage: make specs_file=${INPUTS}
.PHONY: discovery
discovery:
        $(CC) $(SOURCE_DIRS) $(ALL_CFLAGS) -E -P -v -dD '$(specs_file)'
        $(REMOVE) spec.d

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Думаете, там будет дефайн для __flash? Я в этом сильно сомневаюсь. Ведь __flash - это не дефайн, а квалификатор типа памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, Вы правы, есть лишь дефайн __FLASH, но это не то...

Жаль что нет стандартного способа раскрытия расширений языка для редактора...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

задайте в Project - Properties - C/C++ General - Paths and Symbols - Symbols пустой дефайн "__flash".
Это если используется самопальный самописный makefile. А если используется какой-то плагин, генерящий makefile исходя из этих установок, то такой define замаскирует ключевое слово при компиляции. А вот если он будет подставляться только при выполении discovery - все будут довольны:

discovery:
        $(CC) $(SOURCE_DIRS) $(ALL_CFLAGS) -D__flash -E -P -v -dD '$(specs_file)'

 

 

И по теме основного вопроса - я полагаю, что проблема возникла из-за использования неподходящего типа. В полях prev_ch, curr_ch хранятся символы и поэтому это тот редкий случай, когда надо использовать тип char. Не unsigned, не signed, не тип из stdint.h, а именно классический char. И поскольку NO_CHAR, ANY_VAR, ANY_DIG, ANY_CHAR представляют из себя переопределенные коды символов, их надо обявлять именно как "символ с указанным кодом", т.е. '\xFF', '\xFE', '\xFD', '\xFC'. Тогда не было бы проблемы с неявным расширением до int и не пришлось бы бороться с ней явными приведениями типов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это если используется самопальный самописный makefile. А если используется какой-то плагин, генерящий makefile исходя из этих установок, то такой define замаскирует ключевое слово при компиляции. А вот если он будет подставляться только при выполении discovery - все будут довольны:

discovery:
        $(CC) $(SOURCE_DIRS) $(ALL_CFLAGS) -D__flash -E -P -v -dD '$(specs_file)'

Если makefile генерится плагином, то откуда там появится цель discovery? :)

А вот для самописного makefile это решение правильнее, чем то, что я написал выше - так мы получим все настройки проекта в одном месте (в makefile).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не знаю, что такое discovery, но проблема с подсветкой синтаксиса, обозначенная мной, решается тупым typedef __flash const char fchar; - после этого Eclipse прекрасно понимает, что fchar это тип и все подсвечивает правильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...