τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Μιλήσαμε για βασικές γνώσεις όπως δείκτες και δομές νωρίτερα. Στην αρχή αυτού του άρθρου, θα κάνουμε μερικές σύνθετες εφαρμογές αυτών των βασικών γνώσεων, όπως ουρές.
Πράγματι, το 2018, ηχογράφησα ένα σύνολο βίντεο σχετικά με την αρχιτεκτονική του προγράμματος, το οποίο περιελάμβανε μαθήματα βήμα προς βήμα για τη δημιουργία ουρών και μια σειρά πρακτικών τεχνικών και πρακτικών προγραμματισμού υψηλού επιπέδου οι φιλοι. .
Ωστόσο, επειδή το σεμινάριο ηχογραφήθηκε σχετικά νωρίς, η ποιότητα του ήχου είναι σχετικά κακή και ορισμένες λεπτομέρειες δεν είναι τέλειες. Ως εκ τούτου, αυτό το αγκάθι ήταν πάντα κολλημένο στην καρδιά μου Για να επιτρέψω στους σκληροπυρηνικούς του Wuji Microcontroller Special Training Camp να μάθουν τα έργα μας πιο αποτελεσματικά και καλύτερα, σχεδιάζω πρόσφατα να αναδιοργανώσω αυτά τα βασικά περιεχόμενα και να κάνω μια σειρά από προγράμματα. σεμινάρια αρχιτεκτονικής λογισμικού 2.0 γραφικών/βίντεο.
Όταν εργαζόμουν ως μηχανικός Ε&Α, συναντούσα συχνά ορισμένα προϊόντα επικοινωνίας, όπως πίνακες βιομηχανικού ελέγχου, PDU και Internet of Things.
Γενικά, όταν φτιάχνετε αυτό το είδος προϊόντος, θα είναι πονοκέφαλος όταν γράφετε και λαμβάνετε ροές δεδομένων, είτε πρόκειται για σειριακή επικοινωνία είτε για ασύρματη επικοινωνία.
Για παράδειγμα, το STM32 λαμβάνει ροή δεδομένων σειριακής θύρας.
Τις πρώτες μέρες, όρισα έναν πίνακα και μια μεταβλητή δείκτη πίνακα για την επεξεργασία της λαμβανόμενης ροής δεδομένων.
Αυτή η μέθοδος έχει πολλά προβλήματα και αυξάνει την πολυπλοκότητα των μηχανικών που γράφουν κώδικα.
Η συντήρηση του κώδικα είναι επίπονη
Επειδή πρέπει να ελέγξετε με μη αυτόματο τρόπο τα όρια προσωρινής αποθήκευσης πίνακα για να αποφύγετε σφάλματα εκτός ορίων, οι πίνακες δεν είναι τόσο εύκολο να επεκταθούν και να διατηρηθούν όσο οι ουρές όταν χρειάζεται να επεξεργαστείτε πιο σύνθετες ροές δεδομένων ή να προσθέσετε νέες πηγές δεδομένων.
Τα δεδομένα είναι επιρρεπή σε σύγχυση
Η απευθείας λειτουργία συστοιχιών σε μια υπηρεσία διακοπής (ISR) μπορεί να προκαλέσει ανταγωνισμό πόρων με το κύριο πρόγραμμα Εάν πολλές εργασίες έχουν πρόσβαση στην ίδια συστοιχία, απαιτούνται πρόσθετοι μηχανισμοί συγχρονισμού (όπως κλειδώματα mutex) για την αποφυγή συνθηκών αγώνα δεδομένων και ασυνέπειας.
Εάν η λήψη και η επεξεργασία δεδομένων δεν συγχρονίζονται, η χρήση συστοιχιών μπορεί να προκαλέσει σύγχυση στις παραγγελίες δεδομένων, οδηγώντας σε απώλεια πακέτων δεδομένων που προκαλείται από προβλήματα προγράμματος. Έχω βουίξει με αυτό το πρόβλημα στο παρελθόν, χρειάζομαι επιπλέον κώδικα για να λύσω αυτό το πρόβλημα, το οποίο αυξάνει την πολυπλοκότητα του προγράμματος.
Αυτό το είδος προβλήματος με ενόχλησε για πολύ καιρό, μόνο όταν άλλαξα δουλειά αργότερα και διάβασα τον κώδικα που έγραψαν άλλοι μηχανικοί, κατάλαβα ότι οι ουρές μπορούν να λύσουν αυτά τα σημεία πόνου. Από τότε, ο τρόπος με τον οποίο χειρίζομαι τη ροή δεδομένων έχει γίνει ως εξής:
Αισθάνεται πολύ πιο απλό; Στην πραγματικότητα, ο αλγόριθμος επεξεργασίας δεδομένων της ουράς δεν είναι απλός. Χρησιμοποιεί απλώς την ουρά για να δημιουργήσει ένα γενικό πρότυπο για την επεξεργασία των δεδομένων, την επόμενη φορά που θα συναντήσετε παρόμοιες ανάγκες Ο κωδικός είναι πιο επαναχρησιμοποιήσιμος.
Αυτή είναι μόνο μία από τις εφαρμογές των ουρών.
Δηλαδή να αποθηκεύσετε πρώτα τα δεδομένα και στη συνέχεια να αφαιρέσετε τα δεδομένα για επεξεργασία όταν η CPU έχει ελεύθερο χρόνο ή όταν πληρούνται ορισμένες προϋποθέσεις του προγράμματος.
Με βάση αυτό το χαρακτηριστικό, μπορούν να προκύψουν πολλές πρακτικές εφαρμογές. Ειδικά όταν ασχολείστε με εφαρμογές που πρέπει να διασφαλίσουν τη σειρά δεδομένων.
Έχω συνοψίσει μερικά από τα μέρη που χρησιμοποιώ περισσότερο.
Όταν ο μικροελεγκτής λαμβάνει δεδομένα μέσω της σειριακής θύρας, συνήθως χρησιμοποιεί μια ουρά για την προσωρινή αποθήκευση των λαμβανόμενων byte, η οποία διασφαλίζει ότι τα δεδομένα δεν θα χαθούν πριν υποστούν επεξεργασία από το κύριο πρόγραμμα.
Σε συσκευές αναπαραγωγής ή εγγραφής ήχου, οι ουρές χρησιμοποιούνται για την προσωρινή αποθήκευση δεδομένων δειγμάτων ήχου για την υλοποίηση αναπαραγωγής ή εγγραφής στροφή προς στροφή. Για παράδειγμα: Για παράδειγμα, στο Έργο 6 της ειδικής κατασκήνωσης μικροελεγκτή Wuji, ο κεντρικός υπολογιστής συναγερμού WiFi & 4G έχει μια λειτουργία φωνητικής προτροπής, για παράδειγμα, εάν πατήσετε το κουμπί όπλισης μακριά από το σπίτι, η φωνή "όπλιση μακριά από το σπίτι". θα αναπαραχθεί και εάν πατηθεί το κουμπί όπλισης στο σπίτι, θα αναπαραχθεί η φωνή "όπλιση στο σπίτι".
Εάν πατήσω αυτά τα δύο κουμπιά γρήγορα, για να διασφαλίσω ότι η φωνή μπορεί να αναπαραχθεί πλήρως, μπορώ να ρίξω το συμβάν κλειδιού στην κρυφή μνήμη της ουράς πρώτα, έτσι ώστε η φωνή να μπορεί να αναπαραχθεί πλήρως με τη σειρά.
Σε συστήματα που χρησιμοποιούν RTOS, οι ουρές χρησιμοποιούνται για την παράδοση μηνυμάτων και το συγχρονισμό μεταξύ των εργασιών και υποστηρίζουν τον προγραμματισμό πολύπλοκων εργασιών.
Αφού εντοπιστούν βασικά συμβάντα, μπορούν να τοποθετηθούν πρώτα στην ουρά και το κύριο πρόγραμμα μπορεί να επεξεργαστεί αυτά τα συμβάντα για να αποτρέψει την απώλεια των βασικών συμβάντων λόγω πολύ γρήγορου πατήματος πλήκτρων.
Τα δεδομένα ADC που συλλέγουμε μπορούν επίσης να πεταχτούν στην ουρά μετά από συγκεκριμένη επεξεργασία, ώστε να μπορούν να υποβληθούν σε επεξεργασία ή να αναλυθούν την κατάλληλη στιγμή.
Η αλληλεπίδραση δεδομένων της αναβάθμισης υλικολογισμικού είναι σχετικά μεγάλη, η οποία είναι πολύ κατάλληλη για τη χρήση ουρών για τη διασφάλιση της ακεραιότητας των δεδομένων. Χρησιμοποιείται επίσης στο έργο μας 6. Κατά τη διαδικασία αναβάθμισης υλικολογισμικού, τα μπλοκ δεδομένων υλικολογισμικού που έχουν ληφθεί μπορούν να τοποθετηθούν στην ουρά. γραμμένο στη μνήμη flash με τη σειρά. Υπάρχουν πολλές παρόμοιες εφαρμογές Συνολικά, οι ουρές μου έχουν λύσει πολλά δύσκολα προβλήματα.
Η ουρά είναι μια γραμμική δομή δεδομένων που ακολουθεί την αρχή first-in-first-out (FIFO), δηλαδή, τα πρώτα δεδομένα που θα εισέλθουν στην ουρά θα είναι τα πρώτα που θα αφαιρεθούν. Σε μια ουρά, τα δεδομένα τοποθετούνται συνήθως στην ουρά στο ένα άκρο, που ονομάζεται ουρά της ουράς, και τα δεδομένα τοποθετούνται στην ουρά στο άλλο άκρο, που ονομάζεται επικεφαλής της ουράς. Αυτή η δομή καθιστά τις ουρές πολύ κατάλληλες για καταστάσεις όπου τα δεδομένα πρέπει να υποβάλλονται σε τακτική επεξεργασία.
Μπορούμε να σκεφτούμε την ουρά ως γέμιση μπάλες του πινγκ πονγκ σε ένα σωλήνα διπλής κατεύθυνσης. Αυτή η ενέργεια ονομάζεται ουρά. Βγάζουμε την μπάλα του πινγκ πονγκ από τη δεξιά πλευρά του σωλήνα.
Οι μπάλες του πινγκ πονγκ στο σωλήνα θα παραταχθούν σε σχηματισμό. Η μπάλα του πινγκ πονγκ που μπαίνει πρώτη θα βγει πρώτη Αυτός είναι ο κανόνας πρώτος-πρώτος-out στην ουρά.
Οι μπάλες του πινγκ πονγκ συγκρίνονται με δεδομένα. Η ουρά στην παραπάνω εικόνα μπορεί να αποθηκεύσει 4 κομμάτια δεδομένων είναι ισοδύναμα με το Buff[4].
Η υλοποίηση του προγράμματος της ουράς γίνεται μέσω ενός πίνακα σταθερού μεγέθους, ενός δείκτη κεφαλής και ενός δείκτη ουράς. Οι πίνακες είναι υπεύθυνοι για την αποθήκευση δεδομένων. Ο δείκτης κεφαλής είναι υπεύθυνος για τη διεύθυνση από την οποία πρέπει να λαμβάνονται τα δεδομένα κατά την αφαίρεση ουρών. Ο ουραίος δείκτης είναι υπεύθυνος για τη διεύθυνση στην οποία πρέπει να αποθηκευτούν τα δεδομένα όταν βρίσκονται στην ουρά. Επομένως, οι πράξεις της αναμονής και της απομόνωσης είναι δύο δείκτες, που παίζουν τον αλγόριθμο δεδομένων first-in-first-out στον πίνακα.
Διαφορετικοί μηχανικοί εφαρμόζουν τους κωδικούς ουράς με διαφορετικό τρόπο. Εάν δεν έχετε πλούσια εμπειρία έργου ή αν δεν έχετε χρησιμοποιήσει ουρές στο παρελθόν, μην ντρέπεστε που πρέπει να είστε σε θέση να γράψετε τον αλγόριθμο ουράς.
Όταν ξεκίνησα για πρώτη φορά, μεταφύτευσα απευθείας προγράμματα ουράς άλλων ανθρώπων και συνέχισα να τα χρησιμοποιώ στα δικά μου έργα, αφού τα χρησιμοποίησα καλά σε πολλά έργα, μετά μελέτησα τον λεπτομερή κώδικα της εφαρμογής του αλγορίθμου ουράς και τον έγραψα μερικές φορές.
Επομένως, βετεράνοι του ειδικού μας στρατοπέδου εκπαίδευσης, μην το γράφετε μόνοι σας στην αρχή, Μάθετε να το χρησιμοποιείτε πρώτα, αντλήστε συμπεράσματα από ένα παράδειγμα, εφαρμόστε το σε διαφορετικά σενάρια και έργα και μετά προσπαθήστε να το γράψετε μόνοι σας αφού εξοικειωθείτε. με αυτό Αυτή είναι μια πολύ σημαντική ακολουθία μάθησης.
Πάρτε για παράδειγμα το πρόγραμμα ουράς του Infinite Microcontroller Project Special Training Camp. Υπάρχουν συνολικά 4 λειτουργίες.
QueueEmpty(x)
Εκκαθάριση της συνάρτησης ουράς Πριν από κάθε χρήση της ουράς, η συνάρτηση διαγραφής θα κάνει τον δείκτη κεφαλής και τον δείκτη ουράς από προεπιλογή, η οποία είναι το πρώτο στοιχείο του πίνακα θα προκύψει εξαίρεση διεύθυνσης.
Τυπική περιγραφή παραμέτρου: x - είναι μια μεταβλητή δομής ουράς
QueueDataIn(x,y,z)
Η συνάρτηση αναμονής δεδομένων είναι να ρίχνει ένα ή περισσότερα byte δεδομένων στην καθορισμένη ουρά.
Επίσημη περιγραφή παραμέτρων:
x - Μεταβλητή δομής ουράς
y - διεύθυνση δεδομένων
z - Ο όγκος των δεδομένων που θα μπουν στην ουρά, σε byte.
Ειδοποίηση:
①.Τα δεδομένα που εισάγονται μπορούν να είναι μόνο ανυπόγραφου τύπου.
② Εάν η ουρά είναι πλήρης και τα δεδομένα συνεχίζουν να βρίσκονται στην ουρά, τα δεδομένα θα αντικατασταθούν από την πρώτη θέση δεδομένων.
QueueDataOut(x,y)
Η συνάρτηση dequeue δεδομένων είναι η λήψη ενός byte δεδομένων από την καθορισμένη ουρά.
Επίσημη περιγραφή παραμέτρου: x - Μεταβλητή δομής ουράς y - Τα δεδομένα που λαμβάνονται, η διεύθυνση που θα αποθηκευτεί
Σημείωση: Η συνάρτηση dequeue μπορεί να πάρει μόνο ένα byte δεδομένων τη φορά.
QueueDataLen(x)
Διαγράψτε όλα τα δεδομένα στην καθορισμένη ουρά. Επίσημη περιγραφή παραμέτρου: x - μεταβλητή δομής ουράς
Το παρακάτω περιεχόμενο περιλαμβάνει ορισμένες εξηγήσεις κώδικα και βίντεο, που δεν είναι βολικό να επεξεργαστείτε. Μπορείτε να επικοινωνήσετε μαζί μου για να κανονίσω το Feishu για μια καλύτερη εμπειρία ανάγνωσης.
Πρόσφατα, πολλοί θαυμαστές με ρώτησαν πώς να μάθω μικροελεγκτές Με βάση τη δεκαετή εμπειρία μου στον κλάδο, πέρασα ένα μήνα και συνέταξα προσεκτικά έναν "μικροϋπολογιστή ενός τσιπ".
Η καλύτερη διαδρομή εκμάθησης για μικροελεγκτές + αρχικό επίπεδο έως προηγμένα σεμινάρια για μικροελεγκτές + κιτ εργαλείων", Όλα κοινοποιούνται με τους σκληρούς θαυμαστές δωρεάν! ! !
Εκτός από αυτό, μοιράζομαι με δάκρυα αυτό που έχω στο κάτω μέρος του κουτιού μου22 δημοφιλή έργα ανοιχτού κώδικα,ΠεριλαμβάνωΠηγαίος κώδικας + σχηματικός + PCB + τεκμηρίωση, σε αφήνωΓίνε κύριος γρήγορα!
Για πακέτα εκμάθησης και λεπτομερείς διαδρομές εκμάθησης, δείτε μεΗ αρχή αυτού του άρθρου παρακάτω。