Fwd: Překlad do assembleru

Martin Záruba swz na volny.cz
Neděle Říjen 8 20:25:47 CEST 2023


Tak to byla správná cesta. Tento cyklus trvá 28 uS, takže opakovací 
frekvence může být až 35 kHz, takže nehrozí, že něco bude pískat.

Martin Záruba


Máte pravdu, procesor beznadějně nestíhá. Takže asi rozumné řešení bude 
vzít tři porty, třeba A, C, L. Tím získat 24 bitů. V hlavní smyčce 
udělat tři tabulky byte, pro hodnoty 0 až 50. No a v přerušení indexovat 
tabulku a snad by se dalo stihnout cyklus 0-50 tří příkazů, tedy

for (i=0;i<=50;i++) {

  PORTA=hodA[i];

  PORTC=hodC[i];

  PORTL=hodL[i];

}


To by mohlo být rychlejší. Co myslíte?

Martin Záruba

Dne 8.10.2023 v 19:34 Pavel Hudeček napsal(a):
> Časově úspornější shození bitu umí novější AVRka. Ekvivalentem toho 
> Vašeho by bylo
> PORTA.OUTCLR = 1;
>
> Ale největší časové úspory se dosáhne, pokud se sníží počet ifů, 
> kterými program musí projít. Tedy např. lineátní projití 24 ifů je 
> dost šílený, ale když se z toho udělá nějaká hierarchie, kterou to 
> projde na 3-6 kroků, bude to 3-8x rychlejší.
>
> PH
>
> Dne 08.10.2023 v 18:22 Jaroslav Buchta napsal(a):
>> Nejde to udelat nejakou byte->byte tabulkou ve flash?
>> Dne 08.10.2023 v 18:16 Martin Záruba napsal(a):
>>>
>>> Můžete mi prosím někdo napstat jak se přeloží v C++ na AtMega
>>>
>>> byte b1,x;
>>> if(b1==x){PORTA &=0xFE;};
>>> popřípadě zda se dá vymyslet *časově* úspornější zápis pro shození bitu?
>>> Přerušení je po tu dobu zakázané. Příkazů if bude v přerušení celkem 
>>> 24 a potřebuji přerušení vyvolat dost často, tak aby vůbec ještě 
>>> nějaký čas procesoru zbyl.
>
> _______________________________________________
> HW-list mailing list  -  sponsored bywww.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20231008/f3704c57/attachment.htm>


Další informace o konferenci Hw-list