Meedecher

Code Optimiséierung a Microcontrollers

Auteur: Laura McKinney
Denlaod Vun Der Kreatioun: 4 Abrëll 2021
Update Datum: 16 Mee 2024
Anonim
Code Optimiséierung a Microcontrollers - Meedecher
Code Optimiséierung a Microcontrollers - Meedecher

Inhalt

Den Autor huet säi leschte Joer Ingenieursprojet mat den dsPic Micro-Controller ofgeschloss, an huet extensiv Abléck an dësen Apparater kritt.

E C-Sproochcode vun engem Microcontroller kann a bestëmmte fortgeschrattenen Uwendungen Optimiséierung erfuerderen. Dëse Code Optimisatioun gëtt praktizéiert fir zwee entscheedend Saachen ze reduzéieren:

  1. Code Gréisst: Microcontrollers kënne limitéiert Daten an Instruktioune späichere wéinst der limitéierter Gréisst vun hirem RAM. Dofir muss de Code optimiséiert ginn, sou datt déi verfügbar Instruktioun an d'Datenspeicher op effizientst Manéier benotzt kënne ginn.
  2. Code Ausféierung Times: Mikrokontroller si sequenziell Geräter déi all Kéier eng Instruktioun ausféieren. All Versammlungsanweisung verbraucht eng gewëssen Unzuel u Auerzyklen fir sech selwer auszeféieren. Dofir muss de Code optimiséiert ginn fir sécherzestellen datt en déi erfuerderlech Aufgab a mannst Unzuel u Auerzyklen oder Montageanweisungen ausféiert. Wat manner Auerzyklen e Code benotzt, wat se méi séier leeft. Dëst bedeit datt Uwendunge méi séier kënne lafen, well d'Veraarbechtzäite miniméiert sinn.

Dësen Artikel presentéiert Tipps an Tricks déi kënne benotzt ginn fir d'Gréisst an d'Ausféierungszäit vun engem Micro-Controller Code ze reduzéieren.


Microchip's MplabX Entwécklung IDE gëtt benotzt fir Beispiller ze demonstréieren wou et passend ass.

Wéi Code Ausféierung Zäit Experimentell ze Moossen

Fir eng Iddi ze kréien wéi vill Zäit Äre Code tatsächlech brauch fir an Echtzäit auszeféieren, musst Dir et experimentell moossen. E Logikanalysator kann bequem benotzt gi fir d'Code Exekutiounszäit ze moossen an déi interesséiert kënnen iwwer dëse Prozess vu mir per E-Mail informéieren. Niewent dësem:

  • E puer Compileren hunn d'Fäegkeet d'Auerzyklen ze zielen déi e Code verbraucht.
  • E puer Debuggeren zum Beispill den ICD 3 vu Mikrochip kënnen d'Ausféierungszäit direkt duerch eng Stopwatch moossen.

1. Wësst d'Veraarbechtungskraaft a Gedächtnisgréisst vun Ärem Microcontroller

Et ass net ëmmer d'Auerfrequenz (Mhz) déi e richtegt Bild vun der Veraarbechtungsgeschwindegkeet vun engem Mikro-Controller gëtt, eng méi realistesch Moossnam ass MIPS (mega Instruktiounen pro Sekonn) oder d'Zuel vun den Instruktioune MCU kann an enger Sekonn ausféieren.

MCUe reegelen normalerweis vu 60-70 MIPS an der High-End Kategorie bis 20 MIPS 8-Bit AVRen. En héije MIPS Mikro-Controller ass méiglecherweis méi deier wéi en Low-End-Apparat, also hei hutt Dir e Kompromiss tëscht Käschten a Veraarbechtungsgeschwindegkeet.


Mikro-Controller hunn e separat Gedächtnis fir Daten a Programmcode ze späicheren. D'Gréisst vun deenen zwee kann aus der Informatiounsblat fonnt ginn. Dir braucht e MCU mat méi grousser Gedächtnisgréisst wann Äre Code wesentlech grouss ass.

2. Wiel vu Variabelen fir Optimiséierung an der Code Gréisst

Mikro-Controller hunn eng limitéiert Datenminne, meeschtens tëscht 1 a 4 Kbytes. An dësem Fall ass et schlau déi passendst Variabeltyp ze wielen no dem erwuessene Beräich vum Datum dat gespäichert gëtt. D'Tabell hei ënnen resüméiert dës Variabelen:

Zesummefaassung vu Variabelen déi an der C-Sprooch benotzt ginn.

Variabel TypGréisst a BytesReechwäit

bool

1

Nëmmen 0 oder 1

char

1


-128 bis 127

int

2

-32.768 op 32.767

net ënnerschriwwen int

2

0 bis 65.535

laang

4

-2,147,483,648 op 2,147,483,647

Schwammen

4

Präzis bis zu 6 Dezimalplazen

duebel

8

Präzis bis zu 15 Dezimalplazen

laang duebel

10

Präzis bis zu 19 Dezimalplazen

Beispill:

  • Wann zwou Variabelen X an Y bäigesat ginn an d'Resultat soll an Z gespäichert ginn awer de Wäert vun Z soll méi héich sinn wéi 65.535 nom Zousaz kann Z als laang deklaréiert ginn an X an Y kënnen als net signéiert deklaréiert ginn int, Wäerter vun X an Y ginn och net erwaart negativ ze ginn. Dëst spuert 04 Bytes am Datenspäicher, dat soss opgebraucht wier, wann all Verännerlechen esou laang deklaréiert ginn.
  • Zwou Variabelen X an Y, deenen hir Wäerter a ganzen Zuelen erwaart ginn, sollen opgedeelt ginn, awer d'Resultat vun der Divisioun kann eng Dezimalzuel bréngen, da kënnen X an Y deklaréiert ginn an d'Resultat kann e Flot oder Duebel deklaréiert ginn ofhängeg vun déi néideg Präzisioun.

Wiel vum Datentyp kann entscheedend sinn wann Arrays mat grousser Zuel vun Elementer deklaréieren.

3. Wiel vu Variabelen fir Optimiséierung an der Code Execution Time

  • Et ass eng etabléiert Tatsaach datt d'Flottepunkt Berechnunge méi laang dauere wéi Fixpunkt Berechnungen. Benotzt keng Schwammpunkt Variabel wou en Dezimalwäert net erfuerderlech ass. Schafft mat net signéierte ganz Zuelen, wou et méiglech ass.
  • Lokal Variabelen gi léiwer wéi global Variabelen. Wann eng Variabel nëmmen an enger Funktioun benotzt gëtt da muss se an där Funktioun deklaréiert ginn well Zougang zu globale Variabelen méi lues ass wéi lokal Variabelen.
  • En 8-Bit MCU fënnt eng eenzeg Byte-Gréisst Variabel méi séier fir Zougang ze kréien an eng 16-Bit MCU fënnt eng 2-Byte Variabel méi einfach zougänglech wéinst der generéierter Adresslängt.

4. Optimiséiere vun arithmetesche Operatiounen

Arithmetesch Operatiounen kënnen op folgend Weeër optimiséiert ginn.

  1. Benotzt Look-up Dëscher vu viraus berechnete Wäerter anstatt eng Sine oder all aner trigonometresch Funktioun oder all aner Operatioun ze evaluéieren, deem säi Resultat am Viraus kann am Code bekannt ginn.
  2. Am Fall wou eng sine Look-up Tabelle schonn an der Erënnerung gespäichert ass, kann e Kosinus evaluéiert ginn andeems en de Arrayweiger entsprécht 90 Grad.
  3. Ënnert de véier arithmetesche Operatiounen, Divisioun a Multiplikatioun huelen déi meeschte Veraarbechtungszäit, an der Praxis kann et am Beräich vun Honnerte vu Mikro-Sekonne sinn oder esou am Fall vu Schwammpunktwäerter.
  4. Benotzt Bit Shift Instruktiounen anstatt Divisioun a Multiplikatioun. Eng richteg Verschiebungsinstruktioun 3 déngt fir duerch 2 ze deelen3 wou als lénks Verréckelungsinstruktioun 1 déngt mat 2 ze multiplizéieren1.

5. Benotzt en DSP Capable Microcontroller fir intensiv Berechnungen

E puer Mikrocontroller hunn eng DSP Veraarbechtungseenheet aner wéi déi konventionell ALU an hir Architektur gebaut. Dësen DSP-Motor ass ausgeriicht fir arithmetesch Berechnunge ganz séier an der mannster Zuel vu Auerzyklen (een an de meeschte Fäll) vill méi séier wéi ALU ze maachen.

Instruktioune kann en DSP Prozessor méi séier maachen wéi eng ALU sinn:

  • Bit Verschiebung an rotéiert Instruktiounen.
  • Multiplikatiounen, Divisiounen an aner arithmetesch Operatiounen.
  • Evaluéieren Sines an aner trigonometresch Funktiounen.
  • All DSP Operatiounen wéi FFT, DFT, Konvolutioun a FIR Filteren.

Den DSP Motor vun engem Microcontroller ze benotzen erfuerdert datt:

  • Separat DSP Bibliothéiken sinn an de Projet agebaut.
  • Nimm vun de Funktiounen ënnerscheede sech vun der Standard Mathematikbibliothéik vun der C-Sprooch. Dokumentatioun vun dëse Bibliothéiken a Funktiounen kann op der jeweileger Hiersteller Websäit benotzt ginn.
  • DSP Motor benotzt en anere variabelen Typ 'fractional'. Léiert wéi Dir fraktionéiert Typ Variabelen benotzt ier Dir mat dsp Bibliothéiksfunktiounen weidergitt.

Bedenkt datt Standard Mathematikbibliothéikfunktiounen den DSP-Motor net opruffen, well se an ALU Montageanweisungen iwwersat ginn.

6. Schafft mat Ënnerbriechungen

Benotzt Ënnerbriechunge fir spezifesch Funktiounen auszeféieren wéi:

  • Liesen ADC Wäerter.
  • Schécken a kréien vun UART.
  • Aktualiséierung vum PWM Duty Cycle Registers.
  • KANN oder I2C Kommunikatioun.

Interrupts ginn dës Funktiounen séier zerwéiert am Verglach mat der Ausféierung vun hinnen am Haaptkierper iwwer e Funktiounsruff oder Inline Code.

Interrupts ginn och nëmmen ausgeléist wann et néideg ass, wärend wann se am Haaptkierper kodéiert sinn, gëtt de Code an all Iteratioun vun der Zäit (1) Loop ausgeführt.

7. Benotzt déi bescht verfügbare Compiler

Compilers kënnen automatesch e puer vun den uewe beschriwwen Optimiséierungen ëmsetzen beim Iwwersetzen vum Code vun der C-Sprooch op d'Versammlungssprooch wann se richteg konfiguréiert sinn. Kuckt d'Optimiséierungsoptiounen an Ärem Compiler a wa méiglech Upgrade op professionnell Versioune vu Compileren well se méi staark Code Optimizer sinn.

8. Benotzt Conditionnel Aussoen intelligent

  • Wann Dir eng Serie vun wann-anescht Aussoen benotzt, behält déi wahrscheinlechste Konditioun als éischt. Dëse Wee muss de MCU net duerch all d'Konditioune scannen nodeems se de richtegen Zoustand fënnt.
  • Eng Switch-Case Ausso ass normalerweis méi séier wéi en wann-anescht.
  • Benotzt geneste wann-anescht Aussoen op der Plaz vun enger Serie vun Aussoen. En wann-anescht Block mat villen Aussoen kann a méi kleng Ënnerbanchen opgedeelt ginn fir am schlëmmste Fall (leschten) Zoustand ze optimiséieren.

9. Benotzt Inline Funktiounen

Funktiounen déi nëmmen eemol am Code benotzt solle ginn als statesch deklaréiert. Dëst wäert de Compiler dës Funktioun op eng Inline Funktioun optimiséieren an dofir gëtt kee Versammlungscode fir de Funktiounsruff iwwersat.

  • Eng Funktioun kann en Inline deklaréiert ginn mam Schlësselwuert 'statesch' domat.

10. Benotzt dekrementéiert Loopen

Eng dekrementéiert Loop generéiert manner Versammlungscode am Verglach mat enger inkrementéierter Loop.

Dat ass well an enger Inkrementschleife eng Vergläichsanweisung gebraucht gëtt fir de Loopindex mam maximale Wäert an all Loop ze vergläichen fir ze kontrolléieren ob de Loopindex de maximale Wäert erreecht. Am Géigendeel an enger Dekrementschleife, ass dëse Verglach net méi gebraucht well dat dekrementéiert Resultat vum Loopindex de Nullfändel am SREG setzt wann et Null erreecht.

Entscheet datt d'Loop honnert Mol muss iteréieren, eng Uweisung aus der Loop ze reduzéieren vermeit datt se honnert Mol ausgefouert gëtt, sou datt den Impakt wahrscheinlech méi bedeitend ass wann d'Loop oft muss iteréieren.

Oprappen

Dës Tipps kënnen hëllefräich sinn awer hir richteg Uwendung a Potenz hänkt vun der Fäegkeet vum Programméierer of a vum Kommando op sengem Code. Denkt drun, d'Gréisst vum Programm bestëmmt net ëmmer d'Ausféierungszäiten, e puer Instruktioune kënne méi Auerzykele verbrauchen an déi aner also nach eng Kéier d'Fäegkeete vum Programm mussen hiren Deel spillen.

Dësen Artikel ass korrekt a richteg no beschtem Wëssen vum Auteur. Inhalt ass nëmme fir Informatiouns- oder Ënnerhalungszwecker an ersetzt net fir perséinlech Berodung oder professionell Berodung a geschäftlechen, finanziellen, legalen oder techneschen Themen.

Mir Roden Iech Ze Gesinn

Frësch Post Posts

Woodward Fab Bead Roller vs Eastwood vs Harbor Fracht Bead Roller
Industriell

Woodward Fab Bead Roller vs Eastwood vs Harbor Fracht Bead Roller

Bead Roller inn Au rü tung déi an enger Fabrikatioun anlag benotzt gi fir Metaller ze formen. Am We entlechen a et en einfache Gang- a Kierbelgedriwwe Gerät mat weiblechen a männle...
8 Bescht Budget Z270 1151 Kaby Lake Motherboards ënner $ 200 2019
Computeren

8 Bescht Budget Z270 1151 Kaby Lake Motherboards ënner $ 200 2019

Wärend Coffee Lake verëffentlecht gouf kënnt Dir vill Wäert beim Kaf vun enger neier oder benotzt Kaby Lake CPU fannen. Dë t inn nach ëmmer eng zolitt Optioun fir pillaar...