Misc

Optimizacija kode v mikrokrmilnikih

Avtor: Laura McKinney
Datum Ustvarjanja: 4 April 2021
Datum Posodobitve: 16 Maj 2024
Anonim
Optimizacija kode v mikrokrmilnikih - Misc
Optimizacija kode v mikrokrmilnikih - Misc

Vsebina

Avtor je zaključni inženirski projekt zaključil z mikrokrmilniki dsPic in pridobil obsežen vpogled v te naprave.

Koda v jeziku C mikrokrmilnika bo morda zahtevala optimizacijo v nekaterih naprednih aplikacijah. Ta optimizacija kode se izvaja za zmanjšanje dveh ključnih stvari:

  1. Velikost kode: Mikrokrmilniki lahko shranijo omejene podatke in navodila zaradi omejene velikosti RAM-a. Zato je treba kodo optimizirati, tako da bo mogoče razpoložljiva navodila in podatkovni pomnilnik izkoristiti na najučinkovitejši način.
  2. Časi izvrševanja kode: Mikrokrmilniki so zaporedne naprave, ki izvajajo po eno navodilo naenkrat. Vsako navodilo za sestavljanje porabi določeno število urnih ciklov, da se samoizvede. Zato je treba kodo optimizirati tako, da zagotavlja potrebno nalogo v najmanj številu urnih ciklov ali navodil za sestavljanje. Čim manj urnih ciklov koda uporablja, tem hitreje teče. To pomeni, da lahko aplikacije delujejo hitreje, ker so časi obdelave zmanjšani.

Ta članek predstavlja nasvete in trike, s katerimi lahko zmanjšate velikost in čas izvajanja kode mikrokrmilnika.


Mikročipov razvojni IDE MplabX bo uporabljen za prikaz primerov, kjer je to primerno.

Kako eksperimentalno izmeriti čas izvajanja kode

Če želite dobiti predstavo o tem, koliko časa vaša koda dejansko potrebuje za izvajanje v realnem času, jo morate poskusno izmeriti. Za merjenje časa izvajanja kode je mogoče priročno uporabiti logični analizator, zainteresirani pa se lahko o postopku za to pozanimajo pri meni po e-pošti. Poleg tega:

  • Nekateri prevajalniki imajo možnost štetja urnih ciklov, ki jih bo koda porabila.
  • Nekateri razhroščevalniki, na primer ICD 3 iz mikročipa, lahko neposredno merijo čas izvajanja s pomočjo štoparice.

1. Poznajte procesorsko moč in velikost pomnilnika vašega mikrokrmilnika

Taktna frekvenca (Mhz) ni vedno tista, ki daje resnično sliko hitrosti obdelave mikrokrmilnika, bolj realističen ukrep je MIPS (mega navodil na sekundo) ali število navodil, ki jih lahko MCU izvede v sekundi.

MCU se običajno gibljejo od 60–70 MIPS v vrhunski kategoriji do 20 MIPS 8-bitnih AVR-jev. Visok mikrokontroler MIPS bo verjetno dražji od naprave nižjega cenovnega razreda, zato imate tukaj kompromis med stroški in hitrostjo obdelave.


Mikrokrmilniki imajo ločen pomnilnik za shranjevanje podatkov in programske kode. Velikost obeh najdete v obrazcu. Če je koda bistveno velika, boste morda potrebovali MCU z večjo velikostjo pomnilnika.

2. Izbira spremenljivk za optimizacijo velikosti kode

Mikrokrmilniki imajo omejen podatkovni pomnilnik, običajno od 1 do 4 Kbytes. V tem primeru je pametno izbrati najprimernejšo vrsto spremenljivke glede na pričakovani obseg shranjenega datuma. Spodnja tabela povzema te spremenljivke:

Povzetek spremenljivk, ki se uporabljajo v jeziku C

SpremenljivkaVelikost v bajtihDoseg

bool

1

Samo 0 ali 1

char

1


-128 do 127

int

2

-32.768 do 32.767

nepodpisani int

2

0 do 65.535

dolga

4

-2,147,483,648 do 2,147,483,647

float

4

Natančno določite do 6 decimalnih mest

dvojno

8

Natančno določite do 15 decimalnih mest

dolga dvojna

10

Natančno določite do 19 decimalnih mest

Primer:

  • Če je treba dodati dve spremenljivki X in Y in rezultat shraniti v Z, vendar naj bi bila vrednost Z višja od 65.535 po seštevanju, se lahko Z razglasi za dolg in X in Y kot nepodpisana int, vrednosti X in Y prav tako ne bodo predvidoma negativne. Tako boste prihranili 04 bajtov podatkovnega pomnilnika, ki bi jih sicer porabili, če bi bile vse spremenljivke deklarirane tako dolgo.
  • Dve spremenljivki X in Y, katerih vrednosti naj bi bile v celih številih, je treba razdeliti, rezultat deljenja pa lahko da decimalno mesto, nato lahko X in Y razglasimo za int in rezultat lahko razglasimo za float ali double, odvisno natančnost.

Izbira vrste podatkov je lahko ključnega pomena pri deklariranju nizov, ki vsebujejo veliko število elementov.

3. Izbira spremenljivk za optimizacijo v času izvajanja kode

  • Ugotovljeno dejstvo je, da izračuni s plavajočo vejico trajajo dlje kot izračuni s fiksno vejico. Ne uporabljajte spremenljivke s plavajočo vejico, kjer decimalna vrednost ni potrebna. Delajte s celoštevili brez podpisa, kjer je to mogoče.
  • Lokalne spremenljivke imajo prednost pred globalnimi spremenljivkami. Če je spremenljivka uporabljena samo v funkciji, jo je treba v tej funkciji prijaviti, ker je dostop do globalnih spremenljivk počasnejši od lokalnih spremenljivk.
  • 8-bitni MCU bo hitreje našel enobajtno spremenljivko, 16-bitni MCU pa bo z lažjim dostopom do 2-bajtne spremenljivke lažje dostopal.

4. Optimizacija aritmetičnih operacij

Aritmetične operacije je mogoče optimizirati na naslednje načine.

  1. Uporabite iskalne tabele vnaprej izračunanih vrednosti, namesto da ocenjujete sinus ali katero koli drugo trigonometrično funkcijo ali katero koli drugo operacijo, katere rezultat je v kodi mogoče poznati vnaprej.
  2. Če je tabela iskanja sinusov že shranjena v pomnilniku, lahko kosinus izračunamo tako, da pomaknemo kazalec polja, enakovreden 90 stopinjam.
  3. Med štirimi aritmetičnimi operacijami delitev in množenje trajata največ časa obdelave, v praksi je lahko pri vrednostih s plavajočo vejico v območju približno sto mikro sekund.
  4. Namesto delitve in množenja uporabite navodila za premik bitov. Navodilo desne izmene 3 služi deljenju z 23 kjer bo kot navodilo za premik v levo 1 pomnoženo z 21.

5. Za intenzivne izračune uporabite mikrokrmilnik, ki podpira DSP

Nekateri mikrokrmilniki imajo v svojo arhitekturo vgrajeno procesorsko enoto DSP, ki je drugačna od običajne ALU. Ta mehanizem DSP je namenjen za izvajanje aritmetičnih izračunov zelo hitro v najmanjšem številu urnih ciklov (v večini primerov) velikokrat hitreje kot ALU.

Navodila, ki jih procesor DSP lahko izvede hitreje kot ALU, so:

  • Navodila za prestavljanje in vrtenje bitov.
  • Množenja, deljenja in druge računske operacije.
  • Ocenjevanje sinusov in drugih trigonometričnih funkcij.
  • Vse operacije DSP, kot so FFT, DFT, zvijanje in FIR filtriranje.

Uporaba mehanizma DSP mikrokrmilnika zahteva, da:

  • V projekt so vključene ločene knjižnice DSP.
  • Imena funkcij se razlikujejo od standardne matematične knjižnice jezika C. Dokumentacijo teh knjižnic in funkcij lahko dobite na spletnem mestu proizvajalcev.
  • DSP motor uporablja drugačen tip spremenljivke "delno". Naučite se uporabljati delne spremenljivke tipa, preden nadaljujete s funkcijami knjižnice dsp.

Upoštevajte, da standardne funkcije matematične knjižnice ne bodo sprožile mehanizma DSP, ker se prevedejo v navodila za sestavljanje ALU.

6. Delo s prekinitvami

Uporabite prekinitve za izvajanje določenih funkcij, kot so:

  • Branje vrednosti ADC.
  • Pošiljanje in prejemanje od UART.
  • Posodabljanje registrov delovnega cikla PWM.
  • CAN ali I2C komunikacija.

Prekinitve bodo te funkcije servisirale hitro v primerjavi z izvajanjem v glavnem delu s pomočjo funkcijskega klica ali vrstne kode.

Prekinitve se bodo sprožile tudi samo po potrebi, medtem ko se koda, če je kodirana v glavnem telesu, izvede v vsaki ponovitvi zanke while (1).

7. Uporabite najboljše razpoložljive prevajalnike

Prevajalniki lahko samodejno izvedejo nekatere zgoraj opisane optimizacije, medtem ko prevajajo kodo iz jezika C v jezik sestavljanja, če je pravilno konfiguriran. Poiščite možnosti za optimizacijo v vašem prevajalniku in po možnosti nadgradite na profesionalne različice prevajalnikov, ker so močnejši optimizatorji kode.

8. Pametno uporabljajte pogojne izjave

  • Ko uporabljate vrsto stavkov if-else, najprej upoštevajte najverjetnejše stanje. Tako MCU ne bo treba pregledati vseh pogojev, potem ko bo ugotovil resnično stanje.
  • Stavek preklopnega primera je ponavadi hitrejši, če je drugačen.
  • Namesto niza stavkov uporabite ugnezdene stavke if-else. Blok if-else, ki ima veliko stavkov, je lahko razdeljen na manjše podveje, da se optimizira v najslabšem (zadnjem) stanju.

9. Uporabite vgrajene funkcije

Funkcije, ki jih je treba v kodi uporabiti le enkrat, so lahko razglašene za statične. S tem bo prevajalnik optimiziral to funkcijo na vgrajeno funkcijo in zato za klic funkcije ne bo prevedena nobena zbirna koda.

  • Funkcijo lahko razglasimo za vrstico z uporabo ključne besede 'static'.

10. Uporabite znižane zanke

Zmanjšana zanka bo ustvarila manj montažne kode v primerjavi s povečano zanko.

To je zato, ker je v inkrementalni zanki potrebno primerjalno navodilo za primerjavo indeksa zanke z največjo vrednostjo v vsaki zanki, da se preveri, ali indeks zanke doseže največjo vrednost. Nasprotno pa v zanki zmanjšanja ta primerjava ni več potrebna, ker bo zmanjšan rezultat indeksa zanke določil ničelno zastavico v SREG, če doseže nič.

Glede na to, da mora zanka ponoviti stokrat, se z zmanjšanjem enega ukaza iz zanke izognemo stokratnemu izvajanju, zato bo učinek verjetno bolj pomemben, če mora zanka večkrat ponoviti.

Zavijanje

Ti nasveti so lahko koristni, vendar je njihova resnična uporaba in učinkovitost odvisna od spretnosti programerja in ukaza, ki ga ima na svoji kodi. Ne pozabite, da velikost programa ne določa vedno časov izvajanja, nekatera navodila lahko porabijo več urnih ciklov kot druga, zato morajo spet svoje znanje odigrati sposobnosti programa.

Ta članek je natančen in v skladu z avtorjevim znanjem. Vsebina je samo v informativne ali zabavne namene in ne nadomešča osebnih nasvetov ali strokovnih nasvetov v poslovnih, finančnih, pravnih ali tehničnih zadevah.

Danes

Deliti

Priročnik za razstavljanje in sestavljanje računalniškega sistema
Računalniki

Priročnik za razstavljanje in sestavljanje računalniškega sistema

em računalniški inženir v Indiji, ki e po ebej zanima za računalniško programiranje.V tem članku bomo izvedeli: Deli računalnikaKako raz taviti računalnikKako e taviti računalnikRačunalniški i tem je...
4 načini pretvorbe dokumenta Microsoft Word v PDF
Računalniki

4 načini pretvorbe dokumenta Microsoft Word v PDF

Melanie je diplomirala iz fizike in je študentka analitike in modeliranja. Vodi tudi YouTube kanal: The Curiou Coder.Ob tajajo številni razlogi, zakaj bi morda želeli, da je vaš Wordov dokument pdf. M...