Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR EWA for AVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Dato
Начал пробовать IAR EWAVR 4.10a
я делаю так:

__flash char s[]="123456789"

для запоминания строковой константы в FLASH, но после создания кода там строки нет sad.gif
пожалуйста обЪясните в чем ошибка smile.gif
NickB
Что значит ее нет ?
Откуда это видно ?
Если эта переменная нигде не используется, то компилятор может ее выбростиь при оптимизации
Dato
Я полагаю что код этой строки должен увидеть когда открываю HEX файл, программатором или другой программой. Кажется в самом деле компилятор ее выбрасывает.
Я проверяю так:

const __flash char s[]="123456789";

void main(void)
{
char a,b;
a=s[1];
b=s[2];
b=a+b;
}
Dato
Цитата(NickB @ Sep 20 2005, 14:46)
Если эта переменная нигде не используется, то компилятор может ее выбростиь при оптимизации
*

Да, добавил в конце PORTA=b и код строки появился smile.gif
Спасибо smile.gif
prottoss
Цитата(Dato @ Sep 20 2005, 19:23)
Я полагаю что код этой строки должен увидеть когда открываю HEX файл, программатором или другой программой. Кажется в самом деле компилятор ее выбрасывает. 
Я проверяю так:

const __flash char s[]="123456789";

void main(void)
{
  char a,b;
  a=s[1];
  b=s[2];
  b=a+b;
}
*


Вообщето глобальные переменные должны компилиться в IAR не зависимо от степени оптимизации. Однако я делаю запись не много по друнгому:

не const __flash char s[]="123456789";

а char __flash s[]="123456789";

const сдесь совсем не нужна

указатели определяю как char __flash *ptr;

И все компилится прекрасно. Только что попробовал так откомпилить с оптимизацией по размеру "medium". Строку видно в hex-файле
Dato
Цитата(prottoss @ Sep 20 2005, 15:42)
Вообщето глобальные переменные должны компилиться в IAR не зависимо от степени оптимизации. Однако я делаю запись не много по друнгому:

не const __flash char s[]="123456789";

а  char __flash s[]="123456789";

const сдесь совсем не нужна


*


Да, const не нужна, но как бы не определить переменную видимо компилятор не включает ее код, если она не используется.
SL@V@
Если добавить __root в определении переменной то компилятор в любом случае включит её в код
Atashi
можно использовать __require(), которая спецАльно для этого wink.gif
IgorKossak
Почему-то все говорят о включении кода в выходной файл компилятором, хотя это вовсе не его задача.
Задача компилятора - получить перемещаемый модуль, в который по умолчанию включаются ВСЕ глобально объявленные переменные.
Включить переменные в выходной файл (отладочный, hex, bin) это уже работа линкера, т. к. обьявляться переменные могут в одном файле, а использоваться совсем в другом. И делает он это в том случае, когда к переменной было хоть одно обращение. Таким же способом включаются в выходной файл и программные модули. В противном случае вся мегабайтная библиотека была бы включена. Уровень оптимизации в этом случае не играет никакой роли! Дело только в востребованности того или иного обьекта (require).
Atashi
конечно.

классно Вы это разложили.
все обсуждение пошло бы иначе, будь Ваш комментарий вначале.
AndyBig
Ну, под словом "компилятор" обычно подразумевают связку компилятор+линкер smile.gif
zltigo
Цитата(AndyBig @ Jan 11 2006, 15:34) *
Ну, под словом "компилятор" обычно подразумевают связку компилятор+линкер smile.gif

А библиотекаря как подразумевают? Ассемблер? Make? Дальше хуже - редактор, tags, отладчик,
strip, профайлер, ...... Нет, пусть уж пусть все будут сами собой...
dxp
Цитата(zltigo @ Jan 11 2006, 20:04) *
Цитата(AndyBig @ Jan 11 2006, 15:34) *

Ну, под словом "компилятор" обычно подразумевают связку компилятор+линкер smile.gif

А библиотекаря как подразумевают? Ассемблер? Make? Дальше хуже - редактор, tags, отладчик,
strip, профайлер, ...... Нет, пусть уж пусть все будут сами собой...

Не, это не то же самое. В некоторых пакетах, например, gcc (и немало других), запуск других тулзов производится компилятором, т.е. он является фронт-эндом для всего остального. И поэтому тут вполне уместно говорить, что компилятор сделал то-то и то-то. Т.е. чтобы собрать проект, достаточно запустить только компилятор. Хотя лично я предпочитаю тоже делить процесс сборки на независимые части и рулить каждой тулзой по отдельности, чтобы был полный контроль.
AndyBig
Цитата
Дальше хуже - редактор, tags, отладчик,
strip, профайлер

Ну, батенька, это Вы хватили smile.gif). Общим словом "компилятор" можно для краткости называть минимальный набор средств для преобразования исходников в готовый код, то есть препроцессор+компилятор+линкер, особенно когда все делается из среды одним кликом мыши. Остальные инструменты - это уже отдельно, каждый сам по себе.
IgorKossak
В моём предыдущем посте была предпринята попытка обьяснить человеку почему и в каких случаях некая переменная может быть включена или не включена в выходной файл и кто (или что) за это отвечает.
Я вовсе не пытался придираться к понятиям и уж тем более начинать религиозные споры.
Все по-своему правы.
zltigo
Цитата(dxp @ Jan 12 2006, 08:47) *
В некоторых пакетах, например, gcc (и немало других), запуск других тулзов производится компилятором, т.е. он является фронт-эндом для всего остального.

Таки да :-) только сейчас поймал себя на том, что всегда и везде на _полном_ автомате пользуюсь
опциями типа "compile only" :-). Ну и на жаргоне, конечно "откомпилировать" заменяет все и вся...
Протестовал только от попытки обобщить в случае, когда это имеет принципиальное значение.
IgorKossak
Цитата(zltigo @ Jan 12 2006, 12:04) *
Цитата(dxp @ Jan 12 2006, 08:47) *

В некоторых пакетах, например, gcc (и немало других), запуск других тулзов производится компилятором, т.е. он является фронт-эндом для всего остального.

Таки да :-) только сейчас поймал себя на том, что всегда и везде на _полном_ автомате пользуюсь
опциями типа "compile only" :-). Ну и на жаргоне, конечно "откомпилировать" заменяет все и вся...
Протестовал только от попытки обобщить в случае, когда это имеет принципиальное значение.

Аналогично!
Сейчас работаю над проектом, в котором более 50 файлов. Rebuild all требует около 5 минут работы, что зачастую непозволительная роскошь. Поэтому тоже приходится пользоваться compile only sad.gif
А что касается термина для "всё и вся", то у нас, например, более прижился "собрать".
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.