|
IAR AVR 4.10A, Проблема с выходным файлом |
|
|
|
Mar 9 2005, 19:11
|
Местный
  
Группа: Свой
Сообщений: 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 переменные я использую. Заранее благодарен.
|
|
|
|
|
Mar 10 2005, 09:26
|

Частый гость
 
Группа: Свой
Сообщений: 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-у обычно прилагается.
--------------------
- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
|
|
|
|
|
Mar 10 2005, 19:56
|
Участник

Группа: Свой
Сообщений: 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 будет сложнее, но также возможно. Кроме того поэкспериментируйте с настройками оптимизации - Вы будете приятно удивлены размером кода. Но внимательно следите, чтобы компилятор в таком случае не проглотил куски кода. Хотя с этим можно бороться... Удачи. Если что не получится - спрашивайте.
|
|
|
|
|
Mar 14 2005, 13:27
|
Участник

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

|
Делается все очень просто. В опциях линкера ставите формат simple и в меню Tools добавляете файли postlink.bat (находится в директории avr\bin). Описание читайте в файл postlink.htm который находится в директории ...\IAR Systems\.....\avr\doc\
|
|
|
|
|
May 3 2005, 19:55
|
Частый гость
 
Группа: Свой
Сообщений: 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. Я даже указывал полное имя файла. Подскажите что не так?
|
|
|
|
|
May 4 2005, 05:47
|
Участник

Группа: Свой
Сообщений: 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."
|
|
|
|
|
May 5 2005, 09:02
|

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

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

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

|
Цитата(prottoss @ Jul 23 2005, 20:25) Господа! Может просветите меня по такому вопросу. Есть МК АВР и подключенная к непу по СПИ внешняя ЕЕПРОМ. ... Поскольку внешняя ЕЕПРОМ подключена через SPI, то её адресное пространство не отображается на адресное пространство данных МК, поэтому нет простого способа сделать то, что Вы хотите. Но можно поступить следующим образом (если адрес ячейки не окажется больше двух байтов): - расширить адресное пространство внутренней ЕЕПРОМ на размер внешней (в соответствующем файле *.xcl); - определить сегмент в пространстве XDATA для внешней ЕЕПРОМ (или не делать этого если внешняя - просто продолжение внутренней); - изменить драйвер работы с ЕЕПРОМ так, чтобы при обращении по адресу, большему верхней границы внутренней ЕЕПРОМ, обращение шло по SPI ко внешней. Изменить надо файл eeprom.s90, который лежит в \avr\src\lib, предварительно переписав его в рабочую папку, и включить его в проект. Перед этим, разумеется, надо проинициализировать SPI перед первым возможным обращением к ЕЕПРОМ.
|
|
|
|
|
Aug 12 2005, 09:42
|

Участник

Группа: Участник
Сообщений: 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 Что это есть?????? (У меня свой программатор - а формата интела не могу найти).
|
|
|
|
|
Aug 12 2005, 10:51
|

Гуру
     
Группа: Свой
Сообщений: 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 и т.д. Конечно, немного коряво, но пока меня устраивает. Но, в любом случае, попробую вариант, предложенный Вами. Спасибо. С уважением, Андрей
--------------------
|
|
|
|
|
Aug 13 2005, 06:20
|

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

|
Цитата(prottoss @ Jul 23 2005, 20:25) Господа! Может просветите меня по такому вопросу. Есть МК АВР и подключенная к непу по СПИ внешняя ЕЕПРОМ. Проект пишется на IAR C AVR v4.10B. Во внешнюю ЕЕПРОМ необходимо загнать разноообразные структуры, и еще кучу всякой инфы (картинки например). Не могу создать файл ЕЕП для внешней ЕЕПРОМ. Создается только для встроенной. Может есть какие то способы решения проблемы. С уважением Андрей OFF: Просветите меня - как такой чайник, мог что-то толковое написать для AVR? Я говорю про его так называемый драйвер для LCD 128*32, который он рекламирует на каждом углу (практически во всех русскоязычных конференциях, а вчера в англоязычную конференцию полез). Я конечно ничего протв не имею 100 способов быстрого зарабатывания денег, но как можно предлагать "кота в мешке"? Очень большие подозрения, что все это лажа, или краденое, как и вся дока на его сайте вначале.
|
|
|
|
|
Aug 13 2005, 11: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. С уважением, Андрей.
--------------------
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|