Λειτουργικά συστήματα
Τα ενσωματωμένα συστήματα συχνά δεν χρειάζονται πλήρες λειτουργικό σύστημα. Ορισμένα χρησιμοποιούν ειδικά κατασκευασμένα μικρά και απλά λειτουργικά συστήματα που ξεκινούν πολύ γρήγορα, ενώ άλλα δεν χρειάζονται καθόλου. Τα ενσωματωμένα συστήματα δεν προσαρμόζονται τόσο εύκολα, αλλά είναι κατασκευασμένα για να εκτελούν τα καθήκοντά τους πολύ πιο αξιόπιστα. Επειδή το υλικό είναι απλούστερο, είναι επίσης συχνά φθηνότερο στην κατασκευή και τρέχει ταχύτερα.
Σε αντίθεση με αυτό, ένας υπολογιστής γενικής χρήσης πρέπει να είναι έτοιμος για νέα προγράμματα οδήγησης συσκευών και λογισμικό για την εκτέλεση υλικού που δεν γνωρίζει ακόμη, όπως νέοι εκτυπωτές ή σκληροί δίσκοι. Πρέπει να εκτελεί διαφορετικά προγράμματα εφαρμογών.
Καθώς τα ενσωματωμένα συστήματα γίνονται μεγαλύτερα, πράγματα που χρησιμοποιούνταν μόνο σε υπολογιστές γενικής χρήσης ή ακόμη και σε κεντρικούς υπολογιστές γίνονται πλέον κοινά στα ενσωματωμένα συστήματα. Αυτό περιλαμβάνει προστατευμένο χώρο μνήμης και ανοικτό περιβάλλον προγραμματισμού, συμπεριλαμβανομένων των Linux, NetBSD κ.λπ.
Μερικά παραδείγματα λειτουργικών συστημάτων, από απλά έως σύνθετα:
- Απλός βρόχος ελέγχου - Ένας χρονοδιακόπτης και ένας βρόχος χρησιμοποιούνται για την επανειλημμένη κλήση διαφορετικών υποπρογραμμάτων. Αυτό γίνεται συχνά από ένα άτομο για μικρότερα συστήματα.
- ελεγχόμενη διακοπή - Οι εργασίες ξεκινούν από διαφορετικά είδη συμβάντων. Το συμβάν μπορεί να είναι κάτι χρονομετρημένο (κάθε δέκα δευτερόλεπτα, για παράδειγμα) ή από το πάτημα ενός κουμπιού ή από δεδομένα που λαμβάνονται.
- nonpreemptive multitasking - Κάθε εργασία παίρνει τη σειρά της να εκτελεστεί, και όταν τελειώσει καλεί έναν χρονοπρογραμματιστή στο λειτουργικό σύστημα για να εκτελέσει την επόμενη εργασία.
- preemptive multitasking ή multi-threading - Μια εργασία μπορεί να σταματήσει μετά από κάποιο χρονικό διάστημα για να αφήσει μια άλλη εργασία να εκτελεστεί για λίγο. Καμία εργασία δεν μπορεί να καταλαμβάνει το σύστημα. Σε αυτό το επίπεδο το σύστημα θεωρείται ότι διαθέτει πυρήνα "λειτουργικού συστήματος" και μπορεί να εκτελεί εργασίες παράλληλα. Αυτός ο τύπος λειτουργικού συστήματος αγοράζεται συνήθως από μια εταιρεία που ασχολείται μόνο με ενσωματωμένα λειτουργικά συστήματα.
Τα λειτουργικά συστήματα πραγματικού χρόνου περιλαμβάνουν προϊόντα όπως τα MicroC/OS-II, Green Hills INTEGRITY, QNX ή VxWorks. Σε αντίθεση με το MacOS ή τα Windows 7, αυτά τα λειτουργικά συστήματα δεν είναι πολύ γνωστά στους περισσότερους ανθρώπους. Χρησιμοποιούνται όμως σε πολλά μέρη όπου ο χρόνος και η ασφάλεια είναι πολύ σημαντικά. Οι άνθρωποι τα χρησιμοποιούν καθημερινά και δεν το συνειδητοποιούν.
Συνήθη παραδείγματα μεγαλύτερων πυρήνων είναι το Embedded Linux και τα Windows CE. Παρόλο που αυτοί δεν έχουν τα στενά χρονικά όρια που απαιτούνται για ένα αυστηρό σύστημα πραγματικού χρόνου, γίνονται όλο και πιο συνηθισμένοι, ειδικά για πιο ισχυρές συσκευές όπως οι ασύρματοι δρομολογητές και τα GPS. Επιτρέπουν την επαναχρησιμοποίηση κώδικα που βρίσκεται στο δημόσιο τομέα για οδηγούς συσκευών, διακομιστές ιστού, τείχη προστασίας και άλλο κώδικα. Οι προγραμματιστές λογισμικού που είναι πιο άνετοι στη συγγραφή εφαρμογών για PC θα το βρουν επίσης πιο οικείο. Εάν χρειάζεται, ένα FPGA ή άλλο ειδικό υλικό μπορεί να χρησιμοποιηθεί για πράγματα που χρειάζονται αυστηρά χρονικά όρια.
Εργαλεία
Όπως και σε άλλα λογισμικά, οι σχεδιαστές ενσωματωμένων συστημάτων χρησιμοποιούν μεταγλωττιστές, συναρμολογητές και αποσφαλμάτωση για την ανάπτυξη λογισμικού ενσωματωμένων συστημάτων. Ωστόσο, μπορεί επίσης να χρησιμοποιούν κάποια πιο ειδικά εργαλεία:
- Για συστήματα που χρησιμοποιούν ψηφιακή επεξεργασία σήματος, οι προγραμματιστές μπορούν να χρησιμοποιήσουν μαθηματικά εργαλεία όπως το MATLAB, το MathCad ή το Mathematica.
- Μπορούν να χρησιμοποιηθούν προσαρμοσμένοι μεταγλωττιστές και σύνδεσμοι για τη βελτίωση της βελτιστοποίησης για το συγκεκριμένο υλικό.
- Ένα ενσωματωμένο σύστημα μπορεί να έχει τη δική του ειδική γλώσσα ή το δικό του εργαλείο σχεδίασης ή να προσθέσει βελτιώσεις σε μια υπάρχουσα γλώσσα, όπως αυτή που χρησιμοποιείται από τη Basic Stamp.
Εργαλεία εντοπισμού σφαλμάτων:
- Ένας αποσφαλματωτής κυκλώματος (ICD), μια συσκευή υλικού που συνδέεται στον μικροεπεξεργαστή μέσω μιας διεπαφής JTAG. Αυτό εκκινεί και σταματά τον μικροεπεξεργαστή από έξω καθώς εκτελεί το λογισμικό. Επιτρέπει επίσης την ανάγνωση της μνήμης και των καταχωρητών και την αποθήκευση του προγράμματος λογισμικού στη μνήμη.
- Εξωτερική αποσφαλμάτωση με χρήση καταγραφής ή εξόδου σειριακής θύρας για την ανίχνευση της λειτουργίας με χρήση είτε μιας οθόνης αναβοσβήνει (printfs).
- Διαδραστικός εντοπισμός σφαλμάτων - εάν το λειτουργικό σύστημα το υποστηρίζει, πρόκειται για ένα κέλυφος στον ενσωματωμένο επεξεργαστή που εκτελεί εντολές που πληκτρολογούνται από τον προγραμματιστή (Linux, για παράδειγμα).
- Ένας εξομοιωτής εντός κυκλώματος αντικαθιστά τον μικροεπεξεργαστή στην πλακέτα, παρέχοντας πλήρη έλεγχο όλων όσων θα μπορούσε να κάνει ο μικροεπεξεργαστής.
- Ένας πλήρης εξομοιωτής προσομοιώνει όλα τα χαρακτηριστικά του υλικού, επιτρέποντας τον έλεγχο και την τροποποίησή του. Το υλικό δεν υπάρχει στην πραγματικότητα, αλλά μια εικονική εκδοχή του (μια "εικονική" μηχανή) βρίσκεται σε έναν κανονικό υπολογιστή.
- Έλεγχος εξωτερικών γραμμών με λογικό αναλυτή ή πολύμετρο.
Εκτός αν περιορίζεται σε εξωτερική αποσφαλμάτωση, ο προγραμματιστής μπορεί συνήθως να φορτώσει και να εκτελέσει λογισμικό μέσω των εργαλείων, να δει τον κώδικα που εκτελείται στον επεξεργαστή και να ξεκινήσει ή να σταματήσει τη λειτουργία του. Η προβολή του κώδικα μπορεί να είναι ως κώδικας συναρμολόγησης ή ως πηγαίος κώδικας. Ορισμένα ολοκληρωμένα συστήματα (όπως το VxWorks ή το Green Hills) διαθέτουν ειδικά χαρακτηριστικά, όπως η παρακολούθηση του πόσο χώρο καταλαμβάνει το λογισμικό καθώς εκτελείται, ποιες εργασίες εκτελούνται και πότε συμβαίνουν τα πράγματα.
Ανάλογα με το είδος του ενσωματωμένου συστήματος που κατασκευάζεται θα επηρεάσει τον τρόπο με τον οποίο μπορεί να γίνει η αποσφαλμάτωση. Για παράδειγμα, η αποσφαλμάτωση ενός συστήματος με έναν μόνο μικροεπεξεργαστή είναι διαφορετική από την αποσφαλμάτωση ενός συστήματος όπου η επεξεργασία γίνεται και σε ένα περιφερειακό (DSP, FPGA, συνεπεξεργαστής).