Sekalaista

Koodin optimointi mikrokontrollereissa

Kirjoittaja: Laura McKinney
Luomispäivä: 4 Huhtikuu 2021
Päivityspäivä: 16 Saattaa 2024
Anonim
Koodin optimointi mikrokontrollereissa - Sekalaista
Koodin optimointi mikrokontrollereissa - Sekalaista

Sisältö

Kirjoittaja suoritti viimeisen vuoden suunnitteluprojektinsa dsPic-mikro-ohjaimilla saaden kattavan käsityksen näistä laitteista.

Mikrokontrollerin C-kielikoodi saattaa vaatia optimointia tietyissä edistyneissä sovelluksissa. Tätä koodin optimointia käytetään vähentämään kahta keskeistä asiaa:

  1. Koodin koko: Mikrokontrollerit voivat tallentaa rajoitettuja tietoja ja ohjeita RAM-muistinsa rajoitetun koon vuoksi. Siksi koodi on optimoitava, jotta käytettävissä olevaa käskyä ja datamuistia voidaan hyödyntää tehokkaimmin.
  2. Koodin suoritusajat: Mikrokontrollerit ovat peräkkäisiä laitteita, jotka suorittavat yhden käskyn kerrallaan. Jokainen asennusohje kuluttaa tietyn määrän kellojaksoja suorittaakseen itsensä. Siksi koodi on optimoitava sen varmistamiseksi, että se suorittaa vaaditun tehtävän vähimmässä määrin kellojaksoja tai asennusohjeita. Mitä vähemmän kellojaksoja koodi käyttää, sitä nopeammin se toimii. Tämä tarkoittaa, että sovellukset voivat toimia nopeammin, koska käsittelyajat minimoidaan.

Tässä artikkelissa on vinkkejä ja vihjeitä, joita voidaan käyttää pienentämään mikro-ohjainkoodin kokoa ja suoritusaikaa.


Microchipin MplabX-kehityksen IDE: tä käytetään esimerkkien esittelemiseen tarvittaessa.

Kuinka mitata koodin suoritusaikaa kokeellisesti

Saadaksesi käsityksen siitä, kuinka kauan koodisi tosiasiallinen suorittaminen vie reaaliajassa, sinun on mitattava se kokeellisesti. Loogista analysaattoria voidaan käyttää kätevästi koodin suoritusajan mittaamiseen, ja kiinnostuneet voivat tiedustella minulta tämän prosessista sähköpostitse. Tämän lisäksi:

  • Jotkut kääntäjät pystyvät laskemaan kellosyklit, joita koodi kuluttaa.
  • Jotkut virheenkorjaajat, esimerkiksi mikrosirun ICD 3, voivat mitata suoritusaikaa sekuntikellon kautta.

1. Tunne mikrokontrollerin prosessointiteho ja muistikoko

Kellotaajuus (Mhz) ei aina anna todellista kuvaa mikro-ohjaimen prosessointinopeudesta, realistisempi toimenpide on MIPS (mega-käskyt sekunnissa) tai MCU: n suorittamien käskyjen määrä sekunnissa.

MCU: t vaihtelevat yleensä huippuluokan 60–70 MIPS: stä 20 MIPS: n 8-bittiseen AVR: ään. Korkea MIPS-mikro-ohjain on todennäköisesti kalliimpi kuin matalaluokan laite, joten tässä on kompromissi kustannusten ja prosessointinopeuden välillä.


Mikro-ohjaimissa on erillinen muisti tietojen ja ohjelmakoodin tallentamiseen. Molempien koko löytyy lomakkeesta. Saatat tarvita suurempaa muistikokoa olevan MCU: n, jos koodisi on huomattavan suuri.

2. Koodikoon optimointimuuttujien valinta

Mikro-ohjaimilla on rajallista datamuistia, yleensä 1–4 kt. Tässä tapauksessa on järkevää valita sopivin muuttujatyyppi tallennettavan päivämäärän odotetun alueen mukaan. Seuraavassa taulukossa on yhteenveto näistä muuttujista:

Yhteenveto C-kielessä käytetyistä muuttujista.

Muuttujan tyyppiKoko tavuinaAlue

bool

1

Vain 0 tai 1

hiiltyä

1


-128-127

int

2

-32 768 - 32 767

allekirjoittamaton int

2

0 - 65 535

pitkä

4

-2 147 483 648 - 2 147 483 647

kellua

4

Tarkka enintään kuuden desimaalin tarkkuudella

kaksinkertainen

8

Tarkka enintään 15 desimaalin tarkkuudella

pitkä kaksinkertainen

10

Tarkka enintään 19 desimaalin tarkkuudella

Esimerkki:

  • Jos lisätään kaksi muuttujaa X ja Y ja tulos tallennetaan Z: ään, mutta Z: n arvon odotetaan olevan suurempi kuin 65,535 lisäyksen jälkeen, Z voidaan julistaa pitkäksi ja X ja Y voidaan ilmoittaa allekirjoittamattomiksi int, X: n ja Y: n arvojen ei myöskään odoteta olevan negatiivisia. Tämä tallentaa 04 tavua datamuistiin, joka muuten olisi käytetty loppuun, jos kaikki muuttujat ilmoitettaisiin niin pitkiksi.
  • Kaksi muuttujaa X ja Y, joiden arvojen oletetaan olevan kokonaislukuja, on jaettava, mutta jaon tulos voi tuottaa desimaalin, sitten X ja Y voidaan ilmoittaa int ja tulos voidaan julistaa kelluvaksi tai kaksinkertaiseksi riippuen vaadittu tarkkuus.

Tietotyypin valinta voi olla ratkaisevan tärkeää ilmoitettaessa matriiseja, jotka sisältävät suuren määrän elementtejä.

3. Muuttujien valinta optimointia varten koodin suorittamisaikaan

  • On vakiintunut tosiasia, että liukulukulaskelmat vievät kauemmin kuin kiinteän pisteen laskelmat. Älä käytä liukuluku-muuttujaa, jos desimaaliarvoa ei vaadita. Työskentele allekirjoittamattomien kokonaislukujen kanssa aina kun mahdollista.
  • Paikalliset muuttujat ovat parempia kuin globaalit muuttujat. Jos muuttujaa käytetään vain funktiossa, se on ilmoitettava siinä funktiossa, koska globaalien muuttujien käyttö on hitaampaa kuin paikalliset muuttujat.
  • 8-bittinen MCU löytää yhden tavun kokoisen muuttujan nopeammin ja 16-bittinen MCU löytää 2-tavun muuttujan, joka on helpommin saavutettavissa luodun osoitteen pituuden vuoksi.

4. Aritmeettisten operaatioiden optimointi

Aritmeettiset operaatiot voidaan optimoida seuraavilla tavoilla.

  1. Käytä etukäteen laskettujen arvojen hakutaulukoita sen sijaan, että arvioit sinin tai muun trigonometrisen funktion tai minkä tahansa muun operaation, jonka tulos voidaan tunnistaa etukäteen koodissa.
  2. Siinä tapauksessa, että sini-hakutaulukko on jo tallennettu muistiin, kosini voidaan arvioida edistämällä 90 astetta vastaavaa taulukon osoitinta.
  3. Neljän aritmeettisen operaation joukossa jakaminen ja kertolasku vievät eniten käsittelyaikaa, käytännössä se voi olla noin satojen mikrosekuntien välillä liukulukuarvojen ollessa kyseessä.
  4. Käytä bitinsiirto-ohjeita jakamisen ja kertomisen sijaan. Oikeansiirtokäsky 3 toimii jakamalla 23 missä vasemman siirtymän käsky 1 toimii kertomalla 21.

5. Käytä DSP-yhteensopivaa mikro-ohjainta intensiivisiin laskelmiin

Joissakin mikro-ohjaimissa on DSP-prosessointiyksikkö, joka on rakennettu niiden arkkitehtuuriin. Tämä DSP-moottori on suunniteltu suorittamaan aritmeettiset laskelmat erittäin nopeasti pienimmällä kellosyklien lukumäärällä (yksi useimmissa tapauksissa) monta kertaa nopeammin kuin ALU.

Ohjeet, jotka DSP-prosessori voi suorittaa nopeammin kuin ALU:

  • Bittisiirto- ja kierto-ohjeet.
  • Kertolasku, jako ja muut aritmeettiset operaatiot.
  • Sinien ja muiden trigonometristen toimintojen arviointi.
  • Kaikki DSP-toiminnot, kuten FFT, DFT, konvoluutio ja FIR-suodatus.

Mikrokontrollerin DSP-moottorin käyttäminen edellyttää, että:

  • Erilliset DSP-kirjastot sisällytetään projektiin.
  • Funktioiden nimet poikkeavat tavallisesta C-kielen matematiikkakirjastosta. Näiden kirjastojen ja toimintojen dokumentaatiota voi käyttää valmistajan verkkosivustolla.
  • DSP-moottori käyttää erilaista muuttujatyyppistä 'murto-osaa'. Opi käyttämään murto-osan muuttujia ennen kuin jatkat dsp-kirjastotoimintojen kanssa.

Huomaa, että tavalliset matematiikkakirjastotoiminnot eivät käynnistä DSP-moottoria, koska ne käännetään ALU: n asennusohjeiksi.

6. Työskentele keskeytysten kanssa

Käytä keskeytyksiä tiettyjen toimintojen suorittamiseen, kuten:

  • ADC-arvojen lukeminen.
  • Lähettäminen ja vastaanottaminen UART: lta.
  • PWM-käyttöjaksorekistereiden päivittäminen.
  • CAN- tai I2C-tiedonsiirto.

Keskeytykset palvelevat näitä toimintoja nopeasti verrattuna niiden suorittamiseen päärungossa toimintokutsun tai sisäisen koodin avulla.

Keskeytykset käynnistyvät myös vain tarvittaessa, kun taas koodattu päärungossa koodi suoritetaan jokaisella while (1) -silmukan iteraatiolla.

7. Käytä parhaita käytettävissä olevia kääntäjiä

Kääntäjät voivat automaattisesti toteuttaa joitain yllä mainituista optimoinneista ja kääntää koodin C-kielestä kokoonpanokieleksi, jos se on määritetty oikein. Etsi optimointivaihtoehtoja kääntäjältäsi ja päivitä kääntäjien ammattiversioihin, koska ne ovat tehokkaampia koodin optimoijia.

8. Käytä ehdollisia lausekkeita älykkäästi

  • Kun käytetään sarjaa if-else-lauseita, pidä todennäköisin ehto ensin. Tällä tavalla MCU: n ei tarvitse skannata kaikkia ehtoja todellisen kunnon löytämisen jälkeen.
  • Vaihtotapauslauseke on yleensä nopeampi kuin jos muu.
  • Käytä sisäkkäisiä if-else-lauseita lauseiden sarjan sijaan. Jos-muu-lohko, jolla on paljon lausekkeita, voidaan jakaa pienempiin alahakemuksiin optimoimiseksi pahimmassa tapauksessa (viimeinen).

9. Käytä Inline-toimintoja

Toiminnot, joita käytetään vain kerran koodissa, voidaan julistaa staattisiksi. Tämä saa kääntäjän optimoimaan kyseisen toiminnon rivifunktioksi, joten toimintokutsua varten ei käännetä kokoonpanokoodia.

  • Funktio voidaan julistaa inline-muotoon käyttämällä avainsanaa 'staattinen' sen kanssa.

10. Käytä vähennettyjä silmukoita

Pienennetty silmukka tuottaa vähemmän kokoonpanokoodia verrattuna inkrementoituun silmukkaan.

Tämä johtuu siitä, että inkrementtisilmukassa tarvitaan vertailukäsky verrata silmukkaindeksiä jokaisen silmukan maksimiarvoon sen tarkistamiseksi, saavuttaako silmukkaindeksi maksimiarvon. Päinvastoin vähenemispiirissä tätä vertailua ei enää tarvita, koska silmukan indeksin vähentynyt tulos asettaa nollalipun SREG: ssä, jos se saavuttaa nollan.

Koska silmukan on toistettava sata kertaa, yhden käskyn vähentäminen silmukasta estää sen suorittamisen sata kertaa, joten vaikutus on todennäköisesti merkittävämpi, kun silmukan on toistettava useita kertoja.

Käärimistä

Nämä vinkit voivat olla hyödyllisiä, mutta niiden todellinen soveltaminen ja teho riippuu ohjelmoijan taidoista ja komennosta, jonka hänellä on koodissaan. Muista, että ohjelman koko ei aina määrää suoritusaikoja, jotkut ohjeet saattavat kuluttaa enemmän kellojaksoja kuin toiset, joten jälleen kerran ohjelman taidoilla on oltava oma osuutensa.

Tämä artikkeli on kirjoittajan parhaiden tietojen mukaan tarkka ja todenmukainen. Sisältö on tarkoitettu vain tiedotus- tai ajanvietetarkoituksiin, eikä se korvaa henkilökohtaista tai ammatillista neuvontaa liike-, rahoitus-, laki- tai teknisissä asioissa.

Meidän Neuvomme

Suositella

AWS-sertifioitu SysOps-järjestelmänvalvojan tentti vs harjoitustestit: mikä on helpompaa?
Sekalaista

AWS-sertifioitu SysOps-järjestelmänvalvojan tentti vs harjoitustestit: mikä on helpompaa?

Minulla on AW Certified y Op Admini trator- ja AW Certified olution Architect - ertifikaatit.Varmi ta ennen ertifiointikokeen uorittami ta, että olet valmi läpäi emään. AW -li...
Vizio Sound Bar -ongelmien vianmääritys
Tietokoneet

Vizio Sound Bar -ongelmien vianmääritys

Maxilla on B. . joukkovie tinnä ä IU: lta, M.A. vie tinnä tä U I I: ltä ja jatkaa MBA-tutkintoa Web ter Univer ity ä.Vizio-äänipalkki voi täydentä...