Το volatile (ασταθής) είναι μια λέξη-κλειδί γνωστή ως προσδιορισμός μεταβλητής. Χρησιμοποιείται συνήθως πριν από το τύπο δεδομένων μιας μεταβλητής, για να τροποποιήσει τον τρόπο με τον οποίο ο μεταγλωττιστής και μετέπειτα το πρόγραμμα αντιμετωπίζουν την μεταβλητή.

Η δήλωση μιας ασταθής μεταβλητής αποτελεί μια οδηγία προς τον μεταγλωττιστή. Ο μεταγλωττιστής είναι λογισμικό το οποίο μεταφράζει τον C / C ++ κώδικά σας σε κώδικα μηχανής, που είναι οι πραγματικές οδηγίες για το τσιπ Atmega στο Arduino.

Συγκεκριμένα, κατευθύνει τον μεταγλωττιστή να φορτώσει τη μεταβλητή από τη μνήμη RAM και όχι από έναν καταχωρητή αποθήκευσης, η οποία είναι μια προσωρινή θέση μνήμης όπου αποθηκεύονται και χειρίζονται οι μεταβλητές του προγράμματος. Υπό ορισμένες συνθήκες, η τιμή της αποθηκευμένης μεταβλητής στους καταχωρητές μπορεί να είναι ανακριβής.

Μια μεταβλητή πρέπει να δηλωθεί ως ασταθής, κάθε φορά που η τιμή της μπορεί να αλλάξει με κάτι πέρα από τον έλεγχο του τμήματος κώδικα στον οποίο εμφανίζεται, όπως ένα νήμα ταυτόχρονης εκτέλεσης. Στο Arduino, το μόνο μέρος που αυτό είναι πιθανό να συμβεί, είναι σε τμήματα κώδικα που σχετίζεται με τις διακοπές, το οποίο ονομάζεται ρουτίνα διακοπής υπηρεσίας.

Παράδειγμα

// toggles LED when interrupt pin changes state

int pin = 13;
volatile int state = LOW;

void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}

void loop()
{
  digitalWrite(pin, state);
}

void blink()
{
  state = !state;
}

Επιστροφή στην σελίδα Παραπομπές Γλώσσας