Λογότυπο Zephyrnet

Δημιουργία μιας οθόνης εκκίνησης ιατρικής συσκευής για QNX

Ημερομηνία:

Οθόνη εκκίνησης ιατρικής συσκευής QNX

Οι περισσότερες, αν όχι όλες οι κύριες συσκευές (συμπεριλαμβανομένων των ιατρικών συσκευών) σε όλο τον κόσμο έχουν κάποια μορφή οθόνης εκκίνησης. Αυτό το συχνά φανταχτερό αλλά μερικές φορές απλό κινούμενο σχέδιο έχει δύο σκοπούς. Το ένα είναι απλώς ότι φαίνεται καλό, καθώς και οι εταιρείες μπορούν να εξατομικεύσουν και να προσθέσουν την επωνυμία τους σε αυτό. Αλλά ο δεύτερος λόγος είναι αναμφισβήτητα πιο σημαντικός. ενημερώνει τον χρήστη ότι η συσκευή λειτουργεί και βρίσκεται ακόμη στη φάση εκκίνησης.
Αυτό το ιστολόγιο θα γίνει πολύ τεχνικό καθώς περιγράφει πώς να σχεδιάσετε και να δημιουργήσετε μια οθόνη εκκίνησης.

Συγκεκριμένα, το ιστολόγιο μοιράζεται συμβουλές για την αντιμετώπιση των παγίδων και των επιπλοκών που συνεπάγεται ο σχεδιασμός μιας οθόνης εκκίνησης για το συμβατό με POSIX Λειτουργικό Σύστημα (OS), QNX. QNX είναι ένα λειτουργικό σύστημα μικροπυρήνων που έχει σχεδιαστεί για να λειτουργεί σε ενσωματωμένα συστήματα και πιο συγκεκριμένα, κρίσιμο υλικό για την ασφάλεια. Για να σας βοηθήσουμε με τις τεχνικές λεπτομέρειες, οι παραπομπές στην τεκμηρίωση του QNX περιλαμβάνονται για περαιτέρω διευκρίνιση.

Καθορισμός του QNX του OS Build File

Το πρώτο βήμα για τον σχεδιασμό μιας οθόνης εκκίνησης είναι να ρυθμίσετε το QNX για να διασφαλίσετε ότι η οθόνη εκκίνησης θα εμφανιστεί το συντομότερο δυνατό στη σειρά εκκίνησης. Για να χρησιμοποιήσετε το QNX, ένας προγραμματιστής θα πρέπει να ορίσει ένα αρχείο κατασκευής λειτουργικού συστήματος που ουσιαστικά θα περιγράφει ποια προγράμματα οδήγησης, εφαρμογές και άλλα εξωτερικά αρχεία πρέπει να συμπεριληφθούν στην εικόνα του λειτουργικού συστήματος. Αυτή η εικόνα του λειτουργικού συστήματος θα αναβοσβήσει στη συνέχεια στο σύστημα προορισμού και θα ελέγξει ποιες εφαρμογές και προγράμματα οδήγησης ξεκινούν κατά την εκκίνηση. Το QNX διαθέτει ένα σύστημα γραφικών γνωστό ως το Υποσύστημα οθόνης. Θα χρησιμοποιηθεί για την απόδοση της εικόνας σε μια συγκεκριμένη οθόνη συνδεδεμένη στο υλικό. Αυτό θα πρέπει να ξεκινήσει το συντομότερο δυνατό κατά τη διάρκεια της σειράς εκκίνησης. Η ακολουθία εκκίνησης ορίζεται στο αρχείο κατασκευής ως ετικέτα σεναρίου που θα μοιάζει με:

[+script] .script={}

με οποιεσδήποτε καθορισμένες γραμμές στο εσωτερικό των στηρίξεων που λειτουργούν σαν σενάριο κελύφους. Εδώ πρέπει να ξεκινήσει το υποσύστημα Screen.

Η εντολή για την εκκίνηση του υποσυστήματος Screen θα μοιάζει με αυτό:

οθόνη -c {path_to_config_file}.

Μπορείτε να βρείτε περισσότερες πληροφορίες εδώ. Μόλις ξεκινήσει το υποσύστημα Screen, μπορεί στη συνέχεια να ξεκινήσει το δυαδικό αρχείο bootscreen.

Εργασία με το σύστημα οθόνης

Το επόμενο βήμα είναι να αναπτύξετε την ίδια την οθόνη εκκίνησης. Το QNX δεν έχει εγγενή τρόπο εμφάνισης μιας εικόνας ή κινούμενης εικόνας ως μέρος της ακολουθίας εκκίνησης. Αυτό θα πρέπει να αναπτυχθεί με βάση τη συσκευή. Εφόσον το Screen API είναι γραμμένο σε C, η οθόνη εκκίνησης θα πρέπει επίσης να γραφτεί σε C. Επιπλέον, η χρήση του C θα διασφαλίσει ότι η οθόνη εκκίνησης μπορεί να ξεκινήσει πολύ πιο γρήγορα και έτσι θα μειωθεί ο χρόνος ενημέρωσης του χρήστη για τη λειτουργία της συσκευής. Η οθόνη εκκίνησης πρέπει να ρυθμίσει κάποιον κώδικα boilerplate για να επικοινωνεί με το Screen API. Μπορούν να βρεθούν λεπτομέρειες εδώ αλλά για να τα απαριθμήσει, η οθόνη εκκίνησης θα χρειαστεί να δημιουργήσει ένα αντικείμενο περιβάλλοντος, ένα αντικείμενο στόχο απόδοσης (στην περίπτωση αυτή, ο στόχος απόδοσης που απαιτείται είναι ένας στόχος παραθύρου) και, τέλος, ένα αντικείμενο buffer οθόνης. Τεχνικά, δεδομένου ότι το C δεν είναι αντικειμενοστρεφές, η έννοια των αντικειμένων δεν υπάρχει στη γλώσσα. Αλλά για ευκολία εξήγησης, ο όρος αντικείμενα θα χρησιμοποιηθεί για να περιγράψει τους τύπους των δομών που χρησιμοποιούνται.

Ακολουθούν διευκρινίσεις και δείκτες σχετικά με ορισμένες συγκεκριμένες παραμέτρους για τα αντικείμενα που μόλις ορίστηκαν. Κατά τη δημιουργία του αντικειμένου περιβάλλοντος οθόνης για την οθόνη εκκίνησης, ο τύπος SCREEN_APPLICATION_CONTEXT είναι ανεπαρκής. Αντίθετα, η οθόνη εκκίνησης χρειάζεται το SCREEN_WINDOW_MANAGER_CONTEXT. Ο λόγος θα εξηγηθεί πλήρως αργότερα, αλλά ουσιαστικά έχει να κάνει με το να γνωρίζουμε πότε πρέπει να τερματιστεί η οθόνη εκκίνησης. Περισσότερες πληροφορίες είναι εδώ.

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

Τέλος, ο ιδανικός αριθμός buffer που θα χρησιμοποιηθούν από τον στόχο απόδοσης μπορεί να οριστεί σε ένα ή δύο ανάλογα με τον τύπο της οθόνης εκκίνησης που χρησιμοποιείται. Εάν η συσκευή πρόκειται να έχει μια στατική οθόνη εκκίνησης, η οποία θα αποτελεί μια ενιαία εικόνα, τότε 1 buffer είναι το μόνο που χρειάζεται. Ωστόσο, εάν θα εμφανίζει μια κινούμενη εικόνα, προτείνονται δύο. Η χρήση δύο σε συνδυασμό με έναν στόχο απόδοσης ενός παραθύρου θα επιτρέψει στην οθόνη εκκίνησης να τοποθετηθεί διπλά στην προσωρινή μνήμη. Με άλλα λόγια, ενώ ένα καρέ της κινούμενης εικόνας φορτώνεται σε ένα buffer, το υποσύστημα Screen μπορεί να εμφανίζει το άλλο buffer. Στη συνέχεια, όταν ολοκληρωθεί η φόρτωση του buffer, το υποσύστημα Screen θα ανταλλάξει το ενεργό buffer με το νέο.

Εργασία με τη βιβλιοθήκη εικόνων

Τώρα, μια δεύτερη βιβλιοθήκη QNX πρέπει να χρησιμοποιηθεί για την ανάλυση και τη φόρτωση συγκεκριμένων καρέ της εικόνας ή της κινούμενης εικόνας της οθόνης εκκίνησης. Το υποσύστημα Screen δεν το χειρίζεται αυτό. Αντίθετα, το Βιβλιοθήκη εικόνων χρησιμοποιείται. Ανάλογα με τον τύπο του αρχείου εικόνας που θα χρησιμοποιηθεί για την οθόνη εκκίνησης, θα χρειαστούν διαφορετικά αρχεία κωδικοποιητή Shared Object (.so). Αυτά θα περιλαμβάνονται στο αρχείο δημιουργίας εικόνων του λειτουργικού συστήματος και υπάρχει μια λίστα με τα διαθέσιμα εδώ. Χρειάζεται να γίνει μια σειρά βημάτων για να αποδοθεί ένα καρέ ενός κινούμενου σχεδίου σε μια προσαρτημένη οθόνη.

Αυτά τα βήματα ορίζονται εδώ με μερικές επιφυλάξεις. Μια σημαντική προειδοποίηση είναι η πιθανότητα ότι, ανάλογα με το υλικό που χρησιμοποιείται, ολόκληρο το σύνολο των καρέ ενός κινούμενου σχεδίου δεν θα χωράει στη μνήμη. Εάν συμβαίνει αυτό, τα πλαίσια θα πρέπει να φορτωθούν εν κινήσει και να αποδοθούν καθώς φορτώνονται. Η δεύτερη προειδοποίηση είναι ότι τόσο η img_load_file() όσο και η img_load() (και οι δύο αναφέρονται στον παραπάνω σύνδεσμο) θα φορτώσουν μόνο το πρώτο πλαίσιο. Για μια ακίνητη εικόνα, αυτό είναι αρκετό, αλλά όχι για μια κινούμενη εικόνα. Η χρήση αυτών των συναρτήσεων σε βρόχο για ανάγνωση σε κάθε πλαίσιο δεν θα λειτουργήσει ούτε επειδή δεν υπάρχει τρόπος να καθοριστεί ο αριθμός πλαισίου προς ανάκτηση. Θα επιστρέψει πάντα το πρώτο καρέ.

Αντίθετα, για να αντιμετωπιστούν και οι δύο προειδοποιήσεις, ο κώδικας θα φορτώσει και θα αποκωδικοποιήσει το πλαίσιο και, στη συνέχεια, στην επανάκληση αποκωδικοποίησης θα γράψει το πλαίσιο κίνησης στην προσωρινή μνήμη υποσυστήματος οθόνης. Η συνάρτηση img_decode_frame() επιτρέπει τον καθορισμό των ανακλήσεων και είναι συγκεκριμένα στην επανάκληση frame_f() (βλ. εδώ) ότι θα πρέπει να τοποθετηθεί ο κώδικας για τη φόρτωση της εικόνας στο buffer.

Τα βήματα για τη φόρτωση των δεδομένων είναι τα εξής: Εξαγάγετε τον στόχο απόδοσης (οθόνη σε αυτήν την περίπτωση) που μεταβιβάζεται ως παράμετρος δεδομένων (αυτό θα πρέπει να πληκτρολογηθεί από ένα uintptr_t σε ένα screen_window_t). Στη συνέχεια, το SCREEN_PROPERTY_POINTER και το SCREEN_PROPERTY_STRIDE του buffer (βλ. εδώ) θα πρέπει να ρυθμιστεί στα δεδομένα και το stride της εικόνας αντίστοιχα (η παράμετρος img_t της επανάκλησης). Το τελευταίο βήμα είναι να χρησιμοποιήσετε το screen_post_window() (λόγω του ότι ο στόχος απόδοσης είναι παράθυρο) για να αποδώσετε την εικόνα που φορτώθηκε πρόσφατα στην οθόνη.

Εργασία με το σύστημα συμβάντων QNX

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

Δύο σημαντικά συμβάντα για την οθόνη εκκίνησης είναι τα συμβάντα SCREEN_EVENT_CREATE και SCREEN_EVENT_PROPERTY. Το συμβάν SCREEN_EVENT_CREATE χρησιμοποιείται για την ακρόαση του πότε η κύρια εφαρμογή (που θα εμφανίζει την κύρια διεπαφή χρήστη της συσκευής) δημιουργεί το παράθυρο και επομένως πότε η οθόνη εκκίνησης πρέπει να ξεκινήσει τη σειρά τερματισμού λειτουργίας της. Μπορείτε να αναζητήσετε περαιτέρω ιδιότητες σχετικά με αυτό το συμβάν χρησιμοποιώντας το σύνολο συναρτήσεων screen_get_event_property_X(). Το X χρησιμοποιείται για να υποδηλώσει τον τύπο της ιδιότητας που ζητήθηκε. Εάν η κύρια εφαρμογή ορίζει την SCREEN_PROPERTY_GROUP, μπορεί να ερωτηθεί εάν η συγκεκριμένη εφαρμογή ενεργοποίησε το συμβάν.

Το συμβάν SCREEN_EVENT_PROPERTY μπορεί να χρησιμοποιηθεί σε συνδυασμό με την ιδιότητα SCREEN_PROPERTY_FOCUS που ορίζεται όταν εστιάζει ένα διαφορετικό παράθυρο (διαβάστε περισσότερες πληροφορίες εδώ). Η χρήση του συστήματος συμβάντων αντί για τη χρήση κινούμενης εικόνας διάρκειας X δευτερολέπτων (όπου X είναι η διάρκεια της διαδικασίας εκκίνησης της συσκευής) σημαίνει ότι η κινούμενη εικόνα μπορεί να επαναληφθεί εάν η κύρια εφαρμογή δεν έχει ξεκινήσει ακόμα. Αυτό επιτρέπει πολύ καλύτερη φορητότητα μεταξύ διαφορετικού υλικού, καθώς οι χρονισμοί πιθανότατα θα είναι διαφορετικοί.

Σχετικά με το θέμα του χρονισμού, επειδή τα συμβάντα δεν μπορούν να ακούγονται συνεχώς (εάν ήταν, θα κλείδωνε το κύριο νήμα με αποτέλεσμα το κινούμενο σχέδιο να μην εμφανίζει τα επόμενα καρέ), πρέπει να χρησιμοποιηθεί μια διαφορετική τακτική. Εάν η οθόνη εκκίνησης είναι σταθερό πλαίσιο, αυτό δεν θα είναι πρόβλημα. Ωστόσο, ανάλογα με τη διάρκεια της κινούμενης εικόνας, αυτά τα συμβάντα μπορεί να χρειάζεται να ακούγονται για περίπου κάθε τέταρτο σετ καρέ. Δηλαδή, κάθε φορά που φορτώνεται το ένα τέταρτο των καρέ του animation, πριν ξεκινήσει η φόρτωση του επόμενου τριμήνου, ελέγξτε για τυχόν πιθανά συμβάντα.

Συμπέρασμα

Συμπερασματικά, αυτό το ιστολόγιο εξηγεί γιατί οι οθόνες εκκίνησης είναι σημαντικές, παρέχει λεπτομέρειες σχετικά με τον τρόπο ρύθμισης μιας οθόνης εκκίνησης ιατρικής συσκευής για QNX και προσφέρει προειδοποιήσεις και προτάσεις σχεδίασης που μπορεί να είναι χρήσιμες. Ωστόσο, η οθόνη εκκίνησης κάθε συσκευής έχει διαφορετικές απαιτήσεις. Ως αποτέλεσμα, αυτό το ιστολόγιο παρέχει προτάσεις αντί για μια διαδικασία βήμα προς βήμα. Ωστόσο, αυτές οι προτάσεις και λεπτομέρειες θα πρέπει να επιτρέπουν στους προγραμματιστές να ρυθμίσουν μια οθόνη εκκίνησης QNX ιατρικής συσκευής που να καλύπτει τις συγκεκριμένες ανάγκες τους.

Ο Dendy Addison είναι α Μηχανικός Λογισμικού στο Starfish Medical που βοηθά τους πελάτες να αναπτύξουν ασφαλές, αποδοτικό και αποτελεσματικό λογισμικό ιατρικών συσκευών. Έχει πάθος να κάνει τη διαφορά στη ζωή των ανθρώπων μέσω του λογισμικού που αναπτύσσει. Ο Dendy απολαμβάνει να εργάζεται σε όλες τις πτυχές των ιατρικών συσκευών, από το υλικολογισμικό έως το UI.

 

Μοιραστείτε αυτό…

spot_img

Τελευταία Νοημοσύνη

spot_img