Stap 9: BLINKIE één-betekenis van de verklaringen van de codering
De referenties bieden sommige zeer goede boeken en artikelen voor het leren van C en C++ voor de Atmel MCUs [5-8, 11]. De items onder in wezen dezelfde volgorde als in de Binky één programma gevonden.
#include: een compiler-richtlijn tot opneming van een headerbestand in de code met de opgegeven functies en methoden. Allermeest naar de header-bestanden kunnen worden bekeken door het plaatsen van de muiscursor over de naam en rechts te klikken en te selecteren "Ga naar uitvoering".
AVR/io.h: bestaat uit andere headerbestanden (dat wil zeggen, de uitbreidingen van .h) voor de specifieke MCU [17]. De headerbestanden Neem zoekwoorden zoals DDRB, PORTB, PB0, TIMSK en TCNT0. Blijkbaar worden niet io.h weergegeven met de 'Ga naar uitvoering"beschreven in punt 1 hierboven.
util/delay.h: methoden voor het vertragen van de uitvoering van het programma. Bevat een milliseconden van de vertraging en een andere voor microseconden.
#define x y: A compiler richtlijn te vervangen door de tekst y wanneer de tekst x is ontmoeting in het programma. Vaak worden de compiler definities gehanteerd zodat het programma kan gemakkelijk worden gewijzigd zonder het zoeken door de gehele code voor alle plaatsen te wijzigen van een parameter wanneer nodig.
#define F_CPU 8000000UL: de compiler 8000000UL voor de tekst 'F_CPU' als aangetroffen in de code worden vervangen. Opmerking: het headerbestand delay.h vereist de F_CPU vóór het importeren van delay.h aangezien het delay.h bestand de F_CPU gebruikt bepaald worden. De 8000000UL verwijst naar de kloksnelheid. In ons geval gebruiken we 8MHz geselecteerd door de zekeringen. F_CPU van de 16000000 zou echter juist voor een 16MHz kristal bijvoorbeeld. De UL aan het eind verwijst naar ' lang ' geheel getal zonder voorteken.
int main(void): main is een functie die elk C- en C++-programma moet nemen. De uitvoering van het programma begint bij de 'main' functie. Het sleutelwoord 'int' geeft aan dat 'main' integer (16bits) kan terugkeren. Functies hebben argumenten in haakjes (). In dit geval 'nietig' geeft aan dat de functie maakt geen gebruik van een parameter. Als we hadden het trefwoord void voorafgaand aan de naam van de functie zoals bijvoorbeeld in 'ongeldig main(void)' dan zou de functie retourneert geen waarde - het zou een subroutine.
Accolades {}: Het bereik van de code bepalen van de functie 'hoofd' is ingesloten in {}. In feite, de meeste C en C++ codering structuren (bijvoorbeeld 'Schakel' en 'als') gebruik accolades {} om aan te geven van hun toepassingsgebied. Zorg ervoor dat deze op te nemen!
Puntkomma's: De verklaringen van de codering wordt afgesloten met het ";". De verklaring kan lopen over verschillende tekstregels zo nodig.
_delay_ms(x): een methode (dat wil zeggen, functie) die is gedefinieerd in delay.h dat vertraging van de uitvoering van het programma door x milliseconden. In ons geval, x = 1000 en dus de vertraging is 1000mS dat 1 seconde is. Merken tha de haakjes surround de parameter x.
DDRB = 0b00000001: Data richting Register voor poort B. B0 zal een vermogen en de rest zal ingangen. Voor de ATTiny 2313A is de B0 Pin12.
PORTB = 0b1: Sets B0 op 1 wat zich naar Vcc op de fysieke vertaalt pin (12) overeenkomt met B0. Een eenvoudiger manier om te schrijven deze verklaring is PORTB = 1; of PORTB = 0x01;
PORTB = 0X00; B0 ingesteld op 0, wat zich naar 0v vertaalt op het fysieke pin (12) dat overeenkomt met B0. Dit kan ook geschreven worden als PORTB = 0;
while(x): de MCU zal het uitvoeren van de verklaringen van de tussen de daaropvolgende twee overeenkomt accolades {} zo lang als de instructie x geldt. De x konden ondervragen of twee variabelen een en b zijn gelijke zoals een == b (Let op de dubbele gelijken). In ons geval willen we de LED continu knipperen dus de instructies tussen de accolades moeten continu uitvoeren. Kunnen we schrijven ' while(true == true)' waar '==' is de operator van de C/C++ controleren logisch gelijkheid (een enkele '=' betekent iets toewijzen aan een variabele zoals z = 3). De instructie 'while(true==true)' zou de oneindige lus veroorzaken dat wij sinds 'true willen' is altijd true. In ons geval is 1 een 'echte' genomen. Zo zal 'while(1)' het oneindige lus veroorzaken, omdat dit de korte besnoeiing voor het schrijven van 'while (true)' dat een snelkoppeling is voor het schrijven van 'while(true=true)'.