Stap 4: Subroutines
Iets dat u onmiddellijk over de manier waarop ik schrijf code kan worden gezien opmerken zult door te kijken naar het gedeelte achter het label "belangrijkste:"
Merk op dat alles is opgenomen tussen het label "belangrijkste:" bij de bovenkant en de "rjmp belangrijkste" onderaan. Dit betekent dat er zit niet vlucht uit deze sectie anders dan via de verklaringen van de "rcall" binnen. Neem nu een kijkje op een van de verklaringen van de rcall, "rcall button_push" dit ons springt naar de sectie onder het label "button_push"
U ziet dat deze sectie ook deel tussen een label uitmaakt en een 'ret' zodat de PC ook in hier ook gevangen is. Deze sectie van code heet een "subroutine" aangezien ik noem het uit het belangrijkste blok, wordt een taak uitgevoerd en vervolgens het "terug" naar belangrijkste op de plaats waar hij werd genoemd. Dus met behulp van subroutines uitzien, kunt u afdekken van de code in brokken die bepaalde taken uitvoeren en vervolgens terugkeren naar waar zij werden genoemd. De voordelen van deze manier codering zijn als volgt:
- u als u merkt dat u dezelfde taak uitvoert meerdere malen kunt gewoon de subroutine plaats hebben dezelfde set opdrachten herhaald over en voorbij. Het resultaat is een korter programma dat het zelfde ding doet.
- het is veel gemakkelijker te lezen van het programma en erachter te komen wat het doet in tegenstelling tot de "spaghetti-code" dat sommige mensen waar alles is één lang stuk dat springt schrijven rond heen en weer, heen en weer, overal tot een persoon nodig een kruik van whiskey zit naast hem heeft, bij het lezen van het te wenden uit de krankzinnigheid.
- het is manier makkelijker te debuggen! Als uw programma niet werkt en je geen idee waarom hebt (wat meestal het geval bij het schrijven in assembler) kunt u gemakkelijk doen sommige speurwerk en isoleren van de aangooi naar één van de subroutines en vervolgens het uitzoeken vanaf daar. Het resultaat is uren van tijd bewaard.
Zo zult u zien dat ik gebruik subroutines "routinematig" in mijn programma's ;)
Oefening 1: onderzoeken van de subroutine die ik gebruik de waarden wilt weergeven op de dobbelstenen door verlichting van verschillende LEDs. U zult zien dat ik ben eigenlijk flipping heen en weer vanaf één dobbelsteen naar de andere. Als u de vertragingen in de subroutine "weergeven" ziet u deze flikkeren. Het feit dat het oog niet zien flikkert die te snel kan ik aan de macht van twee LED's van de dezelfde draad en gewoon flip heen en weer echt snel, zodat het oog ze ziet zowel als op de hele tijd. Op die manier in plaats van een uitvoerpoort nodig voor elke LED (dus een totaal van 16 inclusief de 0V en de 5V-poorten) hoeven we alleen 9. Kun je denken aan een betere manier om dit te doen zodat we niet hoeven te 7 van onze havens voor het aandrijven van deze dobbelstenen gebruiken? Hoe zit het met "Charlieplexing the LEDs" zoals ik deed in mijn "instructable" over Charlieplexing? ( Dat zou de moeite waard op de lange termijn met slechts 14 LEDs?
Het volgende wat dat we gaan gebruiken is "Macro's".