Makro ist ein Satz von Befehlen und Anweisungen, die in einem einzigen Befehl zusammengefasst sind, um Programmieraufgaben zu automatisieren und häufig durchgeführte Bearbeitungs- und Formatierungsaktionen zu beschleunigen.
Auch Makros können verwendet werden, um die Entwicklung von Software für Mikrocontroller in der Programmiersprache Assembler zu beschleunigen. Während der Kompilierung werden Makros durch Sequenzen von Mikrocontroller-Befehlen ersetzt. Dieser Programmieransatz erleichtert die Wahrnehmung des Programmcodes, reduziert die Größe des Quellcodes und bringt auch die Assembler Programmierung näher an die C Programmiersprache.
Makroaufnahme
Ein Makro in der Programmiersprache Assembler besteht aus folgenden Teilen:
- .Makro - die Direktive des Makroanfangs, nach der Deklaration des Makros wird der Name dieses Makros in derselben Zeile deklariert;
- .Endm - Direktive zum Beenden des Makros;
- @ 0 - variabler Eintrag;
- Makrokörper .
Das Aufzeichnen eines Makros für einen AVR-Mikrocontroller könnte so aussehen:
; Макрос вывода в порт или регистр порта .macro outi ; Директива макроса с объявлением имени макроса ldi r16, @1 ; Установка значения в регистр out @0, R16 ; Вывод данных в порт или регистр порта .endm ; Окончание макроса
Die Anwendung dieses Makros sieht so aus:
outi DDRB, 0b01111111 ; Инициализация вывода столбцов развертки индикации outi DDRC, 0b00111111 ; Инициализация вывода строк развертки индикации outi DDRD, 0b00000001 ; Инициализация вывода для активации сигнала будильника outi PORTD, 0b11111111 ; Инициализация PD1 - PD7 в режиме PullUp
In diesem Fall wird Macro mit seinem eigenen Namen aufgerufen outi An erster Stelle @ 0 ist das DDRB-Register, und an zweiter Stelle @ 1 ist die Variable * 0b01111111 * , die in dieses Register geschrieben wird. Das heißt, die Anwendung des Makros sieht so aus:
outi @0, @1, @2 ... @N
Beim Kompilieren des Programmcodes ersetzt der Präprozessor Daten in das Makro und kapselt sie in den Programmcode ein. Ein Makro ähnelt in diesem Fall einer Funktion oder einem Unterprogramm, das durch den rcall -Befehl (oder andere) aufgerufen wird, mit dem Unterschied, dass die durch den rcall -Befehl aufgerufenen Unterprogramme in der Mikrocontroller-Firmware vorhanden sein können in einer einzigen Kopie, während das Makro nur bequem durch Einfügen des Programmcodes in den Quellcode erfolgt und dementsprechend zu einer erheblichen Vergrößerung der Mikrocontroller-Firmware führen kann. Während die Verwendung von Unterprogrammen keinen solchen Anstieg der Firmware verursacht, aber mit ihrer Verwendung andere Probleme gelöst werden müssen, beispielsweise die begrenzte Aufrufbreite des rcall-Befehls im Speicher des Mikrocontrollers und dementsprechend die Bildung von Inseln von Übergang von einem Bereich des Speichers des Mikrocontrollers in einen anderen, was zur Komplikation des Programmcodes führen kann.