Разборки с IAR Embedded Workbench IDE, проект ASM Печать
Добавил(а) microsin   

Описание решения некоторых проблем при использовании языка ассемблера MCS51.

1. Нужно обязательно в начале файла включить заголовочный файл, который отвечает за тип процессора, например:

#include < iotusb3410.h >
       RSEG   RCODE 
       ORG    0H
...

Для того, чтобы распознавались битовые мнемоники, например, EX1, TF0 и т. д., нужно создать свой заголовочный файл в каталоге проекта, например, mybits.h, и наполнить его таким содержимым:

IT1    DEFINE 08Ah
TR0    DEFINE 08Ch
TF0    DEFINE 08Dh
EX0    DEFINE 0A8h
ET0    DEFINE 0A9h
EX1    DEFINE 0AAh
EA     DEFINE 0AFh
PX1    DEFINE 0BAh

После этого его нужно добавить в основной текст программы на ассемблере:

#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 - плохо сделана эмуляция работы таймера и прерываний.