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

IAR генерит .hex файл с ошибкой

Ситуация следующая:

Написал пробную программу на С, в 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. В итоге получаю такое сообщение: :(

 

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 - там скудная информация по поддерживаемым форматам.. :(

 

В итоге незнаю что делать. Сталкивался ли кто-то с подобным явлением ? Есть ли у кого -то идеи как мне решить подобную проблему. Заранее буду благодарен за Ваши советы. Файл исходник прикрепляю к письму.

TestRS232.zip

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


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

Наблюдал тоже самое, пришлось переставить IAR поставил 4.11 все нормально.

Я пробовал один и тот же исходник компилировать в 20 версии и в 11 версии, после 20 протеус не принимает прошивку, железо тоже не работает (шью понипрогом МК ATMega16), а после 11 работает все и протеус и железо....

Причину не нашел...

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


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

Для пошаговой отладки по ассемблерному тексту вовсе не обязателно грузить в AVRStudio hex файл.

Достаточно загрузить отладочный файл в формате ubrof8 и открыть окно View/Disassembler.

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


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

Для пошаговой отладки по ассемблерному тексту вовсе не обязателно грузить в AVRStudio hex файл.

Достаточно загрузить отладочный файл в формате ubrof8 и открыть окно View/Disassembler.

 

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

 

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

ubrof 8(forsed) - я подключал в Proteus 6.9.04. Там все работает как и задумывалось по алгоритму программы: на виртуальный терминал выдается строка полностью.

 

Если Вам нетрудно, пожалуйста посмотрите код. Может там что-то нетак. Заранее Вам благодарен. :)

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


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

Посмотрел проект, сразу бросилось следующее:

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. увеличьте размер стека данных для начала вдвое, если заработает и будет нехватка памяти, тогда будете постепенно уменьшать

 

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

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


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

Что касается AVRStudio и hex файлов, то удалось выяснить следующее.

В файле, сгенерированом IARом, вторая снизу строка содержит команду 03

:0400000300000000F9

удалите эту строку и всё пойдёт.

AVRStudio ещё не научилась распознавать эту команду ;)

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


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

Спасибо, Уважаемый IgorKossak ! :) Все сделал по вашим рекомендациям. Окончательно все пошло только тогда, когда убрал строку :0400000300000000F9 в .hex - файле. Программа заработала и AVRStudio и в реальном железе. Только никак немогу понять: в чем собственно суть проблемы ? Кого винить: IAR, который формирует команды которые неизвестны ф. Atmel или Atmel, который незнает что IAR для их контоллеров формирует неподдерживаемые команды.

Уважаемый IgorKossak, откройте пожалуйста секрет "шаманства" с выше упомянутой строкой в файле .hex, дабы избежать в последующем таких неприятных явлений. Буду Вам очень признателен. :)

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


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

Думаю врядли стоит винить IAR в том, что они решили следовать стандарту (Команда 03 означает точку старта программы, в данном случае 0x0000).

Когда я как и Вы впервые столкнулся с подобным сообщением, стал разбираться с форматом intel-hex.

Кстати, нашёл ещё одну вещь - не всякая программа, принимающая hex файл правильно понимает пустые строки.

Как говорится, век живи, век учись.

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


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

Думаю врядли стоит винить IAR в том, что они решили следовать стандарту (Команда 03 означает точку старта программы, в данном случае 0x0000).

Когда я как и Вы впервые столкнулся с подобным сообщением, стал разбираться с форматом intel-hex.

Кстати, нашёл ещё одну вещь - не всякая программа, принимающая hex файл правильно понимает пустые строки.

Как говорится, век живи, век учись.

Хм...интересная получается ситуация. Если программа для программатора не следует стандарту, то получается, что и данные для контроллера шьются неверно. И в итоге имеем такую ситуацию, которая наблюдалась и у меня.

Да совершенно с Вами согласен: "век живи - век учись !"

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

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


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

Неужто все время следует удалять эту строку ?

Для начала следует проверить реакцию программатора на эту строку.

Возможно он её просто проигнорирует. Проверить можно так: записать файл с проблемной строкой, а верифицировать с файлом без оной.

Если не получится, то никуда уже не деться, придётся удалять вручную.

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


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

Cпасибо, IgorKossak, у меня была аналогичная проблема в 4.12 для бегущей строки. все решилось при учете Ваших рекомендаций.

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


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

Ставим в настройках линкера IAR -

Format Variant: 32bit linear without entry point

после этого AVRстудия начинает проглатывать HEX файл из IARa.

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


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

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

 

При программированиии выставить опцию "Use Current Simulator/Emulator FLASH Memmory"

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


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

При программированиии выставить опцию "Use Current Simulator/Emulator FLASH Memmory"

Александр, а где эта опция выставляется? У меня ИАР вер. 3.10А и 4.30А для АВР и нигде не видел её!

как и настройки линкера -- Format Variant: 32bit linear without entry point. -- но это уже не к Вам

С уважением

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


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

Александр, а где эта опция выставляется? У меня ИАР вер. 3.10А и 4.30А для АВР и нигде не видел её!

как и настройки линкера -- Format Variant: 32bit linear without entry point. -- но это уже не к Вам

С уважением

 

Смотрите вложение.

post-14070-1187964715_thumb.jpg

Изменено пользователем Schtirlitz

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


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

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...