Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR генерит .hex файл с ошибкой
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
OLEG_BOS
Ситуация следующая:
Написал пробную программу на С, в IAR 4.20A, для тестирования USART для Atmega8. Программа выдает строку в USART. Подключил файл .hex (формат Intel - extended) из папки Release проекта IAR в Proteus 6.9.04 для тестирования в виртуальном терминале. Реакции на то что программа работает - ноль. Состояние регистров USART :UCSRA 0x000B 0b00100000
UCSRC 0x0020 0b00000000 UCSRB 0x000A 0b00000000, что говорит о том что даже непрошла инициализация USART. И конечно же никаких прериваний от него и ожидать нестоит.
Другая картина наблюдается когда я подключаю ubrof 8(forsed) файл того же проекта из папки Debug. Все работает как и положенно. в реальном железе тот же файл .hex работает но только наполовину: выдается только первая буква из строки.
В конце концов решил подключить файл .hex для его дизасcемблирования и пошаговой отладки в AVR Studio 4.12. В итоге получаю такое сообщение: sad.gif

Coordinator: An error occured while reading the object file. The file may be of wrong type or corrupted, or the object file reader is not up to date.
Error loading object file J:\TestRS232\Release\Exe\TestRS232.hex

Мои попытки подсунуть AVR Studio вместо .hex (Intel - extended) .hex (Intel - standart) - увенчались тем же сообщением об ошибке. Хотя я в этом случае все понятно, так как в описании поддержки форматов в AVR Studio значится Intel - extended.

Так почему же AVR Studio непонимает сгенерированного файла .hex IAR, симулятор Proteus 6.9.04 - его не запускает в работу, реальное железо выполняет его неправильно ? Все сводится к логическому заключению : IAR 4.20A генерит .hex файл с ошибкой. Попытки компиляции в IAR 4.12A - привели к тому же результату. Перечитал документацию на компилятор IAR - там скудная информация по поддерживаемым форматам.. sad.gif

В итоге незнаю что делать. Сталкивался ли кто-то с подобным явлением ? Есть ли у кого -то идеи как мне решить подобную проблему. Заранее буду благодарен за Ваши советы. Файл исходник прикрепляю к письму.
ILYCHOFF
Наблюдал тоже самое, пришлось переставить IAR поставил 4.11 все нормально.
Я пробовал один и тот же исходник компилировать в 20 версии и в 11 версии, после 20 протеус не принимает прошивку, железо тоже не работает (шью понипрогом МК ATMega16), а после 11 работает все и протеус и железо....
Причину не нашел...
IgorKossak
Для пошаговой отладки по ассемблерному тексту вовсе не обязателно грузить в AVRStudio hex файл.
Достаточно загрузить отладочный файл в формате ubrof8 и открыть окно View/Disassembler.
OLEG_BOS
Цитата(IgorKossak @ Jul 6 2006, 15:53) *
Для пошаговой отладки по ассемблерному тексту вовсе не обязателно грузить в AVRStudio hex файл.
Достаточно загрузить отладочный файл в формате ubrof8 и открыть окно View/Disassembler.


Уважаемый IgorKossak, неужели Вы думаете что я просто из академического интереса пишу программу ?wink.gif И как мне потом зашыть этот ubrof8 в Atmega8 ? wink.gif

Как я уже писал выше : "Другая картина наблюдается когда я подключаю ubrof 8(forsed) файл того же проекта из папки Debug. Все работает как и положенно. в реальном железе тот же файл .hex работает но только наполовину: выдается только первая буква из строки."
ubrof 8(forsed) - я подключал в Proteus 6.9.04. Там все работает как и задумывалось по алгоритму программы: на виртуальный терминал выдается строка полностью.

Если Вам нетрудно, пожалуйста посмотрите код. Может там что-то нетак. Заранее Вам благодарен. smile.gif
IgorKossak
Посмотрел проект, сразу бросилось следующее:
1. Options/General Options/Target/Memory model - поставьте Small (8 кБайт кода) вместо Tiny (256 байт кода)
2. .../Linker/Extra options - уберите опцию -y(CODE)
3. там же опция -Ointel-extended,(DATA)=$EXE_DIR$\$PROJ_FNAME$_data.hex бессмысленна, тоже уберите или вместо неё вставьте -Ointel-extended,(CODE)=$EXE_DIR$\$PROJ_FNAME$_code.hex
4. увеличьте размер стека данных для начала вдвое, если заработает и будет нехватка памяти, тогда будете постепенно уменьшать

С самой прогой пока не сильно разбирался, но для начала попробуйте упростить, лишьбы заработала.
IgorKossak
Что касается AVRStudio и hex файлов, то удалось выяснить следующее.
В файле, сгенерированом IARом, вторая снизу строка содержит команду 03
Код
:0400000300000000F9
удалите эту строку и всё пойдёт.
AVRStudio ещё не научилась распознавать эту команду wink.gif
OLEG_BOS
Спасибо, Уважаемый IgorKossak ! smile.gif Все сделал по вашим рекомендациям. Окончательно все пошло только тогда, когда убрал строку :0400000300000000F9 в .hex - файле. Программа заработала и AVRStudio и в реальном железе. Только никак немогу понять: в чем собственно суть проблемы ? Кого винить: IAR, который формирует команды которые неизвестны ф. Atmel или Atmel, который незнает что IAR для их контоллеров формирует неподдерживаемые команды.
Уважаемый IgorKossak, откройте пожалуйста секрет "шаманства" с выше упомянутой строкой в файле .hex, дабы избежать в последующем таких неприятных явлений. Буду Вам очень признателен. smile.gif
IgorKossak
Думаю врядли стоит винить IAR в том, что они решили следовать стандарту (Команда 03 означает точку старта программы, в данном случае 0x0000).
Когда я как и Вы впервые столкнулся с подобным сообщением, стал разбираться с форматом intel-hex.
Кстати, нашёл ещё одну вещь - не всякая программа, принимающая hex файл правильно понимает пустые строки.
Как говорится, век живи, век учись.
OLEG_BOS
Цитата(IgorKossak @ Jul 7 2006, 15:23) *
Думаю врядли стоит винить IAR в том, что они решили следовать стандарту (Команда 03 означает точку старта программы, в данном случае 0x0000).
Когда я как и Вы впервые столкнулся с подобным сообщением, стал разбираться с форматом intel-hex.
Кстати, нашёл ещё одну вещь - не всякая программа, принимающая hex файл правильно понимает пустые строки.
Как говорится, век живи, век учись.

Хм...интересная получается ситуация. Если программа для программатора не следует стандарту, то получается, что и данные для контроллера шьются неверно. И в итоге имеем такую ситуацию, которая наблюдалась и у меня.
Да совершенно с Вами согласен: "век живи - век учись !"
Какие Вы можете дать рекомендации дабы избежать подобного. Неужто все время следует удалять эту строку ?
IgorKossak
Цитата(OLEG_BOS @ Jul 7 2006, 16:17) *
Неужто все время следует удалять эту строку ?

Для начала следует проверить реакцию программатора на эту строку.
Возможно он её просто проигнорирует. Проверить можно так: записать файл с проблемной строкой, а верифицировать с файлом без оной.
Если не получится, то никуда уже не деться, придётся удалять вручную.
Atashi
Cпасибо, IgorKossak, у меня была аналогичная проблема в 4.12 для бегущей строки. все решилось при учете Ваших рекомендаций.
Schtirlitz
Ставим в настройках линкера IAR -
Format Variant: 32bit linear without entry point
после этого AVRстудия начинает проглатывать HEX файл из IARa.
Александр Куличок
Цитата(OLEG_BOS @ Jul 6 2006, 16:09) *
Уважаемый IgorKossak, неужели Вы думаете что я просто из академического интереса пишу программу ?wink.gif И как мне потом зашыть этот ubrof8 в Atmega8 ? wink.gif


При программированиии выставить опцию "Use Current Simulator/Emulator FLASH Memmory"
sKWO
Цитата(Александр Куличок @ Aug 17 2007, 11:53) *
При программированиии выставить опцию "Use Current Simulator/Emulator FLASH Memmory"

Александр, а где эта опция выставляется? У меня ИАР вер. 3.10А и 4.30А для АВР и нигде не видел её!
как и настройки линкера -- Format Variant: 32bit linear without entry point. -- но это уже не к Вам
С уважением
Schtirlitz
Цитата(sKWO @ Aug 21 2007, 00:43) *
Александр, а где эта опция выставляется? У меня ИАР вер. 3.10А и 4.30А для АВР и нигде не видел её!
как и настройки линкера -- Format Variant: 32bit linear without entry point. -- но это уже не к Вам
С уважением


Смотрите вложение.
Нажмите для просмотра прикрепленного файла
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.