ARV 0 2 марта, 2015 Опубликовано 2 марта, 2015 · Жалоба все, тему можно закрывать А какая версия последняя? Наберите в консоли: avr-gcc --v 4.8.1 хотя еще рано закрывать тему: просветите еще, пожалуйста, как правильно определять массив в flash: 1. __flash const bla_bla_bla array[]; 2. const bla_bla_bla __flash array[]; Eclipsе не распарсивает второй вариант, хотя вроде как он правильный... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 2 марта, 2015 Опубликовано 2 марта, 2015 · Жалоба хотя вроде как он правильный...По моему тоже. Эклипс несовершенен. Можно попытаться направить им сообщение об ошибке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 0 2 марта, 2015 Опубликовано 2 марта, 2015 · Жалоба у меня с английским не очень хорошо, а автопереводчикам не очень доверяю... Eclipse Luna мало того, что второй вариант объявления не понимает, но если такое объявление находится в числе параметров функции - вся функция не подсвечивется, и ниже по коду могут быть сбои парсера синтаксиса... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 2 марта, 2015 Опубликовано 2 марта, 2015 · Жалоба Eclipse Luna мало того, что второй вариант объявления не понимает, но если такое объявление находится в числе параметров функции - вся функция не подсвечивется, и ниже по коду могут быть сбои парсера синтаксиса... Эклипса понятия не имеет, что такое "__flash". Помогите ей, задайте в Project - Properties - C/C++ General - Paths and Symbols - Symbols пустой дефайн "__flash". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 3 марта, 2015 Опубликовано 3 марта, 2015 · Жалоба Эклипса понятия не имеет, что такое "__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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 3 марта, 2015 Опубликовано 3 марта, 2015 · Жалоба Думаете, там будет дефайн для __flash? Я в этом сильно сомневаюсь. Ведь __flash - это не дефайн, а квалификатор типа памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 4 марта, 2015 Опубликовано 4 марта, 2015 · Жалоба Да, Вы правы, есть лишь дефайн __FLASH, но это не то... Жаль что нет стандартного способа раскрытия расширений языка для редактора... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 4 марта, 2015 Опубликовано 4 марта, 2015 · Жалоба задайте в 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 и не пришлось бы бороться с ней явными приведениями типов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 4 марта, 2015 Опубликовано 4 марта, 2015 · Жалоба Это если используется самопальный самописный makefile. А если используется какой-то плагин, генерящий makefile исходя из этих установок, то такой define замаскирует ключевое слово при компиляции. А вот если он будет подставляться только при выполении discovery - все будут довольны: discovery: $(CC) $(SOURCE_DIRS) $(ALL_CFLAGS) -D__flash -E -P -v -dD '$(specs_file)' Если makefile генерится плагином, то откуда там появится цель discovery? :) А вот для самописного makefile это решение правильнее, чем то, что я написал выше - так мы получим все настройки проекта в одном месте (в makefile). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 0 5 марта, 2015 Опубликовано 5 марта, 2015 · Жалоба не знаю, что такое discovery, но проблема с подсветкой синтаксиса, обозначенная мной, решается тупым typedef __flash const char fchar; - после этого Eclipse прекрасно понимает, что fchar это тип и все подсвечивает правильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться