Razno

Optimizacija koda u mikrokontrolerima

Autor: Laura McKinney
Datum Stvaranja: 4 Travanj 2021
Datum Ažuriranja: 16 Svibanj 2024
Anonim
Optimizacija koda u mikrokontrolerima - Razno
Optimizacija koda u mikrokontrolerima - Razno

Sadržaj

Autor je završio svoju posljednju godinu inženjerskog projekta s dsPic mikrokontrolerima, stekavši opsežan uvid u ove uređaje.

Kôd C-jezika mikrokontrolera može zahtijevati optimizaciju u određenim naprednim aplikacijama. Ova optimizacija koda vježba se kako bi se smanjile dvije ključne stvari:

  1. Veličina koda: Mikrokontroleri mogu pohraniti ograničene podatke i upute zbog ograničene veličine njihove RAM memorije. Stoga kod treba optimizirati, tako da se dostupne upute i memorija podataka mogu iskoristiti na najučinkovitiji način.
  2. Vremena izvršavanja koda: Mikrokontroleri su sekvencijalni uređaji koji izvršavaju jednu po jednu naredbu. Svaka uputa za sastavljanje troši određeni broj taktova za samo izvršavanje. Stoga kod mora biti optimiziran kako bi se osiguralo da izvršava potrebni zadatak u najmanje broju ciklusa takta ili uputa za montažu. Što kôd koristi manje ciklusa sata, to je brži. To znači da se aplikacije mogu brže izvoditi jer je vrijeme obrade minimalizirano.

Ovaj članak predstavlja savjete i trikove koji se mogu koristiti za smanjenje veličine i vremena izvršavanja koda mikrokontrolera.


Microchip-ov razvojni IDE za MplabX koristit će se za demonstraciju primjera tamo gdje je to prikladno.

Kako eksperimentalno izmjeriti vrijeme izvršavanja koda

Da biste dobili ideju koliko vremena vašem kodu zapravo treba za izvršavanje u stvarnom vremenu, trebate ga eksperimentalno izmjeriti. Logički analizator može se prikladno koristiti za mjerenje vremena izvršavanja koda, a zainteresirani mogu putem e-pošte pitati za postupak za to. Pored ovoga:

  • Neki kompajleri imaju mogućnost brojanja ciklusa takta koje će kôd potrošiti.
  • Neki ispravljači programa, na primjer ICD 3 iz mikročipa, mogu izravno mjeriti vrijeme izvršavanja putem štoperice.

1. Znajte procesorsku snagu i veličinu memorije vašeg mikrokontrolera

Nije uvijek frekvencija takta (Mhz) ono što daje pravu sliku brzine obrade mikrokontrolera, realnija mjera je MIPS (mega upute u sekundi) ili broj uputa koje MCU može izvršiti u sekundi.

MCU-ovi se obično kreću od 60–70 MIPS u high-end kategoriji do 20 MIPS 8-bitnih AVR-a. Visoki MIPS mikrokontroler vjerojatno će biti skuplji od jeftinog uređaja, tako da ovdje imate kompromis između cijene i brzine obrade.


Mikrokontroleri imaju odvojenu memoriju za pohranu podataka i programskog koda. Veličina obojice može se pronaći u tehničkom listu. Možda će vam trebati MCU s većom veličinom memorije ako je vaš kod bitno velik.

2. Izbor varijabli za optimizaciju u veličini koda

Mikrokontroleri imaju ograničenu memoriju podataka, obično u rasponu od 1 do 4 Kbytes. U ovom je slučaju pametno odabrati najprikladniju vrstu varijable prema očekivanom rasponu datuma koji se pohranjuje. Tablica u nastavku sažima ove varijable:

Sažetak varijabli koje se koriste u C-jeziku.

Tip varijableVeličina u bajtovimaDomet

bool

1

Samo 0 ili 1

ugljen

1


-128 do 127

int

2

-32.768 do 32.767

nepotpisani int

2

0 do 65.535

dugo

4

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

plutati

4

Precizno do 6 decimalnih mjesta

dvostruko

8

Precizno do 15 decimalnih mjesta

dugi dvostruki

10

Precizno do 19 decimalnih mjesta

Primjer:

  • Ako se dodaju dvije varijable X i Y i rezultat pohrani u Z, ali očekuje se da će vrijednost Z biti veća od 65.535 nakon zbrajanja, tada se Z može proglasiti dugačkom, a X i Y kao nepotpisane int, vrijednosti X i Y također se ne očekuju negativne. To će uštedjeti 04 bajta u memoriji podataka koji bi se inače potrošili da su sve varijable deklarirane kao dugačke.
  • Dvije varijable X i Y, čije se vrijednosti očekuju u cijelim brojevima, trebaju se podijeliti, ali rezultat dijeljenja može dati decimalu, zatim X i Y mogu se proglasiti int, a rezultat se može proglasiti floatom ili dvostrukim, ovisno o potrebna preciznost.

Izbor vrste podataka može biti presudan kada se deklariraju nizovi koji sadrže velik broj elemenata.

3. Izbor varijabli za optimizaciju u vremenu izvršavanja koda

  • Utvrđena je činjenica da izračuni s pomičnom zarezom traju dulje od izračuna s fiksnom točkom. Ne koristite varijablu s pomičnom zarezom tamo gdje decimalna vrijednost nije potrebna. Radite s nepotpisanim cijelim brojevima gdje god je to moguće.
  • Lokalne varijable imaju prednost pred globalnim varijablama. Ako se varijabla koristi samo u funkciji, tada se ona mora deklarirati u toj funkciji jer je pristup globalnim varijablama sporiji od lokalnih varijabli.
  • 8-bitni MCU pronaći će varijablu veličine jednog bajta brže za pristup, a 16-bitni MCU pronaći će varijablu od 2 bajta kojoj je lakše pristupiti zbog duljine generirane adrese.

4. Optimizacija aritmetičkih operacija

Aritmetičke operacije mogu se optimizirati na sljedeće načine.

  1. Upotrijebite tablice pretraživanja unaprijed izračunatih vrijednosti umjesto da procjenjujete sinus ili bilo koju drugu trigonometrijsku funkciju ili bilo koju drugu operaciju čiji rezultat može biti unaprijed poznat u kodu.
  2. U slučaju da je tablica pretraživanja sinusa već pohranjena u memoriji, kosinus se može izračunati pomicanjem pokazivača polja ekvivalentnog 90 stupnjeva.
  3. Među četiri aritmetičke operacije, dijeljenje i množenje oduzimaju najviše vremena obrade, u praksi to može biti u rasponu od stotina mikro-sekundi u slučaju vrijednosti s pomičnom zarezom.
  4. Upotrijebite upute za pomak bitova umjesto dijeljenja i množenja. Uputa za desni pomak 3 služi za dijeljenje s 23 gdje će kao lijeva smjena instrukcija 1 poslužiti za množenje s 21.

5. Upotrijebite mikrokontroler s mogućnošću DSP-a za intenzivne izračune

Neki mikrokontroleri imaju DSP procesnu jedinicu koja je drugačija od uobičajene ALU ugrađene u njihovu arhitekturu. Ovaj DSP mehanizam namijenjen je izvođenju aritmetičkih izračuna vrlo brzo u najmanjem broju taktova (jedan u većini slučajeva) mnogo puta brže od ALU.

Upute koje DSP procesor može izvršiti brže od ALU-a su:

  • Upute za pomicanje i okretanje bitova.
  • Množenja, dijeljenja i ostale računske radnje.
  • Procjena sinusa i ostalih trigonometrijskih funkcija.
  • Sve DSP operacije kao što su FFT, DFT, konvolucija i FIR filtriranje.

Korištenje DSP motora mikrokontrolera zahtijeva sljedeće:

  • U projekt su ugrađene zasebne DSP knjižnice.
  • Imena funkcija razlikuju se od standardne matematičke biblioteke C jezika. Dokumentacija ovih knjižnica i funkcija može se dobiti na web mjestu pojedinih proizvođača.
  • DSP motor koristi drugačiji varijabilni tip 'frakcijski'. Naučite kako koristiti varijable frakcijskog tipa prije nego što nastavite s funkcijama biblioteke dsp.

Imajte na umu da standardne funkcije matematičke knjižnice neće pozivati ​​DSP mehanizam jer se prevode u upute za sastavljanje ALU.

6. Rad s prekidima

Koristite prekide za obavljanje određenih funkcija kao što su:

  • Čitanje ADC vrijednosti.
  • Slanje i primanje od UART-a.
  • Ažuriranje registara radnog ciklusa PWM-a.
  • CAN ili I2C komunikacija.

Prekidi će ove funkcije servisirati brzo u usporedbi s njihovim izvršavanjem u glavnom tijelu putem poziva funkcije ili ugrađenog koda.

Prekidi će se također aktivirati samo kada je to potrebno, dok ako se kodira u glavnom tijelu, kôd će se izvršiti u svakoj iteraciji while (1) petlje.

7. Koristite najbolje dostupne kompajlere

Prevoditelji mogu automatski implementirati neke od gore spomenutih optimizacija, dok prevode kôd s C-jezika na montažni jezik ako su pravilno konfigurirani. Potražite opcije optimizacije u vašem kompajleru i, ako je moguće, nadogradite ih na profesionalne verzije kompajlera jer su oni moćniji optimizatori koda.

8. Inteligentno koristite uvjetne izjave

  • Kada koristite niz if-else naredbi, prvo zadržite najvjerojatnije stanje. Na taj način MCU neće morati skenirati sve uvjete nakon što utvrdi istinsko stanje.
  • Izjava o slučaju prebacivanja obično je brža, ako je drugačije.
  • Upotrijebite ugniježđene if-else izraze umjesto niza naredbi. Blok if-else koji ima mnogo izraza može se podijeliti u manje podgrane radi optimizacije u najgorem slučaju (posljednjem) stanju.

9. Koristite ugrađene funkcije

Funkcije koje se trebaju koristiti samo jednom u kodu mogu se deklarirati kao statične. To će natjerati kompajler da optimizira tu funkciju na ugrađenu funkciju i stoga neće biti preveden nijedan kôd sklopa za poziv funkcije.

  • Funkcija se može proglasiti ugrađenom pomoću ključne riječi 'static' s njom.

10. Upotrijebite smanjene petlje

Dekrementirana petlja generirat će manje koda sklopa u odnosu na povećanu petlju.

To je zato što je u petlji prirasta potrebna uputa za usporedbu za usporedbu indeksa petlje s maksimalnom vrijednošću u svakoj petlji kako bi se provjerilo doseže li indeks petlje maksimalnu vrijednost. Suprotno tome, u petlji smanjenja ova usporedba više nije potrebna jer će smanjeni rezultat indeksa petlje postaviti nultu zastavicu u SREG ako dosegne nulu.

S obzirom na to da petlja mora ponoviti sto puta, smanjivanjem jedne naredbe iz petlje izbjeći će se njezino izvršavanje stotinu puta, pa će utjecaj vjerojatno biti značajniji kada petlja mora ponoviti više puta.

Završavati

Ovi savjeti mogu biti korisni, ali njihova istinska primjena i učinkovitost ovise o vještini programera i naredbi koju ima na svom kodu. Zapamtite, veličina programa ne određuje uvijek vrijeme izvršavanja, neke upute mogu potrošiti više ciklusa takta nego druge, pa opet vještine programa moraju odigrati svoju ulogu.

Ovaj je članak točan i vjeran prema autorskom znanju. Sadržaj je samo u informativne ili zabavne svrhe i ne zamjenjuje osobne savjete ili profesionalne savjete u poslovnim, financijskim, pravnim ili tehničkim pitanjima.

Zanimljivi Postovi

Popularno Danas

15 Prednosti GPS-a
Razno

15 Prednosti GPS-a

Pavlova tra t prema tehnologiji i digitalnim medijima eže više od 30 godina. Rođen u Velikoj Britaniji, a dana živi u AD-u.GP je kraćenica od Global Po itioning y tem. u tav kori ti ignale koji e pren...
4 primjera različitih vrsta računala
Računala

4 primjera različitih vrsta računala

Patrick, računalni tehničar, predani je pi ac koji želi vijet učiniti boljim informiranjem pojedinaca koji traže više znanja.Imamo četiri različite vr te računala kla ificirane prema njihovoj izvedbi,...