Главная  Микроконтроллеры 

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [ 34 ] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93]

Опция Wrap relative jumps - разрешить относительную адресацию переходов. Эта опция полезна для использования с микроконтроллерами, имеющими 4 К слов памяти программ.

Опция Save before assemble - сохранять исходный текст программы каждый раз перед ее ассемблированием.

> Версия ассемблера для командной строки

Одновременно с установкой транслятора ассемблера для Windows, устанавливается версия для работы из командной строки MS-DOS. Эта версия транслятора не имеет никаких ограничений по объему транслируемой программы (т. е., в отличие от версии для Windows, размер файла может быть больше 28 кбайтов).

Вызывается программа следующим образом:

avrasm [-m -i -g] input.asm output.1st output.hex

В результате выполнения программы будет прочитан файл in-put.asm, сгенерирован файл листинга listfile.lst, файл скомпилированного кода для загрузки в память программ микроконтроллера output.hex и объектный файл *.obj, используемый отладчиком.

Назначение ключей программы

m - генерировать файл кода в формате Motorola S-Record;

i - генерировать файл кода в формате Intel HEX;

g - генерировать файл кода в формате Generic.

По умолчанию генерируется файл кода в формате Generic.

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

Формат файлов, генерируемых транслятором ассемблера

Формат Generic

Рассматриваемый транслятор ассемблера может генерировать три различных типа файлов: Generic, Motorola S-Records и Intel HEX.

Рассмотрим один из этих форматов - Generic. Файлы этого формата - текстовые.



Структура файла очень проста. Каждая строка файла имеет вид: Адрес: код операции.

Здесь «Адрес» - 6 цифр (24 бита) шестнадцатеричного числа, и «код операции» - 4 цифры (16 битов) шестнадцатеричного числа. «Адрес» о1феделяет адрес в памяти программ, а «код операции» - содержимое памяти по указанному адресу.

В качестве примера рассмотрим программу на ассемблере:

; Демонстрация фермата Generic mov rO,r1 inc r1 call oursub

.org 0x50 ; Установить адрес в памяти программ на 0x50

oursub: add r1,г2 ret

В результате трансляции этой программы будет получен файл gen demo.rom следующего содержания:

000000:2с01 000001:9413 000002:940е 000003:0050 000050:0с12 000051:9508

Обратите внимание на то, что команды, состоящие из двух слов, размещаются в двух строках файла.

Если в программе был определен сегмент EEPROM, то генерируется файл для прошивки в EEPROM. Расширение этого файла еер. Этот файл всегда генерируется в формате Generic.

Формат объектного файла

Объектный файл содержит отладочную информацию и может быть использован отладчиком для проверки правильности работы программы.

Объектный файл имеет две части: record и trailer. Заголовочная часть имеет следующий формат:

• смещение к исходным именам файлов (4 байта);

• смещение к объектным записям (4 байта);

• число байтов в каждой записи (1 байт);

• число имен файлов во второй части файла (1 байт);

• строку А VR Object File\0 (\0 означает, что строка завершена 0).



Длительность записей составляет 9 байтов каждая. Формат записи:

• адрес памяти программ (3 байта);

• код операции (2 байта);

• номер инструю1ии в исходном файле (1 байт, счет начинается с 0);

• номер строки в исходном файле (2 байта, счет начинается с 1);

• индикатор макроса (1 байт, 1 - если макрос, иначе - 0).

И наконец, trailer часть имеет следующий формат:

• имена файлов (заканчивающиеся на О, число файлов в заголовке);

• ASCII 0.

Для примера рассмотрим программу (файл objdemo.asm):

; Демонстрация объектного формата .equ const1=0x15

.equ const2=0x40 , . . <

macro SWIN swap @0 inc @0 .endmacro

start: Idi r16.const1 SWIN r16 Idi r16.const2 SWIN r16 rjmp start

.include "delay.asm" ; Включение другого файла на ассемблере

Включаемый файл (delay.asm):

delay: dec г16 breq delay ret

После трансляции будет получен объектный файл. Файл - бинарный. Для удобства рассмотрения он был переведен в 16-ричный формат, а столбцы были раздвинуты.

Смещение 00000000 00000004 00000008 00000009 ОООООООА 0000001А 00000023

Содержимое файла (в 16-ричном формате):

00000074 Смещение к именам файлов

0000001А

415652204F626A6563742046696C6500 Строка AOF 000000Е10500000В00 Первая запись 000001950200000С01



[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [ 34 ] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93]

0.13