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

 
 
2 страниц V   1 2 >  
Closed TopicStart new topic
> IAR AVR 4.10A, Проблема с выходным файлом
Sergio66
сообщение Mar 9 2005, 19:11
Сообщение #1


Местный
***

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



Среда IAR AVR 4.10A.
Подскажите, плз., как сгенерить выходной файл проекта (*.hex, *.eep), или, какие они могут иметь расширения?
Вроде все заработало, проект компилится без ошибок, линкуется, но того, что заливать в камень найти не могу. Все опции перебрал.
В RELEASE генерится dbg файл, а в DEBUG - hex, но размером с паровоз. 231 К. Это при том, что код пишется для М32. ICC генерил файлы размером 40 - 50 К. Загрузчик AS-2 не может загрузить полученный файл. А eep вообще не генерится. Хотя, __eeprom переменные я использую.
Заранее благодарен.
Go to the top of the page
 
+Quote Post
-Tумблер-
сообщение Mar 10 2005, 09:26
Сообщение #2


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

Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040



Цитата(Sergio66 @ Mar 9 2005, 22:11)
Среда IAR AVR 4.10A.

DEBUG - hex, но размером с паровоз. 231 К.


Вероятно, это можно исправить редактированием .xcl - файла.
Возможно в стандартном варианте описана структура
программы не оптимальная для Вашего проекта.


Обычно IAR-среда позволяет скопировать .xcl - файл
в директорию проекта и использовать именно этот экземпляр.
Получится экземпляр проекта и неизменный стандартный вариант.

Далее нужно изучать .map файл и выяснить, в какую
область адресов какие сегменты попали.
Затем уже редактировать .xcl файл. Редактировать
можно и сразу, если понять какие сегменты что означают
и какие из них пользует программа.
Эта документация к IAR-у обычно прилагается.
smile.gif


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post
Alex_St
сообщение Mar 10 2005, 19:56
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 32
Регистрация: 26-11-04
Из: Одесса, Украина
Пользователь №: 1 240



Цитата(Sergio66 @ Mar 9 2005, 22:11)
Среда IAR AVR 4.10A.
Подскажите, плз., как сгенерить выходной файл проекта (*.hex,  *.eep), или, какие они могут иметь расширения?
Вроде все заработало, проект компилится без ошибок, линкуется, но того, что заливать в камень найти не могу. Все опции перебрал.
В RELEASE генерится dbg файл, а в DEBUG - hex, но размером с паровоз. 231 К. Это при том, что код пишется для М32. ICC генерил файлы размером 40 - 50 К. Загрузчик AS-2 не может загрузить полученный файл. А eep вообще не генерится. Хотя, __eeprom переменные я использую.
Заранее благодарен.
*


Инициализируете ли Вы переменные типа __eeprom? Если нет, то делаем так:

Заходим в Options->Linker->Output, в области Format ставим галочку напротив строки "Other", в графе "Output standart выбираем требуемый формат (я использую обычно intel-standart).

После чего компилируем. В результате в папке пороекта в подпапке Debug/Exe или в Release/Exe - в зависимости от выбранной конфигурации сгенерится файл *.a90 . Это и есть файл в формате HEX, который нужно прошивать в контроллер. Если Вы хотите, чтобы файл имел расширение *.hex, то там же поставьте галочку напротив Override default, и в появившемся окошечке введите требуемое имя.

Ваш файл HEX имел такой большой размер потому, что в нем хранится много отладочной информации - типа текствых названий портов, исходника на С и т.д.

Если же Вы инициализируете __eeprom переменные, то получить выходной файл HEX будет сложнее, но также возможно.

Кроме того поэкспериментируйте с настройками оптимизации - Вы будете приятно удивлены размером кода. Но внимательно следите, чтобы компилятор в таком случае не проглотил куски кода. Хотя с этим можно бороться...

Удачи. Если что не получится - спрашивайте.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 14 2005, 10:23
Сообщение #4


Шаман
******

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



Если проект содержит переменные в EEPROM, то выбор выходного формата hex из настроек в среде приведёт к ошибке линкера, т. к. этот формат не поддерживает множественные адресные пространства, а в настройках среды нет возможности указать для какого адресного пространства выдать выходной файл.
Проблема решается введением следующих двух строк в .xcl файл:
Код
-Ointel-extended,(CODE)=.hex
-Ointel-extended,(XDATA)=.eep
Go to the top of the page
 
+Quote Post
Maxim
сообщение Mar 14 2005, 13:27
Сообщение #5


Участник
*

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



Делается все очень просто.
В опциях линкера ставите формат simple и в меню Tools добавляете файли postlink.bat (находится в директории avr\bin). Описание читайте в файл postlink.htm который находится в директории ...\IAR Systems\.....\avr\doc\
Go to the top of the page
 
+Quote Post
dxp
сообщение Mar 14 2005, 13:37
Сообщение #6


Adept
******

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



Цитата(Maxim @ Mar 14 2005, 19:27)
Делается все очень просто.
В опциях линкера ставите формат simple и в меню Tools добавляете файли postlink.bat (находится в директории avr\bin). Описание читайте в файл postlink.htm который находится в директории ...\IAR Systems\.....\avr\doc\
*

Пользваться postlink'ом сегодня уже не рекомендуется. Это устаревшая тулза, оставленная только для совместимости. XLINK умеет выдавать все, что надо, как и было показано сообщением выше.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
_pegas_
сообщение May 3 2005, 19:55
Сообщение #7


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

Группа: Свой
Сообщений: 79
Регистрация: 24-11-04
Пользователь №: 1 220



Цитата(IgorKossak @ Mar 14 2005, 13:23)
Если проект содержит переменные в EEPROM, то выбор выходного формата hex из настроек в среде приведёт к ошибке линкера, т. к. этот формат не поддерживает множественные адресные пространства, а в настройках среды нет возможности указать для какого адресного пространства выдать выходной файл.
Проблема решается введением следующих двух строк в .xcl файл:
Код
-Ointel-extended,(CODE)=.hex
-Ointel-extended,(XDATA)=.eep

*


У меня стоит IAR 2.31 c линкером 4.52h. Вообщем на первую строчку ругается чтоне может найти файл (CODE)=.hex. Я даже указывал полное имя файла.
Подскажите что не так?
Go to the top of the page
 
+Quote Post
Maxim
сообщение May 4 2005, 05:47
Сообщение #8


Участник
*

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



Цитата(_pegas_ @ May 3 2005, 22:55)
Цитата(IgorKossak @ Mar 14 2005, 13:23)
Если проект содержит переменные в EEPROM, то выбор выходного формата hex из настроек в среде приведёт к ошибке линкера, т. к. этот формат не поддерживает множественные адресные пространства, а в настройках среды нет возможности указать для какого адресного пространства выдать выходной файл.
Проблема решается введением следующих двух строк в .xcl файл:
Код
-Ointel-extended,(CODE)=.hex
-Ointel-extended,(XDATA)=.eep

*


У меня стоит IAR 2.31 c линкером 4.52h. Вообщем на первую строчку ругается чтоне может найти файл (CODE)=.hex. Я даже указывал полное имя файла.
Подскажите что не так?
*



У меня IAR 4.10B с XLINK 4.59J. Эти опции вставляю в Project/Options/Linker/Extra Options. Вопросов не возникает. Попробуйте в линкере поставить опции -Y или -y. Вот что по этому поводу сказано в документации на линкер:
Код
-O -Oformat[,variant][=filename]
Use the -O option to create one or more output files of the format format, possibly with
the variant variant (just as if you had used the -Y or -y option). If no filename is
specified, the output file will be given the same name as a previously specified output
file, or the name given in a -o option, with the default extension for the format.
(Typically you would want all output files specified using the -O option to have the same
filename.) If the first character of filename is a . (a period), filename is assumed to
be an extension, and the file receives the same name as if no name was specified, but
with the specified extension. Any number of -O command line options can be specified.
Example
-Odebug=foo
-Omotorola=.s99
-Ointel-extended,1=abs.x
This will result in one output file named foo.dbg, using the UBROF format, one named
foo.s99, using the MOTOROLA format, and one named abs.x, using the
INTEL-EXTENDED format just as if -Y1 had also been specified.
Output files produced by using -O will be in addition to those produced by using the -F,
-o, or -y options. This means that extra output files can be added to the linker command
file despite that this feature is not supported in the IAR Embedded Workbench IDE.
Note: If -r is specified—or its corresponding option in the IAR Embedded Workbench
IDE—only one output file is generated, using the UBROF format and selecting special
runtime library modules for IAR C-SPY."
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение May 5 2005, 09:02
Сообщение #9


Шаман
******

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



Цитата(_pegas_ @ May 3 2005, 22:55)
У меня стоит IAR 2.31 c линкером 4.52h. Вообщем на первую строчку ругается чтоне может найти файл (CODE)=.hex. Я даже указывал полное имя файла.
  Подскажите что не так?
*

Компилятор и линкер слишком пожилые (кто же мог знать?).
Если не хотите ставить более новую среду, то воспользуйтесь советом, который дал Maxim.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 23 2005, 17:25
Сообщение #10


Гуру
******

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



Господа! Может просветите меня по такому вопросу. Есть МК АВР и подключенная к непу по СПИ внешняя ЕЕПРОМ. Проект пишется на IAR C AVR v4.10B. Во внешнюю ЕЕПРОМ необходимо загнать разноообразные структуры, и еще кучу всякой инфы (картинки например). Не могу создать файл ЕЕП для внешней ЕЕПРОМ. Создается только для встроенной. Может есть какие то способы решения проблемы.

С уважением Андрей


--------------------
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jul 29 2005, 06:46
Сообщение #11


Шаман
******

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



Цитата(prottoss @ Jul 23 2005, 20:25)
Господа! Может просветите меня по такому вопросу. Есть МК АВР и подключенная к непу по СПИ внешняя ЕЕПРОМ. ...
*

Поскольку внешняя ЕЕПРОМ подключена через SPI, то её адресное пространство не отображается на адресное пространство данных МК, поэтому нет простого способа сделать то, что Вы хотите.
Но можно поступить следующим образом (если адрес ячейки не окажется больше двух байтов):
- расширить адресное пространство внутренней ЕЕПРОМ на размер внешней (в соответствующем файле *.xcl);
- определить сегмент в пространстве XDATA для внешней ЕЕПРОМ (или не делать этого если внешняя - просто продолжение внутренней);
- изменить драйвер работы с ЕЕПРОМ так, чтобы при обращении по адресу, большему верхней границы внутренней ЕЕПРОМ, обращение шло по SPI ко внешней. Изменить надо файл eeprom.s90, который лежит в \avr\src\lib, предварительно переписав его в рабочую папку, и включить его в проект.
Перед этим, разумеется, надо проинициализировать SPI перед первым возможным обращением к ЕЕПРОМ.
Go to the top of the page
 
+Quote Post
Juk1976
сообщение Aug 12 2005, 09:42
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 1-08-05
Из: Украина Винница
Пользователь №: 7 258



Цитата(Alex_St @ Mar 10 2005, 22:56)
Цитата(Sergio66 @ Mar 9 2005, 22:11)
Среда IAR AVR 4.10A.
Подскажите, плз., как сгенерить выходной файл проекта (*.hex,  *.eep), или, какие они могут иметь расширения?
Вроде все заработало, проект компилится без ошибок, линкуется, но того, что заливать в камень найти не могу. Все опции перебрал.
В RELEASE генерится dbg файл, а в DEBUG - hex, но размером с паровоз. 231 К. Это при том, что код пишется для М32. ICC генерил файлы размером 40 - 50 К. Загрузчик AS-2 не может загрузить полученный файл. А eep вообще не генерится. Хотя, __eeprom переменные я использую.
Заранее благодарен.
*


Инициализируете ли Вы переменные типа __eeprom? Если нет, то делаем так:

Заходим в Options->Linker->Output, в области Format ставим галочку напротив строки "Other", в графе "Output standart выбираем требуемый формат (я использую обычно intel-standart).

После чего компилируем. В результате в папке пороекта в подпапке Debug/Exe или в Release/Exe - в зависимости от выбранной конфигурации сгенерится файл *.a90 . Это и есть файл в формате HEX, который нужно прошивать в контроллер. Если Вы хотите, чтобы файл имел расширение *.hex, то там же поставьте галочку напротив Override default, и в появившемся окошечке введите требуемое имя.

Ваш файл HEX имел такой большой размер потому, что в нем хранится много отладочной информации - типа текствых названий портов, исходника на С и т.д.

Если же Вы инициализируете __eeprom переменные, то получить выходной файл HEX будет сложнее, но также возможно.

Кроме того поэкспериментируйте с настройками оптимизации - Вы будете приятно удивлены размером кода. Но внимательно следите, чтобы компилятор в таком случае не проглотил куски кода. Хотя с этим можно бороться...

Удачи. Если что не получится - спрашивайте.
*



А как насчёт формата ZAX-I. Я всегда ним пользовался. Сейчас поставил V4 и проблема - Fatal Error[e119]: Cannot handle C++ identifiers in this output format

Что это есть?????? (У меня свой программатор - а формата интела не могу найти).
Go to the top of the page
 
+Quote Post
prottoss
сообщение Aug 12 2005, 10:51
Сообщение #13


Гуру
******

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



Цитата(IgorKossak @ Jul 29 2005, 14:46)
Поскольку внешняя ЕЕПРОМ подключена через SPI, то её адресное пространство не отображается на адресное пространство данных МК, поэтому нет простого способа сделать то, что Вы хотите.
*


Да, спасибо.

Но я сделал пока по другому. Сделал отдельный проект в ImageCraft, где определил custom device c EEPROM = 64Kb. Определил нужные мне массивы и структуры с префиксом #pragma data:eeprom.

А в рабочем проекте создал хедер EEPROM_DEF.h. В нем определил через #define адреса массивов и сруктур и их размеры, примерно вот так:

#define eeprom_start 1

#define main_font_sym_width 8
#define main_font_sym_height 6
#define main_font_sym_array 256
#define main_font_adress start + 0
#define main_font_size main_font_sym_width * main_font_sym_height * main_font_sym_array

................................................................

#define picture1_adress main_font_adress + main_font_size
#define picture1_size 2048

................................................................

#define picture2_adress picture1_adress + picture1_size
#define picture2_size 2048

и т.д.
Конечно, немного коряво, но пока меня устраивает.
Но, в любом случае, попробую вариант, предложенный Вами. Спасибо.

С уважением, Андрей


--------------------
Go to the top of the page
 
+Quote Post
Make_Pic
сообщение Aug 13 2005, 06:20
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Цитата(prottoss @ Jul 23 2005, 20:25)
Господа! Может просветите меня по такому вопросу. Есть МК АВР и подключенная к непу по СПИ внешняя ЕЕПРОМ. Проект пишется на IAR C AVR v4.10B. Во внешнюю ЕЕПРОМ необходимо загнать разноообразные структуры, и еще кучу всякой инфы (картинки например).  Не могу создать файл ЕЕП для внешней ЕЕПРОМ. Создается только для встроенной. Может есть какие то способы решения проблемы.

С уважением Андрей
*


OFF: Просветите меня - как такой чайник, мог что-то толковое написать для AVR? Я говорю про его так называемый драйвер для LCD 128*32, который он рекламирует на каждом углу (практически во всех русскоязычных конференциях, а вчера в англоязычную конференцию полез). Я конечно ничего протв не имею 100 способов быстрого зарабатывания денег, но как можно предлагать "кота в мешке"? Очень большие подозрения, что все это лажа, или краденое, как и вся дока на его сайте вначале.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Aug 13 2005, 11:15
Сообщение #15


Гуру
******

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



Цитата(Make_Pic @ Aug 13 2005, 14:20)
Цитата(prottoss @ Jul 23 2005, 20:25)
Господа! Может просветите меня по такому вопросу. Есть МК АВР и подключенная к непу по СПИ внешняя ЕЕПРОМ. Проект пишется на IAR C AVR v4.10B. Во внешнюю ЕЕПРОМ необходимо загнать разноообразные структуры, и еще кучу всякой инфы (картинки например).  Не могу создать файл ЕЕП для внешней ЕЕПРОМ. Создается только для встроенной. Может есть какие то способы решения проблемы.

С уважением Андрей
*


OFF: Просветите меня - как такой чайник, мог что-то толковое написать для AVR? Я говорю про его так называемый драйвер для LCD 128*32, который он рекламирует на каждом углу (практически во всех русскоязычных конференциях, а вчера в англоязычную конференцию полез). Я конечно ничего протв не имею 100 способов быстрого зарабатывания денег, но как можно предлагать "кота в мешке"? Очень большие подозрения, что все это лажа, или краденое, как и вся дока на его сайте вначале.
*



Спасибо за чайник. Не поясниете ли, уважаемый, от чего так сурово? Исходники мои не лажа, но в силу специфики программного обеспечения я не могу защитить их иным способом. А тем, что рекламирую их.... я больше рекламирую сайт, чем исходники. До Нового года Вот хочу еще выложить такие же исходники для PDIUSBD12 с дровами под Win, и еще, может быть, под USBN9604.

Кстати дисплей 122*32.

С уважением, Андрей.


--------------------
Go to the top of the page
 
+Quote Post

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

 


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


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