реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> IAR EWA for AVR, Помогите пожалуйста
Dato
сообщение Sep 20 2005, 10:14
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 20-09-05
Пользователь №: 8 746



Начал пробовать IAR EWAVR 4.10a
я делаю так:

__flash char s[]="123456789"

для запоминания строковой константы в FLASH, но после создания кода там строки нет sad.gif
пожалуйста обЪясните в чем ошибка smile.gif
Go to the top of the page
 
+Quote Post
NickB
сообщение Sep 20 2005, 10:46
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 114
Регистрация: 22-06-04
Пользователь №: 102



Что значит ее нет ?
Откуда это видно ?
Если эта переменная нигде не используется, то компилятор может ее выбростиь при оптимизации
Go to the top of the page
 
+Quote Post
Dato
сообщение Sep 20 2005, 11:23
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 20-09-05
Пользователь №: 8 746



Я полагаю что код этой строки должен увидеть когда открываю HEX файл, программатором или другой программой. Кажется в самом деле компилятор ее выбрасывает.
Я проверяю так:

const __flash char s[]="123456789";

void main(void)
{
char a,b;
a=s[1];
b=s[2];
b=a+b;
}
Go to the top of the page
 
+Quote Post
Dato
сообщение Sep 20 2005, 11:39
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 20-09-05
Пользователь №: 8 746



Цитата(NickB @ Sep 20 2005, 14:46)
Если эта переменная нигде не используется, то компилятор может ее выбростиь при оптимизации
*

Да, добавил в конце PORTA=b и код строки появился smile.gif
Спасибо smile.gif
Go to the top of the page
 
+Quote Post
prottoss
сообщение Sep 20 2005, 11:42
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(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-файле


--------------------
Go to the top of the page
 
+Quote Post
Dato
сообщение Sep 20 2005, 12:08
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 20-09-05
Пользователь №: 8 746



Цитата(prottoss @ Sep 20 2005, 15:42)
Вообщето глобальные переменные должны компилиться в IAR не зависимо от степени оптимизации. Однако я делаю запись не много по друнгому:

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

а  char __flash s[]="123456789";

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


*


Да, const не нужна, но как бы не определить переменную видимо компилятор не включает ее код, если она не используется.
Go to the top of the page
 
+Quote Post
SL@V@
сообщение Sep 20 2005, 15:03
Сообщение #7





Группа: Новичок
Сообщений: 7
Регистрация: 30-03-05
Пользователь №: 3 806



Если добавить __root в определении переменной то компилятор в любом случае включит её в код
Go to the top of the page
 
+Quote Post
Atashi
сообщение Jan 7 2006, 12:00
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 66
Регистрация: 30-04-05
Пользователь №: 4 630



можно использовать __require(), которая спецАльно для этого wink.gif
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jan 11 2006, 09:51
Сообщение #9


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Почему-то все говорят о включении кода в выходной файл компилятором, хотя это вовсе не его задача.
Задача компилятора - получить перемещаемый модуль, в который по умолчанию включаются ВСЕ глобально объявленные переменные.
Включить переменные в выходной файл (отладочный, hex, bin) это уже работа линкера, т. к. обьявляться переменные могут в одном файле, а использоваться совсем в другом. И делает он это в том случае, когда к переменной было хоть одно обращение. Таким же способом включаются в выходной файл и программные модули. В противном случае вся мегабайтная библиотека была бы включена. Уровень оптимизации в этом случае не играет никакой роли! Дело только в востребованности того или иного обьекта (require).
Go to the top of the page
 
+Quote Post
Atashi
сообщение Jan 11 2006, 10:57
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 66
Регистрация: 30-04-05
Пользователь №: 4 630



конечно.

классно Вы это разложили.
все обсуждение пошло бы иначе, будь Ваш комментарий вначале.
Go to the top of the page
 
+Quote Post
AndyBig
сообщение Jan 11 2006, 13:34
Сообщение #11


Иногдящий
****

Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931



Ну, под словом "компилятор" обычно подразумевают связку компилятор+линкер smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 11 2006, 14:04
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 12 2006, 06:47
Сообщение #13


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(zltigo @ Jan 11 2006, 20:04) *
Цитата(AndyBig @ Jan 11 2006, 15:34) *

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

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

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


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
AndyBig
сообщение Jan 12 2006, 08:03
Сообщение #14


Иногдящий
****

Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931



Цитата
Дальше хуже - редактор, tags, отладчик,
strip, профайлер

Ну, батенька, это Вы хватили smile.gif). Общим словом "компилятор" можно для краткости называть минимальный набор средств для преобразования исходников в готовый код, то есть препроцессор+компилятор+линкер, особенно когда все делается из среды одним кликом мыши. Остальные инструменты - это уже отдельно, каждый сам по себе.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jan 12 2006, 08:35
Сообщение #15


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



В моём предыдущем посте была предпринята попытка обьяснить человеку почему и в каких случаях некая переменная может быть включена или не включена в выходной файл и кто (или что) за это отвечает.
Я вовсе не пытался придираться к понятиям и уж тем более начинать религиозные споры.
Все по-своему правы.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th June 2025 - 12:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.0149 секунд с 7
ELECTRONIX ©2004-2016