Главная arrow Программирование arrow MSC51 arrow Разборки с IAR Embedded Workbench IDE, проект ASM Friday, July 21 2017  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:

Разборки с IAR Embedded Workbench IDE, проект ASM Версия для печати
Написал microsin   
26.11.2006

1. Нужно обязательно в начале файла включить заголовочный файл, который отвечает за тип процессора, например:
#include <iotusb3410.h>
       RSEG   RCODE
       ORG    0H
...
   Для того, чтобы распознавались битовые мнемоники, например, EX1, TF0 и т. д., нужно создать свой заголовочный файл в каталоге проекта, например, mybits.h, и наполнить его таким содержимым:
IT1    DEFINE 08Ah
TR0    DEFINE 08Ch
TF0    DEFINE 08Dh
EX0DEFINE0A8h
ET0DEFINE0A9h
EX1DEFINE0AAh
EA     DEFINE0AFh
PX1    DEFINE0BAh
   После этого его нужно добавить в основной текст программы на ассемблере:
#include <iotusb3410.h>
#include "mybits.h"
...

2. Добавить в список горячих клавиш Ctrl+Insert и Shift+Insert - меню Tools\Options, закладка Key Bindings, в выпадающем списке Category выбрать Edit, добавить к командам Copy и Paste алиасы Ctrl+Insert и Shift+Insert.

3. Чтобы избежать ошибки линкера e46 ("Undefined external '__program_start' referred in module ?ABS_ENTRY_MOD()"), нужно сделать следующее (кто бы мог подумать, нашел в совершенно случайно в help-е "8051 IAR Embedded Workbench", раздел IDE reference\Linker options\Config, топик "Override default program entry". Не пытайтесь найти в help-e слово __program_start, все равно не найдете - оно там даже ошибочно указано как __prgram_start) - меню Project\Options...\Категория Linker, закладка Config, поставить галку на Override default program entry, радиокнопку переключить на Defined by application.

4. Славный глюк ассемблера a8051.exe (версия IAR 8051 Assembler V7.20A/W32) - этот товарищ не переносит слеш (\) в комментарии и позорно вываливается с сообщением об ошибке "Инструкция по адресу '0x00402daa' обратилась к памяти по адресу '0x00000004'. Память не может быть 'read'", а IDE при этом говорит "Fatal Error[c0000005]: Uncontrolled termination ". Насколько я понял, слеш IDE от IAR воспринимает как продолжение строки, а у ассемблера от слеша съезжает крыша. Уберите слеш, и все будет в порядке.

5. Чтобы не было проблем с кодировкой в IDE от IAR, нужно использовать в загружаемых файлах и при вставке из буфера обмена кодировку Windows 1251 или ANSI (не OEM, иначе называемую ASCII или "старая DOS-кодировка").

6. Как заставить IDE генерить бинарные файлы (предполагаем, что до сего момента были заводские установки, которые восстанавливаются нажатием кнопы "Factory Settings" при настройке опций проекта):
- Project\Options...\категория Linker, на закладке Output в области Format ставим галку Allow C-SPY-specific extra output file
- идем на закладку Extra Output, теперь там можно поставить галку Generate extra output file. На этой же закладке в области формат выбираем Output format из выпадающего списка raw-binary.

Вуаля! Теперь в папке проекта Debug\Exe будет появляться файл с названием проекта и расширением a51 - это и есть наш бинарник (в той же папке еще лежит файл для отладки *.d51).

7. Что плохо в IAR Embedded Workbench IDE - не очень удобно работать с Project\Options...\категория Build Actions. Например, я пытался таким образом сравнивать эталонный бинарник с получающимся после компиляции, и мне мешало 2 глюка:
- результат работы консоли с запускаемой fc не видно и этот вывод не перехватить (по крайней мере, я не разобрался, как это сделать). Кроме того, отсутствует интерактивность такого окна - нельзя применить команду pause для просмотра результатов.
- перенаправление вывода в файл внутри запускаемого батника через Post-Build Command Line почему-то не всегда работало.
- нет макропеременных, например, для названия файла компилируемого проекта, при использовании Post-Build Command Line.

Выход в моей ситуации только в поиске GUI-версии программы fc, написании такой программы самому, или в написании vbs-скрипта, который будет сравнивать файлы, и бикать, если файлы одинаковые, или выдавать листинг различий в противном случае. В результате пришлось так и поступить - написал консольную прогу fcomp, которая может выдавать GUI-сообщение об ошибке. В случае ошибки, кроме этого окна, программа выдавала код возврата 1, а если все в порядке - просто бикала и выдавала код возврата 0. В этом случае интеграция с IDE получилась идеальной - оказалось, что IDE анализирует код возврата приложения, запускаемого из Post-Build Command Line, и если оно возвратило не 0, то выдается сообщение об ошибке в окошке Build.

8. Что плохо в IAR Embedded Workbench IDE - среда заточена под отладку c-программ, а переменные и регистры ассемблерной проги я не разобрался, как выводить в окно Watch. Не понял также, как просматривать содержимое флагов (битов регистров 20h..3Fh).

9. Что плохо в IAR Embedded Workbench IDE - плохо сделана эмуляция работы таймера и прерываний.

Последнее обновление ( 11.12.2009 )
 

Комментарии  

  1. #3 Дмитрий
    2014-09-0811:43:25 Огромное спасибо! Ваша статейка многим помогла.
  2. #2 r9ft
    2011-03-2318:04:15 CTRL-insert / shift-insert это дааааа … спасибо!
  3. #1 barbarella
    2010-08-2613:42:30 спасибо чувак!

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2017