Перейти к содержанию
    

Среда IAR AVR 4.10A.

Подскажите, плз., как сгенерить выходной файл проекта (*.hex, *.eep), или, какие они могут иметь расширения?

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

В RELEASE генерится dbg файл, а в DEBUG - hex, но размером с паровоз. 231 К. Это при том, что код пишется для М32. ICC генерил файлы размером 40 - 50 К. Загрузчик AS-2 не может загрузить полученный файл. А eep вообще не генерится. Хотя, __eeprom переменные я использую.

Заранее благодарен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Среда IAR AVR 4.10A.

 

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

 

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

Возможно в стандартном варианте описана структура

программы не оптимальная для Вашего проекта.

 

 

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

в директорию проекта и использовать именно этот экземпляр.

Получится экземпляр проекта и неизменный стандартный вариант.

 

Далее нужно изучать .map файл и выяснить, в какую

область адресов какие сегменты попали.

Затем уже редактировать .xcl файл. Редактировать

можно и сразу, если понять какие сегменты что означают

и какие из них пользует программа.

Эта документация к IAR-у обычно прилагается.

:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Среда 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 будет сложнее, но также возможно.

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если проект содержит переменные в EEPROM, то выбор выходного формата hex из настроек в среде приведёт к ошибке линкера, т. к. этот формат не поддерживает множественные адресные пространства, а в настройках среды нет возможности указать для какого адресного пространства выдать выходной файл.

Проблема решается введением следующих двух строк в .xcl файл:

-Ointel-extended,(CODE)=.hex
-Ointel-extended,(XDATA)=.eep

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делается все очень просто.

В опциях линкера ставите формат simple и в меню Tools добавляете файли postlink.bat (находится в директории avr\bin). Описание читайте в файл postlink.htm который находится в директории ...\IAR Systems\.....\avr\doc\

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делается все очень просто.

В опциях линкера ставите формат simple и в меню Tools добавляете файли postlink.bat (находится в директории avr\bin). Описание читайте в файл postlink.htm который находится в директории ...\IAR Systems\.....\avr\doc\

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если проект содержит переменные в EEPROM, то выбор выходного формата hex из настроек в среде приведёт к ошибке линкера, т. к. этот формат не поддерживает множественные адресные пространства, а в настройках среды нет возможности указать для какого адресного пространства выдать выходной файл.

Проблема решается введением следующих двух строк в .xcl файл:

-Ointel-extended,(CODE)=.hex
-Ointel-extended,(XDATA)=.eep

 

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

Подскажите что не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если проект содержит переменные в 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."

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

  Подскажите что не так?

Компилятор и линкер слишком пожилые (кто же мог знать?).

Если не хотите ставить более новую среду, то воспользуйтесь советом, который дал Maxim.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Господа! Может просветите меня по такому вопросу. Есть МК АВР и подключенная к непу по СПИ внешняя ЕЕПРОМ. ...

Поскольку внешняя ЕЕПРОМ подключена через SPI, то её адресное пространство не отображается на адресное пространство данных МК, поэтому нет простого способа сделать то, что Вы хотите.

Но можно поступить следующим образом (если адрес ячейки не окажется больше двух байтов):

- расширить адресное пространство внутренней ЕЕПРОМ на размер внешней (в соответствующем файле *.xcl);

- определить сегмент в пространстве XDATA для внешней ЕЕПРОМ (или не делать этого если внешняя - просто продолжение внутренней);

- изменить драйвер работы с ЕЕПРОМ так, чтобы при обращении по адресу, большему верхней границы внутренней ЕЕПРОМ, обращение шло по SPI ко внешней. Изменить надо файл eeprom.s90, который лежит в \avr\src\lib, предварительно переписав его в рабочую папку, и включить его в проект.

Перед этим, разумеется, надо проинициализировать SPI перед первым возможным обращением к ЕЕПРОМ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Среда 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

 

Что это есть?????? (У меня свой программатор - а формата интела не могу найти).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поскольку внешняя ЕЕПРОМ подключена через 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

 

и т.д.

Конечно, немного коряво, но пока меня устраивает.

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...