AVR Assembler Tutorial 4 (5 / 9 stap)

Stap 5: macro's


Macro's zijn zeer vergelijkbaar met de subroutines die we in de laatste stap, besproken behalve dat zij "argumenten". Met andere woorden, de macro's zijn in wezen "functies." In feite, is het belangrijkste verschil tussen assembler en alle talen "hoger niveau" die gebruiken mensen is dat iemand een bos van vaak gebruikte functies heeft gecompileerd in macro's. Hier zullen we macro's gebruiken om de dezelfde eindigt, met één belangrijk verschil, onze macro's zullen daar in de code voor ons bekijken en aanpassen als we willen.

Onze filosofie in deze tutorials is te ontdoen van alle van de "zwarte dozen" en ontdek wat is achter de schermen gaande er. We willen niet iets gebeuren tenzij we weten en vertelde het om dat te doen. Dat is de reden waarom dit heet "Command Line Assembly Language Programming". We zijn met behulp van de opdrachtregel in plaats van enkele Java gebaseerde IDE zoals de arduino een (in feite, ik gebruik de opdrachtregel zelfs met arduino programmering). Een java ide venster is als een zwarte doos voor mij. Ik kan nooit absoluut zeker dat er geen hypothesen worden achter de schermen bij de communicatie van mijn instructies aan de microcontroller en ik houd niet van die links zijn. Ik houd niet ook hoe opgeblazen en cpu verbruiken van java is. In feite, is dat ook waarom we "avra" gebruikt in plaats van de assembler ATmel IDE. Ik realiseer me dat wanneer u een deskundige coder, of een complete beginner, u al weet bent, of u niet schelen, wat achter de schermen gebeurt er, maar hier zullen we het opofferen van het gemak om zwarte-boxness en vetheid te voorkomen.

Nu wat zijn macro's toch? Nou misschien je hebt gemerkt bij het lezen door middel van het programma dat we de subroutine "vertraging" all over the place gebruiken. Niet alleen van binnen main, maar van binnen andere subroutines ook. Dit leidt tot spaghetti en wij houd niet van spaghetti. (tekenen van de lijnen tussen elke subroutine codeblok in het diagram als één blok roept en u snel zien zult dat de "vertraging" subroutine het diagram veroorzaakt te laten uitzien als een kom met de spaghetti)

Hier is hoe "vertraging" meestal heet:

U ziet dat we eerst de variabele (d.w.z. werkende register) "milliseconden" op de waarde 25 instellen en dan we de subroutine noemen "vertraging". De subroutine zal 25 ms vertragen en vervolgens terug te keren. Naast spaghetti is een ander probleem met deze manier van doen dat als we vergeten de waarde voor milliseconden onmiddellijk voordat we contact opneemt met de subroutine die we hebben geen idee wat de vertraging zal zijn. Welke waarde die we in milliseconden ergens anders zal zijn. Dit is een riskante manier om code te schrijven. Dus om te lossen alle dit gewoon schrijven we een "macro". Hier ' tis:

Het is een assembler richtlijn dat wij op de top van ons programma dat doet dezelfde dingen we in onze vertraging subroutine hadden vertragen, het heet vertraging, maar het belangrijke verschil heeft dat we vaststellen om de variabele "milliseconden" erin! Het symbool (teken nul) staat voor wat we naast vertraging plaats wanneer wij het noemen. Hier is hoe we noemen het dan. Als we een vertraging van 25ms ergens in ons programma wilden schrijven we gewoon

en de assembler vervangt het in de macro met 25 en krijgen we onze vertraging van 25 ms.

Waarom goed kunt u macro's die veel meer argumenten als je wilt hebben schrijven. In dat geval zou u en enzovoort. Dan wanneer u de functie aanroepen zou u moeten leveren alle argumenten die betrekking hebben op deze @ dingen in de macro.

Ik denk dat nu kun je zien hoe ze de opdracht van de Arduino taal "vertraging(20)" gelijk gemaakt?

Oefening 2: een macro toevoegen in het programma en alle van de subroutines wijzigen zodat ze de macro in plaats van een vertraging-subroutine aanroepen. (Let op! In één van de incidenten zal je moet zoeken rond om erachter te komen wat de vertraging wordt verondersteld te worden! Ik opzettelijk weggelaten de ldi milliseconden in dat geval)

Gerelateerde Artikelen

AVR Assembler Tutorial 2

AVR Assembler Tutorial 2

Deze tutorial is een voortzetting van het "AVR Assembler Tutorial 1"Als je niet hebt doorlopen Tutorial 1 moet je nu stoppen en dat men eerst doen.In deze tutorial zullen we onze studie van assembly language programmering van de atmega328p in de
AVR Assembler Tutorial 11

AVR Assembler Tutorial 11

Welkom bij Tutorial 11!In deze korte tutorial, zijn we eindelijk het eerste deel van onze laatste project bouwen.Het eerste wat dat u moet doen is gaat u naar de allerlaatste stap van deze tutorial en Bekijk de video. Dan kom hier terug. [onderbreken
AVR Assembler Tutorial 1

AVR Assembler Tutorial 1

Ik heb besloten om een serie tutorials over hoe te schrijven van assembler programma's voor de Atmega328p die het gebruikt in de Arduino microcontroller is schrijven. Als mensen geïnteresseerd blijven blijft ik stak een een week of zo totdat ik oprak
AVR Assembler Tutorial 6

AVR Assembler Tutorial 6

Welkom bij Tutorial 6!Today's tutorial zullen kort waar zullen we het ontwikkelen van een eenvoudige methode om gegevens tussen een atmega328p en een andere met twee poorten verbinden hen te delen. Wij zullen vervolgens nemen de dobbelstenen rol van
AVR Assembler Tutorial 8

AVR Assembler Tutorial 8

Welkom bij Tutorial 8!In deze korte tutorial gaan we een beetje een afleiding van de invoering van nieuwe aspecten van assembly language programmering te laten zien hoe onze prototyping componenten verplaatsen naar een aparte "gedrukt" printplaa
AVR Assembler Tutorial 9

AVR Assembler Tutorial 9

Welkom bij Tutorial 9.Vandaag zullen wij tonen hoe de controle van zowel een 7-segment display en een 4-cijferige weergave met behulp van onze ATmega328P en AVR assembler code. In de loop doen die we nemen van omleidingen moeten zal op how to use van
AVR Assembler Tutorial 7

AVR Assembler Tutorial 7

Welkom bij Tutorial 7!Vandaag gaan we naar eerste show hoe opruimen van een toetsenbord, en vervolgens laten zien hoe de analoge input poorten gebruiken om te communiceren met het toetsenblok.We zullen dit doen met behulp van interrupts en een enkele
AVR Assembler Tutorial 10

AVR Assembler Tutorial 10

Welkom bij Tutorial 10!Sorry dat het zo lang duurde om deze volgende aflevering eruit maar dit is een behoorlijk hectische tijd van het jaar. In ieder geval, is hier het!We hebben een lange weg afgelegd en u bent waarschijnlijk al bekwaam genoeg is o
AVR Assembler Tutorial 5

AVR Assembler Tutorial 5

Vandaag gaan we nemen een kijkje op de verschillende geheugenlocaties in de Atmega328p microcontroller en zien als we beter begrijpen kunnen hoe de dingen worden opgeslagen, waar ze worden opgeslagen en hoe de pointers en opzoektabellen werken.De tut
AVR Assembler Tutorial 3

AVR Assembler Tutorial 3

Welkom op tutorial nummer 3!Voordat we beginnen wil ik een filosofische opmerking maken. Wees niet bang om te experimenteren met de circuits en de code die we proberen op te in deze tutorials bouwen. Draden rond wijzigen, nieuwe onderdelen toe te voe
Een geavanceerde benadering van programmering van Arduino & AVR

Een geavanceerde benadering van programmering van Arduino & AVR

Dit instructable is een must read voor iedereen die vertrouwd is met core AVR chips en Arduino.Nou, om meer specifieke, bij het lezen van de instructable, zal u zitten kundig voor:1) weten het juiste verschil tussen AVR en Arduino.2) programmering Ar
Programmeerbare LED

Programmeerbare LED

geïnspireerd door diverse LED Throwies, knipperende LEDs en soortgelijke instructables ik wilde doen van mijn versie van een LED aangestuurd door een microcontroller.Het idee is om de LED knipperende reeks Herprogrammeerbare. Deze herprogrammering ka
De generator van willekeurige golfvorm, voor ~ 20$

De generator van willekeurige golfvorm, voor ~ 20$

een willekeurige golfvorm generator (AWG) is een nuttige maar vaak duur stuk van testapparatuur (ebay voor lacht). Gebruiken om te bepalen component frequentiebereik, genereren van vervoerder signalen, als een LCR-meter als u een bereik, tune resonan
Star Trek deurbel Hack

Star Trek deurbel Hack

Ik heb altijd al een fan van de Star Treks en als zodanig ik was erg opgewonden toen mijn kamergenoot bracht het huis van een originele serie stijl Star Trek comm panel. Ik had nog nooit gezien een van deze, maar een snelle zoektocht nam ons mee naar