Διάφορα

Βελτιστοποίηση κώδικα σε μικροελεγκτές

Συγγραφέας: Laura McKinney
Ημερομηνία Δημιουργίας: 4 Απρίλιος 2021
Ημερομηνία Ενημέρωσης: 16 Ενδέχεται 2024
Anonim
Ενσωματωμένα Συστήματα, Διάλεξη 06 - Μηνάς Δασυγένης
Βίντεο: Ενσωματωμένα Συστήματα, Διάλεξη 06 - Μηνάς Δασυγένης

Περιεχόμενο

Ο συγγραφέας ολοκλήρωσε το τελευταίο έτος του μηχανικού έργου με τους μικροελεγκτές dsPic, αποκτώντας εκτεταμένη εικόνα σε αυτές τις συσκευές.

Ο κωδικός Γ-γλώσσας ενός μικροελεγκτή ενδέχεται να απαιτεί βελτιστοποίηση σε ορισμένες προηγμένες εφαρμογές. Αυτή η βελτιστοποίηση κώδικα εφαρμόζεται για τη μείωση δύο κρίσιμων πραγμάτων:

  1. Μέγεθος κωδικού: Οι μικροελεγκτές μπορούν να αποθηκεύουν περιορισμένα δεδομένα και οδηγίες λόγω του περιορισμένου μεγέθους της μνήμης RAM τους. Επομένως, ο κώδικας πρέπει να βελτιστοποιηθεί, έτσι ώστε οι διαθέσιμες οδηγίες και η μνήμη δεδομένων να μπορούν να χρησιμοποιηθούν με τον πιο αποτελεσματικό τρόπο.
  2. Ώρες εκτέλεσης κώδικα: Οι μικροελεγκτές είναι διαδοχικές συσκευές που εκτελούν μία εντολή τη φορά. Κάθε εντολή συναρμολόγησης καταναλώνει έναν ορισμένο αριθμό κύκλων ρολογιού για να εκτελεστεί. Επομένως, ο κωδικός πρέπει να βελτιστοποιηθεί για να διασφαλιστεί ότι εκτελεί την απαιτούμενη εργασία σε τουλάχιστον αριθμό κύκλων ρολογιού ή οδηγίες συναρμολόγησης. Όσο λιγότερο ρολόι ένας κύκλος χρησιμοποιεί ένας κώδικας, τόσο πιο γρήγορα τρέχει. Αυτό σημαίνει ότι οι εφαρμογές μπορούν να εκτελούνται γρηγορότερα επειδή οι χρόνοι επεξεργασίας ελαχιστοποιούνται.

Αυτό το άρθρο παρουσιάζει συμβουλές και κόλπα που μπορεί να χρησιμοποιηθούν για τη μείωση του μεγέθους και του χρόνου εκτέλεσης ενός κωδικού μικροελεγκτή.


Το IDE ανάπτυξης του Microchip MplabX θα χρησιμοποιηθεί για να δείξει παραδείγματα όπου χρειάζεται.

Πώς να μετρήσετε πειραματικά τον χρόνο εκτέλεσης κώδικα

Για να πάρετε μια ιδέα για το πόσο χρόνο χρειάζεται πραγματικά ο κώδικάς σας για να εκτελεστεί σε πραγματικό χρόνο, πρέπει να το μετρήσετε πειραματικά. Ένας αναλυτής λογικής μπορεί εύκολα να χρησιμοποιηθεί για τη μέτρηση του χρόνου εκτέλεσης κώδικα και όσοι ενδιαφέρονται μπορούν να ρωτήσουν σχετικά με τη διαδικασία για αυτό από εμένα μέσω email. Πέρα από αυτό:

  • Ορισμένοι μεταγλωττιστές έχουν τη δυνατότητα να μετρά κύκλους ρολογιού που θα καταναλώσει ένας κώδικας.
  • Ορισμένα προγράμματα εντοπισμού σφαλμάτων για παράδειγμα το ICD 3 από το μικροτσίπ μπορούν να μετρήσουν άμεσα τον χρόνο εκτέλεσης μέσω ενός χρονόμετρου.

1. Γνωρίστε τη δύναμη επεξεργασίας και το μέγεθος μνήμης του μικροελεγκτή σας

Δεν είναι πάντα η συχνότητα ρολογιού (Mhz) που δίνει την πραγματική εικόνα της ταχύτητας επεξεργασίας ενός μικροελεγκτή, ένα πιο ρεαλιστικό μέτρο είναι το MIPS (mega οδηγίες ανά δευτερόλεπτο) ή ο αριθμός των εντολών που μπορεί να εκτελέσει η MCU σε ένα δευτερόλεπτο.

Οι MCU κυμαίνονται συνήθως από 60-70 MIPS στην κατηγορία υψηλών προδιαγραφών έως 20 MIPS 8-bit AVR. Ένας μικροελεγκτής υψηλού MIPS είναι πιθανό να είναι πιο ακριβός από μια συσκευή χαμηλού επιπέδου, οπότε εδώ έχετε μια αντιστάθμιση μεταξύ κόστους και ταχύτητας επεξεργασίας.


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

2. Επιλογή μεταβλητών για βελτιστοποίηση σε μέγεθος κώδικα

Οι μικροελεγκτές έχουν περιορισμένη μνήμη δεδομένων, συνήθως κυμαίνονται από 1 έως 4 Kbytes. Σε αυτήν την περίπτωση, είναι συνετό να επιλέξετε τον καταλληλότερο τύπο μεταβλητής σύμφωνα με το αναμενόμενο εύρος της ημερομηνίας αποθήκευσης. Ο παρακάτω πίνακας συνοψίζει αυτές τις μεταβλητές:

Περίληψη των μεταβλητών που χρησιμοποιούνται στη Γ-γλώσσα.

Μεταβλητός τύποςΜέγεθος σε bytesΕύρος

bool

1

Μόνο 0 ή 1

απανθρακώνω

1


-128 έως 127

int

2

-32,768 έως 32,767

χωρίς υπογραφή int

2

0 έως 65,535

μακρύς

4

-2.147.483.648 έως 2.147.483.647

φλοτέρ

4

Ακριβής έως 6 δεκαδικά ψηφία

διπλό

8

Ακριβής έως και 15 δεκαδικά ψηφία

μακρύ διπλό

10

Ακριβής έως 19 δεκαδικά ψηφία

Παράδειγμα:

  • Αν πρόκειται να προστεθούν δύο μεταβλητές X και Y και το αποτέλεσμα πρέπει να αποθηκευτεί στο Z αλλά η τιμή του Z αναμένεται να είναι υψηλότερη από 65,535 μετά την προσθήκη τότε το Z μπορεί να δηλωθεί ως μακρύ και το X και το Y μπορεί να δηλωθούν ως μη υπογεγραμμένα int, οι τιμές των Χ και Υ δεν αναμένεται επίσης να είναι αρνητικές. Αυτό θα εξοικονομήσει 04 byte στη μνήμη δεδομένων που διαφορετικά θα είχαν εξαντληθεί εάν όλες οι μεταβλητές θα δηλώνονταν ως μεγάλες.
  • Δύο μεταβλητές X και Y, των οποίων οι τιμές αναμένεται να είναι ακέραιοι αριθμοί πρέπει να διαιρεθούν, αλλά το αποτέλεσμα της διαίρεσης μπορεί να αποδώσει ένα δεκαδικό, τότε X και Y μπορεί να δηλωθούν int και το αποτέλεσμα μπορεί να κηρυχθεί float ή double ανάλογα με η απαιτούμενη ακρίβεια.

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

3. Επιλογή μεταβλητών για βελτιστοποίηση στο χρόνο εκτέλεσης κώδικα

  • Είναι αποδεδειγμένο ότι οι υπολογισμοί κυμαινόμενου σημείου διαρκούν περισσότερο από τους υπολογισμούς σταθερού σημείου. Μην χρησιμοποιείτε μια μεταβλητή κινητής υποδιαστολής όπου δεν απαιτείται δεκαδική τιμή. Εργαστείτε με ακέραιοι αριθμούς όπου είναι δυνατόν.
  • Οι τοπικές μεταβλητές προτιμώνται από τις καθολικές μεταβλητές. Εάν μια μεταβλητή χρησιμοποιείται μόνο σε μια συνάρτηση, τότε πρέπει να δηλωθεί σε αυτήν τη συνάρτηση επειδή η πρόσβαση σε καθολικές μεταβλητές είναι πιο αργή από τις τοπικές μεταβλητές.
  • Ένα MCU 8-bit θα βρει μια μεταβλητή μεγέθους ενός byte πιο γρήγορα για πρόσβαση και μια MCU 16-bit θα βρει μια μεταβλητή 2-byte ευκολότερη στην πρόσβαση λόγω του μήκους της δημιουργίας της διεύθυνσης.

4. Βελτιστοποίηση αριθμητικών πράξεων

Οι αριθμητικές λειτουργίες μπορούν να βελτιστοποιηθούν με τους ακόλουθους τρόπους.

  1. Χρησιμοποιήστε πίνακες αναζήτησης με προκαθορισμένες τιμές αντί να αξιολογήσετε Sine ή οποιαδήποτε άλλη τριγωνομετρική συνάρτηση ή οποιαδήποτε άλλη λειτουργία της οποίας το αποτέλεσμα μπορεί να είναι γνωστό εκ των προτέρων στον κώδικα.
  2. Σε περίπτωση που ένας πίνακας αναζήτησης ημιτονοειδούς είναι ήδη αποθηκευμένος στη μνήμη, ένα συνημίτονο μπορεί να αξιολογηθεί προωθώντας το δείκτη του πίνακα ισοδύναμο με 90 μοίρες.
  3. Μεταξύ των τεσσάρων αριθμητικών πράξεων, η διαίρεση και ο πολλαπλασιασμός χρειάζονται τον περισσότερο χρόνο επεξεργασίας, στην πράξη μπορεί να κυμαίνεται σε εκατοντάδες μικρο-δευτερόλεπτα περίπου σε περίπτωση τιμών κυμαινόμενου σημείου.
  4. Χρησιμοποιήστε οδηγίες αλλαγής bit αντί για διαίρεση και πολλαπλασιασμό. Μια εντολή δεξιάς μετατόπισης 3 χρησιμεύει για διαίρεση με το 23 όπου ως αριστερή εντολή μετατόπισης 1 θα χρησιμεύσει για πολλαπλασιασμό επί 21.

5. Χρησιμοποιήστε έναν μικροελεγκτή με δυνατότητα DSP για εντατικούς υπολογισμούς

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

Οδηγίες που ένας επεξεργαστής DSP μπορεί να εκτελέσει γρηγορότερα από ότι ένας ALU είναι:

  • Οδηγίες αλλαγής bit και περιστροφής.
  • Πολλαπλασιασμοί, διαιρέσεις και άλλες αριθμητικές πράξεις.
  • Αξιολόγηση ημιτονοειδών και άλλων τριγωνομετρικών συναρτήσεων.
  • Όλες οι λειτουργίες DSP όπως το FFT, DFT, το φιλτράρισμα των συνελεύσεων και το FIR.

Η χρήση του κινητήρα DSP ενός μικροελεγκτή απαιτεί:

  • Ξεχωριστές βιβλιοθήκες DSP ενσωματώνονται στο έργο.
  • Τα ονόματα των συναρτήσεων διαφέρουν από την τυπική βιβλιοθήκη μαθηματικών C-language. Μπορείτε να βρείτε την τεκμηρίωση αυτών των βιβλιοθηκών και λειτουργιών από τον αντίστοιχο ιστότοπο κατασκευαστών.
  • Ο κινητήρας DSP χρησιμοποιεί διαφορετικό μεταβλητό τύπο «κλασματικό». Μάθετε πώς να χρησιμοποιείτε κλασματικές μεταβλητές τύπου προτού προχωρήσετε σε λειτουργίες βιβλιοθήκης dsp.

Σημειώστε ότι οι τυπικές λειτουργίες της βιβλιοθήκης μαθηματικών δεν θα επικαλεστούν τον κινητήρα DSP επειδή μεταφράζονται σε οδηγίες συναρμολόγησης ALU.

6. Εργαστείτε με Διακοπές

Χρησιμοποιήστε διακοπές για εκτέλεση συγκεκριμένων λειτουργιών όπως:

  • Ανάγνωση τιμών ADC.
  • Αποστολή και λήψη από το UART.
  • Ενημέρωση μητρώων κύκλου εργασιών PWM.
  • Επικοινωνία CAN ή I2C.

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

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

7. Χρησιμοποιήστε τους καλύτερους διαθέσιμους μεταγλωττιστές

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

8. Χρησιμοποιήστε έξυπνες δηλώσεις υπό όρους

  • Όταν χρησιμοποιείτε μια σειρά δηλώσεων if-else διατηρείτε πρώτα την πιο πιθανή κατάσταση. Με αυτόν τον τρόπο το MCU δεν θα χρειαστεί να σαρώσει όλες τις συνθήκες αφού εντοπίσει την πραγματική κατάσταση.
  • Μια δήλωση αλλαγής περίπτωσης είναι συνήθως ταχύτερη από το if-else.
  • Χρησιμοποιήστε ένθετες δηλώσεις if-else αντί για μια σειρά δηλώσεων. Ένα μπλοκ if-else που έχει πολλές δηλώσεις μπορεί να χωριστεί σε μικρότερα υποκαταστήματα για βελτιστοποίηση για τη χειρότερη περίπτωση (τελευταία) κατάσταση.

9. Χρησιμοποιήστε ενσωματωμένες λειτουργίες

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

  • Μια συνάρτηση μπορεί να δηλωθεί inline χρησιμοποιώντας τη λέξη-κλειδί «στατική» μαζί της.

10. Χρησιμοποιήστε μειωμένους βρόχους

Ένας μειωμένος βρόχος θα δημιουργήσει λιγότερο κωδικό συναρμολόγησης σε σύγκριση με έναν αυξημένο βρόχο.

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

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

Τυλίγοντας

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

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

Ενδιαφέρουσες Θέσεις

Σας Συμβουλεύουμε

Πώς να ενεργοποιήσετε την απομακρυσμένη πρόσβαση Plex
Διάφορα

Πώς να ενεργοποιήσετε την απομακρυσμένη πρόσβαση Plex

Ο Max κατέχει πτυχίο B. . σε μαζικές επικοινωνίες από το IU, M.A. σε επικοινωνίες από το U of I, και είναι κάτοχος MBA από το Πανεπιστήμιο Web ter.Η δημιουργία ενός διακομιστή πολυμέσων Plex στο οικια...
Χρησιμοποιήστε το Rank and Percentile Tool From the Analysis ToolPak στο Excel 2007 και 2010 για να δημιουργήσετε πίνακες κατάταξης
Υπολογιστές

Χρησιμοποιήστε το Rank and Percentile Tool From the Analysis ToolPak στο Excel 2007 και 2010 για να δημιουργήσετε πίνακες κατάταξης

Ο Robbie γράφει ως επί το πλείστον για το kyrim, αλλά επίσης περιστασιακά ρίχνει φως στις ιδιαιτερότητες εφαρμογών της Micro oft όπως το Excel και το Outlook.Σε αυτό το άρθρο, θα ερευνήσω το Κατάταξη ...