Misc

Optimizimi i kodit në mikrokontrolluesit

Autor: Laura McKinney
Data E Krijimit: 4 Prill 2021
Datën E Azhurnimit: 16 Mund 2024
Anonim
Optimizimi i kodit në mikrokontrolluesit - Misc
Optimizimi i kodit në mikrokontrolluesit - Misc

Përmbajtje

Autori përfundoi projektin e tij të fundit të inxhinierisë me mikrokontrolluesit dsPic, duke fituar një pasqyrë të gjerë në këto pajisje.

Kodi i gjuhës C i një mikrokontrolluesi mund të kërkojë optimizim në disa aplikacione të përparuara. Ky optimizim i kodit praktikohet për të zvogëluar dy gjëra thelbësore:

  1. Madhësia e Kodit: Mikrokontrolluesit mund të ruajnë të dhëna dhe udhëzime të kufizuara për shkak të madhësisë së kufizuar të RAM-it të tyre. Prandaj, kodi duhet të optimizohet, në mënyrë që udhëzimet e disponueshme dhe kujtesa e të dhënave të mund të shfrytëzohen në mënyrën më efikase.
  2. Koha e ekzekutimit të kodit: Mikrokontrolluesit janë pajisje vijuese të cilat ekzekutojnë një udhëzim në të njëjtën kohë. Çdo udhëzim i montimit konsumon një numër të caktuar të cikleve të orës për të ekzekutuar vetveten. Prandaj, kodi duhet të jetë i optimizuar për t'u siguruar që ai kryen detyrën e kërkuar në numrin më të vogël të cikleve të orës ose udhëzimeve të montimit. Sa më pak cikle të orës që përdor një kod, aq më shpejt funksionon. Kjo do të thotë që aplikacionet mund të ekzekutohen më shpejt sepse kohët e përpunimit minimizohen.

Ky artikull paraqet këshilla dhe truket që mund të përdoren për të zvogëluar madhësinë dhe kohën e ekzekutimit të një kodi mikro-kontrollues.


Zhvillimi IDE i Mikroçipit MplabX do të përdoret për të demonstruar shembuj kur është e përshtatshme.

Si të matni kohën e ekzekutimit të kodit në mënyrë eksperimentale

Për të marrë një ide se sa kohë duhet në të vërtetë për të ekzekutuar kodi juaj, duhet ta matni atë në mënyrë eksperimentale. Një analizues logjik mund të përdoret në mënyrë të përshtatshme për të matur kohën e ekzekutimit të kodit dhe të interesuarit mund të pyesin për procesin për këtë nga unë në email. Përveç kësaj:

  • Disa përpilues kanë aftësinë për të numëruar ciklet e orës që një kod do të konsumojë.
  • Disa korrigjues për shembull, ICD 3 nga mikroçipi mund të matin drejtpërdrejt kohën e ekzekutimit përmes një kronometri.

1. Njohni fuqinë e përpunimit dhe madhësinë e kujtesës të mikrokontrolluesit tuaj

Jo gjithmonë frekuenca e orës (Mhz) jep atë pamje të vërtetë të shpejtësisë së përpunimit të një mikrokontrolluesi, një masë më realiste është MIPS (mega udhëzime për sekondë) ose numri i udhëzimeve që MCU mund të ekzekutojë në një sekondë.

MCU zakonisht variojnë nga 60-70 MIPS në kategorinë e niveleve të larta deri në 20 MIPS AVR 8-bit. Një mikrokontrollues i lartë MIPS ka të ngjarë të jetë më i shtrenjtë se sa një pajisje e ultë, kështu që këtu keni një shkëmbim midis kostos dhe shpejtësisë së përpunimit.


Mikro-kontrollorët kanë memorie të veçantë për ruajtjen e të dhënave dhe kodit të programit. Madhësia e të dyve mund të gjendet nga fleta e të dhënave. Mund t'ju duhet një MCU me madhësi më të madhe të kujtesës nëse kodi juaj është shumë i madh.

2. Zgjedhja e Variablave për Optimizimin në Madhësinë e Kodit

Mikro-kontrollorët kanë memorie të kufizuar të të dhënave, zakonisht variojnë nga 1 deri në 4 Kbytes. Në këtë rast është e mençur të zgjidhni llojin më të përshtatshëm të ndryshores sipas diapazonit të pritur të datës që ruhet. Tabela më poshtë përmbledh këto variabla:

Përmbledhje e variablave të përdorur në gjuhën C.

Lloji i ndryshueshëmMadhësia në bajtDiapazoni

bool

1

0 ose 1 vetëm

karro

1


-128 deri në 127

int

2

-32,768 deri në 32,767

i pa firmosur int

2

0 deri në 65,535

e gjate

4

-2,147,483,648 deri 2,147,483,647

noton

4

Saktësoni deri në 6 dhjetore

dyfish

8

Saktësoni deri në 15 dhjetore

dyshe e gjatë

10

Saktësoni deri në 19 dhjetore

Shembull:

  • Nëse duhen shtuar dy variabla X dhe Y dhe rezultati do të ruhet në Z por vlera e Z pritet të jetë më e lartë atëherë 65,535 pas shtimit atëherë Z mund të deklarohet si e gjatë dhe X dhe Y mund të deklarohen si të pa nënshkruar int, vlerat e X dhe Y gjithashtu nuk pritet të shkojnë negative. Kjo do të kursejë 04 bajtë në kujtesën e të dhënave që përndryshe do të ishin përdorur nëse të gjitha variablat do të deklaroheshin për aq kohë.
  • Dy variabla X dhe Y, vlerat e të cilave pritet të jenë në numër të plotë do të ndahen, por rezultati i ndarjes mund të japë një dhjetore, atëherë X dhe Y mund të deklarohen int dhe rezultati mund të deklarohet notues ose dyfish në varësi të saktësia e kërkuar.

Zgjedhja e llojit të të dhënave mund të jetë thelbësore kur deklaroni vargje që përmbajnë një numër të madh të elementeve.

3. Zgjedhja e Variablave për Optimizimin në Kohën e Ekzekutimit të Kodit

  • Shtë një fakt i vërtetuar që llogaritjet e pikave lundruese marrin më shumë kohë se llogaritjet e pikave fikse. Mos përdorni një ndryshore të pikës lundruese ku nuk kërkohet një vlerë dhjetore. Punoni me numrat e plotë të nënshkruar kudo që është e mundur.
  • Variablat lokalë preferohen nga ndryshoret globale. Nëse një variabël përdoret vetëm në një funksion, atëherë ajo duhet të deklarohet në atë funksion, sepse hyrja në variablat globale është më e ngadaltë sesa ndryshoret lokale.
  • Një MCU prej 8 bitësh do të gjejë një ndryshore të vetme me madhësi bajtesh më shpejt për tu hyrë dhe një MCU 16 bitëshe do të gjejë një variabël 2-bajtëshe më të lehtë për tu aksesuar për shkak të gjatësisë së adresës së gjeneruar.

4. Optimizimi i operacioneve aritmetike

Operacionet aritmetike mund të optimizohen në mënyrat e mëposhtme.

  1. Përdorni tabela kërkimi të vlerave të paracaktuara në vend që të vlerësoni një Sine ose ndonjë funksion tjetër trigonometrik ose ndonjë operacion tjetër rezultati i të cilit mund të dihet paraprakisht në kod.
  2. Në rast se një tryezë e kërkimit të sinusit është ruajtur tashmë në memorje, një kosinus mund të vlerësohet duke avancuar treguesin e ekranit ekuivalent me 90 gradë.
  3. Ndër katër operacionet aritmetike, pjesëtimi dhe shumëzimi marrin më shumë kohë përpunimi, në praktikë mund të jetë në intervalin e qindra mikro sekondave ose më shumë në rast të vlerave të pikave të lundrueshme.
  4. Përdorni udhëzime për zhvendosjen e bitit në vend të pjesëtimit dhe shumëzimit. Një udhëzim i ndërrimit të djathtë 3 shërben për të ndarë me 23 ku si udhëzim i ndërrimit të majtë 1 do të shërbejë për të shumëzuar me 21.

5. Përdorni një mikrokontrollues të aftë DSP për llogaritjet intensive

Disa mikrokontrollues kanë një njësi të përpunimit DSP tjetër, sesa ALU konvencionale të ndërtuar në arkitekturën e tyre. Ky motor DSP është i përshtatur për të kryer llogaritjet aritmetike shumë shpejt në numrin më të vogël të cikleve të orës (një në shumicën e rasteve) shumë herë më shpejt se ALU.

Udhëzimet që një procesor DSP mund të kryejë më shpejt sesa një ALU janë:

  • Udhëzime për zhvendosjen dhe rrotullimin e bitit.
  • Shumëzimet, pjesëtimet dhe veprimet e tjera aritmetike.
  • Vlerësimi i sinuseve dhe funksioneve të tjera trigonometrike.
  • Të gjitha operacionet DSP siç janë FFT, DFT, konvolucioni dhe filtrimi FIR.

Përdorimi i motorit DSP të një mikrokontrolluesi kërkon që:

  • Bibliotekat e ndara të DSP janë përfshirë në projekt.
  • Emrat e funksioneve janë të ndryshëm nga biblioteka standarde e matematikës në gjuhën C. Dokumentacioni i këtyre bibliotekave dhe funksioneve mund të përfitohet nga faqja përkatëse e prodhuesve.
  • Motori DSP shfrytëzon një tip të ndryshëm të ndryshueshëm 'fraksionale'. Mësoni si të përdorni variablat e tipit thyesor përpara se të vazhdoni me funksionet e bibliotekës dsp.

Vini re se funksionet standarde të bibliotekës së matematikës nuk do të përdorin motorin DSP sepse ato përkthehen në udhëzimet e montimit ALU.

6. Puna me ndërprerje

Përdorni ndërprerje për kryerjen e funksioneve specifike si:

  • Leximi i vlerave ADC.
  • Dërgimi dhe marrja nga UART.
  • Përditësimi i regjistrave të ciklit të punës PWM.
  • Komunikimi MUND ose I2C.

Ndërprerjet do t'i shërbejnë këto funksione shpejt në krahasim me kryerjen e tyre në trupin kryesor me anë të një thirrje funksioni ose kodi inline.

Ndërprerjet gjithashtu do të shkaktojnë vetëm kur kërkohet, ndërsa nëse kodohen në trupin kryesor, kodi do të ekzekutohet në çdo përsëritje të lakut while (1).

7. Përdorni përpiluesit më të mirë të disponueshëm

Përpiluesit mund të implementojnë automatikisht disa nga optimizmat e diskutuara më lart ndërsa përkthejnë kodin nga gjuha C në gjuhën e asamblesë nëse konfigurohet siç duhet. Kërkoni opsione optimizimi në përpiluesin tuaj dhe nëse është e mundur azhurnoni në versionet profesionale të përpiluesve sepse ato janë optimizues më të fuqishëm të kodit.

8. Përdorni deklaratat e kushtëzuara në mënyrë inteligjente

  • Kur përdorni një seri të pohimeve nëse-tjetër mbani së pari kushtin më të mundshëm. Në këtë mënyrë MCU nuk do të duhet të skanojë të gjitha kushtet pasi të gjejë gjendjen e vërtetë.
  • Një deklaratë e rastit kalimtar është zakonisht më e shpejtë se a-nëse-tjetër.
  • Përdorni deklarata të vendosura nëse-tjetër në vend të një serie deklaratash. Një bllok tjetër nëse ka shumë pohime mund të ndahet në nëndegë më të vegjël për të optimizuar për gjendjen më të keqe (të fundit).

9. Përdorni funksionet inline

Funksionet që do të përdoren vetëm një herë në kod mund të deklarohen si statike. Kjo do ta bëjë përpiluesin të zgjedh atë funksion në një funksion të brendshëm dhe kështu asnjë kod i montimit nuk do të përkthehet për thirrjen e funksionit.

  • Një funksion mund të deklarohet i brendshëm duke përdorur fjalën kyçe 'statike' me të.

10. Përdorni sythe të dekretuar

Një lak i zbritur do të gjenerojë më pak kod të montimit në krahasim me një lak të shtuar.

Kjo sepse në një lak me rritje, nevojitet një udhëzim krahasimi për të krahasuar indeksin e lakut me vlerën maksimale në çdo lak për të kontrolluar nëse indeksi i lakut arrin vlerën maksimale. Përkundrazi, në një lak zbritjeje, ky krahasim nuk është i nevojshëm më sepse rezultati i zvogëluar i indeksit të lakut do të vendosë flamurin zero në SREG nëse arrin zero.

Duke qenë se cikli duhet të përsëritet njëqind herë, zvogëlimi i një udhëzimi nga cikli do të shmangë ekzekutimin e tij njëqind herë, kështu që ndikimi ka të ngjarë të jetë më i rëndësishëm kur cikli duhet të përsëritet shumë herë.

Përfundon

Këto këshilla mund të jenë të dobishme, por zbatimi dhe fuqia e tyre e vërtetë varet nga aftësia e programuesit dhe komanda që ai ka në kodin e tij. Mos harroni, madhësia e programit nuk përcakton gjithmonë kohën e ekzekutimit, disa udhëzime mund të konsumojnë më shumë cikle të orës sesa tjetri, kështu që edhe një herë aftësitë e programit duhet të luajnë rolin e tyre.

Ky artikull është i saktë dhe i vërtetë për sa i përket njohurive të autorit. Përmbajtja është vetëm për qëllime informuese ose argëtuese dhe nuk zëvendëson këshillën personale ose këshillën profesionale në çështje biznesi, financiare, ligjore ose teknike.

Ne Ju Rekomandojmë

Ne Ju Rekomandojmë

Si të shtoni, fshini dhe zhvendosni audion e regjistruar në aplikacionin Microsoft OneNote
Telefonat

Si të shtoni, fshini dhe zhvendosni audion e regjistruar në aplikacionin Microsoft OneNote

Mak i mban një B. . në komunikimet ma ive nga IU, një MA në komunikimet nga U i I, dhe po ndjek një MBA nga Univer iteti Web ter.Aplikacioni Micro oft OneNote për paji je...
Pse ka përmbajtje të paligjshme në YouTube?
Internet

Pse ka përmbajtje të paligjshme në YouTube?

Youtube, në pronë i të Google, ë htë e mbu hur me përmbajtje të paligj hme. E timated htë vlerë uar e ka të paktën 200 milion video të palig...