Разборки с 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" при настройке опций проекта): Вуаля! Теперь в папке проекта Debug\Exe будет появляться файл с названием проекта и расширением a51 - это и есть наш бинарник (в той же папке еще лежит файл для отладки *.d51). 7. Что плохо в IAR Embedded Workbench IDE - не очень удобно работать с Project\Options...\категория Build Actions. Например, я пытался таким образом сравнивать эталонный бинарник с получающимся после компиляции, и мне мешало 2 глюка: Выход в моей ситуации только в поиске 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 - плохо сделана эмуляция работы таймера и прерываний. |