Misc

Optimalizace kódu v mikrokontrolérech

Autor: Laura McKinney
Datum Vytvoření: 4 Duben 2021
Datum Aktualizace: 16 Smět 2024
Anonim
Wireless MS-DOS Networking using a Serial Port and an ESP8266!
Video: Wireless MS-DOS Networking using a Serial Port and an ESP8266!

Obsah

Autor dokončil svůj závěrečný inženýrský projekt s mikrokontroléry dsPic a získal rozsáhlý přehled o těchto zařízeních.

Kód mikrokontroléru v jazyce C může vyžadovat optimalizaci v některých pokročilých aplikacích. Tato optimalizace kódu se praktikuje, aby se snížily dvě zásadní věci:

  1. Velikost kódu: Mikrokontroléry mohou ukládat omezená data a pokyny z důvodu omezené velikosti jejich RAM. Proto je třeba kód optimalizovat, aby bylo možné co nejefektivněji využít dostupnou instrukční a datovou paměť.
  2. Doby provedení kódu: Mikrokontroléry jsou sekvenční zařízení, která provádějí jednu instrukci najednou. Každá montážní instrukce spotřebuje určitý počet hodinových cyklů, aby se mohla sama provést. Proto musí být kód optimalizován, aby bylo zajištěno, že provede požadovaný úkol v co nejmenším počtu hodinových cyklů nebo montážních pokynů. Čím méně hodinových cyklů kód používá, tím rychleji běží. To znamená, že aplikace mohou běžet rychleji, protože jsou minimalizovány doby zpracování.

Tento článek představuje tipy a triky, které lze použít ke snížení velikosti a doby provedení kódu mikrokontroléru.


Vývojové prostředí IDE Microchip MplabX bude použito k předvedení příkladů, kde je to vhodné.

Jak experimentálně měřit čas provádění kódu

Chcete-li získat představu o tom, kolik času vašemu kódu ve skutečnosti trvá spuštění v reálném čase, musíte jej měřit experimentálně. Logický analyzátor lze pohodlně použít k měření času spuštění kódu a zájemci se mohou o tomto procesu zeptat ode mne na e-mail. Mimoto:

  • Někteří kompilátoři mají schopnost počítat hodinové cykly, které kód spotřebuje.
  • Některé debuggery, například ICD 3 z mikročipu, mohou přímo měřit čas provádění pomocí stopek.

1. Zjistěte výpočetní výkon a velikost paměti vašeho mikrokontroléru

Není to vždy frekvence hodin (Mhz), která poskytuje skutečný obraz o rychlosti zpracování mikrokontroléru, realističtějším měřítkem je MIPS (mega instrukce za sekundu) nebo počet instrukcí, které může MCU provést za sekundu.

MCU se obvykle pohybují od 60–70 MIPS ve špičkové kategorii do 20 MIPS 8bitových AVR. Mikrokontrolér s vysokou úrovní MIPS bude pravděpodobně dražší než zařízení nižší třídy, takže zde máte kompromis mezi cenou a rychlostí zpracování.


Mikrokontroléry mají samostatnou paměť pro ukládání dat a programového kódu. Velikost obou je uvedena v datovém listu. Pokud je váš kód podstatně velký, možná budete potřebovat MCU s větší velikostí paměti.

2. Volba proměnných pro optimalizaci ve velikosti kódu

Mikrokontroléry mají omezenou datovou paměť, obvykle v rozmezí od 1 do 4 kB. V tomto případě je rozumné zvolit nejvhodnější typ proměnné podle očekávaného rozsahu ukládaného data. Níže uvedená tabulka shrnuje tyto proměnné:

Souhrn proměnných použitých v jazyce C.

Typ proměnnéVelikost v bajtechRozsah

bool

1

Pouze 0 nebo 1

char

1


-128 až 127

int

2

-32 768 až 32 767

nepodepsané int

2

0 až 65 535

dlouho

4

-2 147 483 648 až 2 147 483 647

plovák

4

Přesnost až na 6 desetinných míst

dvojnásobek

8

Přesnost až na 15 desetinných míst

dlouhý dvojitý

10

Přesnost až na 19 desetinných míst

Příklad:

  • Pokud mají být přidány dvě proměnné X a Y a výsledek má být uložen v Z, ale očekává se, že hodnota Z bude vyšší než 65 535 po přidání, pak Z může být deklarováno jako dlouhé a X a Y mohou být deklarovány jako nepodepsané int, také se neočekává, že hodnoty X a Y budou záporné. Tím se v datové paměti uloží 04 bajtů, které by se jinak vyčerpaly, pokud by všechny proměnné byly deklarovány tak dlouho.
  • Dvě proměnné X a Y, jejichž hodnoty se očekávají v celých číslech, se mají rozdělit, ale výsledek dělení může dát desetinnou čárku, pak X a Y mohou být deklarovány jako int a výsledek může být deklarován jako float nebo double v závislosti na požadovaná přesnost.

Při deklaraci polí obsahujících velké množství prvků může být rozhodující volba datového typu.

3. Volba proměnných pro optimalizaci v době provedení kódu

  • Je ustálenou skutečností, že výpočty s plovoucí desetinnou čárkou trvají déle než výpočty s pevnou řádovou čárkou. Nepoužívejte proměnnou s plovoucí desetinnou čárkou, kde není požadována desetinná hodnota. Pracujte s celými čísly bez znaménka, kdykoli je to možné.
  • Místní proměnné jsou upřednostňovány před globálními proměnnými. Pokud se proměnná používá pouze ve funkci, musí být v této funkci deklarována, protože přístup ke globálním proměnným je pomalejší než místní proměnné.
  • 8bitový MCU najde rychlejší přístup k jedné bajtové proměnné a 16bitový MCU najde 2bajtovou proměnnou, která bude snadněji přístupná kvůli délce generované adresy.

4. Optimalizace aritmetických operací

Aritmetické operace lze optimalizovat následujícími způsoby.

  1. Místo vyhodnocení sinusové funkce nebo jakékoli jiné trigonometrické funkce nebo jakékoli jiné operace, jejíž výsledek lze předem zjistit v kódu, použijte vyhledávací tabulky předem vypočítaných hodnot.
  2. V případě, že je v paměti již uložena vyhledávací tabulka sine, lze kosinus vyhodnotit posunutím ukazatele pole ekvivalentního k 90 stupňům.
  3. Ze čtyř aritmetických operací zabere nejvíce času zpracování dělení a násobení, v praxi to může být v případě hodnot s plovoucí desetinnou čárkou zhruba stovky mikrosekund.
  4. Místo dělení a násobení použijte pokyny pro bitový posun. Instrukce 3 pro posun vpravo slouží k vydělení 23 kde jako instrukce levého posunu 1 bude sloužit k vynásobení 21.

5. Pro intenzivní výpočty použijte mikrokontrolér schopný DSP

Některé mikrokontroléry mají ve své architektuře zabudovanou jinou procesorovou jednotku DSP než běžnou ALU. Tento motor DSP je určen k provádění aritmetických výpočtů velmi rychle při co nejmenším počtu hodinových cyklů (ve většině případů jeden) mnohokrát rychlejších než ALU.

Pokyny, které procesor DSP může provádět rychleji než ALU, jsou:

  • Pokyny k posunu a otáčení bitů.
  • Násobení, dělení a další aritmetické operace.
  • Vyhodnocení Sines a dalších trigonometrických funkcí.
  • Všechny operace DSP, jako je FFT, DFT, konvoluce a filtrování FIR.

Použití DSP motoru mikrokontroléru vyžaduje, aby:

  • Do projektu jsou začleněny samostatné knihovny DSP.
  • Názvy funkcí se liší od standardní matematické knihovny jazyka C. Dokumentaci k těmto knihovnám a funkcím lze získat na webových stránkách příslušných výrobců.
  • DSP engine využívá jiný typ proměnné 'frakční'. Naučte se, jak používat proměnné zlomkového typu, než budete pokračovat s funkcemi knihovny dsp.

Všimněte si, že standardní matematické funkce knihovny nevyvolají stroj DSP, protože jsou přeloženy do instrukcí ALU sestavy.

6. Práce s přerušením

Přerušení používejte k provádění konkrétních funkcí, například:

  • Čtení hodnot ADC.
  • Odesílání a přijímání z UART.
  • Aktualizace registrů pracovního cyklu PWM.
  • Komunikace CAN nebo I2C.

Přerušení budou tyto funkce obsluhovat rychle ve srovnání s jejich prováděním v hlavním těle prostřednictvím volání funkce nebo vloženého kódu.

Přerušení se také spustí pouze v případě potřeby, zatímco pokud je kódován v hlavním těle, kód se provede při každé iteraci smyčky while (1).

7. Použijte nejlepší dostupné kompilátory

Kompilátory mohou automaticky implementovat některé z výše popsaných optimalizací při překladu kódu z jazyka C do jazyka sestavení, pokud jsou správně nakonfigurovány. Podívejte se na možnosti optimalizace v kompilátoru a pokud je to možné, upgradujte na profesionální verze kompilátorů, protože jsou výkonnějšími optimalizátory kódu.

8. Používejte podmíněné příkazy inteligentně

  • Při použití řady příkazů if-else ponechejte nejpravděpodobnější podmínku jako první. Tímto způsobem MCU nebude muset procházet všechny podmínky poté, co najde skutečný stav.
  • Příkaz switch-case je obvykle rychlejší a if-else.
  • Místo řady příkazů použijte vnořené příkazy if-else. Blok if-else, který má mnoho příkazů, lze rozdělit na menší dílčí větve pro optimalizaci pro nejhorší případ (poslední) podmínku.

9. Používejte vložené funkce

Funkce, které mají být v kódu použity pouze jednou, mohou být deklarovány jako statické. To způsobí, že kompilátor optimalizuje tuto funkci na vloženou funkci, a proto nebude pro volání funkce přeložen žádný kód sestavení.

  • Funkci lze deklarovat jako vloženou pomocí klíčového slova 'static'.

10. Použijte zmenšené smyčky

Dekrementovaná smyčka vygeneruje méně kódu sestavy ve srovnání s inkrementovanou smyčkou.

Je to proto, že v přírůstkové smyčce je potřeba instrukce pro srovnání, aby se porovnal index smyčky s maximální hodnotou v každé smyčce, aby se zkontrolovalo, zda index smyčky dosáhne maximální hodnoty. Naopak v dekrementované smyčce toto srovnání již není potřeba, protože dekrementovaný výsledek indexu smyčky nastaví nulový příznak v SREG, pokud dosáhne nuly.

Vzhledem k tomu, že smyčka musí opakovat stokrát, redukce jedné instrukce ze smyčky zabrání tomu, aby byla provedena stokrát, takže dopad bude pravděpodobně významnější, když smyčka bude muset opakovat několikrát.

Balení

Tyto tipy mohou být užitečné, ale jejich skutečná aplikace a účinnost závisí na dovednostech programátora a příkazu, který má ve svém kódu. Nezapomeňte, že velikost programu ne vždy určuje časy provádění, některé instrukce mohou spotřebovat více hodinových cyklů než ostatní, takže opět musí hrát svou roli dovednosti programu.

Tento článek je přesný a pravdivý podle nejlepších znalostí autora. Obsah slouží pouze k informačním nebo zábavním účelům a nenahrazuje osobní rady ani odborné rady v obchodních, finančních, právních nebo technických záležitostech.

Zajímavý Dnes

Doporučujeme Vám Vidět

Jak vytvářet obrázky s průhledným pozadím ve Vegas Movie Studio
Počítače

Jak vytvářet obrázky s průhledným pozadím ve Vegas Movie Studio

Matt Bird píše nejrůznější ne my ly, ale rád píše animační tutoriály pro Unity.Ačkoli e pou ta videí obejde bez jakéhokoli zdobení založeného na efekt...
Recenze akční kamery Akaso V50 Pro
Počítače

Recenze akční kamery Akaso V50 Pro

Theo je technický feťák, který neu tále hledá další velkou věc.Dne e podrobně podíváme na akční kameru Aka o V50 Pro. V době p aní tohoto článku ...