ράς. Αυτό σημαίνει ότι τα δεδομένα δεν αντιγράφονται από το jsonBuffer στο
jsonObject, αλλά το jsonObject περιέχει αναφορές προς το jsonBuffer σχετικά
με το που μπορεί να βρει το κάθε δεδομένο. Όπου JsonObject είναι η ρίζα του
JSON δέντρου.
avr/pgmspace.h [8]
Οι συναρτήσεις της συγκεκριμένης βιβλιοθήκης παρέχουν διεπαφές για την πρό-
σβαση στα δεδομένα που είναι αποθηκευμένα στη μνήμη flash του Arduino UNO.
Για να χρησιμοποιηθούν αυτές οι συναρτήσεις, η συσκευή πρέπει να υποστηρίζει
τις οδηγίες LPM [21] ή ELPM [14]. Οι συναρτήσεις που χρησιμοποιήθηκαν είναι οι
παρακάτω:
• strnlen_P(const char *, size_t): Επιστρέφει το μήκος ενός string μη μεταβλητού
μεγέθους. Η συνάρτηση strnlen_P() είναι παρόμοια με την strnlen(), με τη
διαφορά ότι το όρισμα της δεν είναι το string καθ’ αυτό, αλλά ένας δείκτης
στη μνήμη flash όπου είναι αποθηκευμένο το string.
• pgm_read_byte_near(address_short): Διαβάζει ένα byte από τη μνήμη flash της
συσκευής και δέχεται σαν όρισμα μία 16-bit διεύθυνση.
avr/wdt.h [9]
H συγκεκριμένη βιβλιοθήκη χρησιμοποιήθηκε για την υλοποίηση του watchdog
του μηχανισμού, ο οποίος επανεκκινεί αυτόματα τη συσκευή εάν αυτή κολλήσει
κατά την εκτέλεση του προγράμματος και τεθεί προσωρινά εκτός φυσιολογικής
λειτουργίας. Οι συναρτήσεις και οι εντολές της βιβλιοθήκης που χρησιμοποιήθηκαν
ακολουθούν παρακάτω:
• wdt_enable(time): Ενεργοποιεί το χρονόμετρο του watchdog, και το προγραμ-
ματίζει να λήξει μετά από μια ορισμένη χρονική στιγμή, όπου και θα πραγμα-
τοποιηθεί η επανεκκίνηση της συσκευής. Όπου time είναι μια σταθερά η οποία
έχει οριστεί στη βιβλιοθήκη του watchdog. Στην παρούσα διπλωματική εργα-
σία επιλέχθηκαν το 8s. Η αντίστοιχη σταθερά για αυτό το χρονικό διάστημα
είναι η WDTO_8S.
• wdt_reset(): Επανεκκινεί το χρονόμετρο του watchdog. Αποτυχία εκτέλεσης
της συνάρτησης αυτής πριν τη λήξη του χρονομέτρου σημαίνει επανεκκίνηση
της συσκευής.
80