Optimalizace programu pro MCU

Jan Waclawek konfera na efton.sk
Pondělí Září 29 15:44:23 CEST 2014


Je tazke stanovit nejake pevne zasady na usporu RAM. Predovsetkym je vsak
potrebne sa naucit zistit, kolko RAM sa skutocne pouzije, a to vratane
stacku, heapu apod.

Napisali ste tiez potrebu pouzivat uzsie typy, ale to samo osebe napr. na
32-bitovych strojoch nestaci, je potrebne aj zabezpecit, aby sa napriklad
linker nesnazil mensie premenne zarovnavat na 32-bitove adresy (ak to
procesor vobec dovoluje, ale vacsina z nich to dovoluje - treba chapat
pripadne zadrhele a obmedzenia pri pouziti nezarovnanych premennych),
alebo ich vhodne zoradil. Detto pre struct.

Ta redukcia typov plati aj pre _Bool, ten je obvykle implementovany
neefektivne (efektivnej implementacii brani aj norma, ak sa berie prisne),
takze treba (casto rucne) pouzivat bitfieldy. Niekedy sa da/oplati ist do
bitfieldov aj s premennymi, ktore vyzaduju menej ako nasobky 8 bitov, apod.

> Napø. jsem na¹el, ¾e definice const promìná se ulo¾í do RAM, ale jenom promìná bez const do ROM (FLASH), tak zda to platí atd.

Chceli ste to napisat naopak...

Ale nie je to zasada, len niektore prekladace (mozno vacsina) to takto
robia. V skutocnosti klucove slovo const nijako nezarucuje umiestnenie
premennej. Prestudujte si dokumentaciu k Vasmu prekladacu.


>Dále mì zajímá jestli pøi zapnutí optimalizace -Os (nebo jiné) jde v kódu oznaèit kus kódu jako vyjímku, aby se na toto optimalizace nevztahovala.

Najjednoduchsie je vyclenit funkcie, ktore sa maju kompilovat s inymi
nastaveniami, do osobitnych suborov, separatne skompilovat a potom
zlinkovat. Samozrejme treba znova preskumat, ci toto je platny postup.

Ak pouzivate GCC, neocakavajte od -Os rychlejsi kod a od -O3 mensiu
spotrebu pamate (ktorejkolvek). Toto su len predzute "skupinky"
optimalizacnych switchov. Skuste si efekt jednotlivych tychto switchov, a
ich rucne nastavenych kombinacii, moze to byt v konkretnych pripadoch
efektivnejsie nez tie "predzute".

wek




Další informace o konferenci Hw-list