Re: sprintf - co dělám blbě?

Pavel Hudeček edizon na seznam.cz
Úterý Duben 16 16:54:28 CEST 2024


Kdysi jsem si napsal nerekurzivně tohle a všude používám:

void cislo(long xx) {
     char t[10];
     signed char n;
     long x;

     if (xx==0) {putchar2('0'); return;}
     x=xx;
     for (n=0; n<10 && x>0; n++) {
         t[n]=x % 10 + '0';
         x/=10;
     }
     for (n-=1; n>=0; n--) putchar2(t[n]);
}

Ještě mám float verzi, ale to bych musel déle hledat. Pokud bude zájem, 
tak pošlu, stejně to budu tenhle týden používat.

A mám vlastně přesně opačný problém:
Nevím jak udělat, aby fungovalo printf nebo cout. Zkusil jsem si nechat 
poradit od chatgpt, sám hledat, ... buď to nejde přeložit, nebo sériák 
přestane fungovat prvním zavoláním printf.
ATtiny416 a AVR64DD32

PH

Dne 15.04.2024 v 21:33 Miroslav Mraz napsal(a):
> No je to vyzobnuté z nějaké knihovny, sám bych se s tou rekurzí babral 
> celý den a není to nijak optimalizované pro 8-bit. Samozřejmě, pokud 
> není rekurze vysloveně "na ocase", tak to žere zásobník (jinak si to 
> překladač dokáže převést na cyklus), ale pokud v něm je už nějaké to 
> místo, tak to zas tolik nevadí. Jenže bez té rekurze to neuděláte tak 
> jednoduše, protože ty číslice přibývají odzadu.
> I když by šlo plnit bufer obráceně (od konce) a nakonec vyplivnout 
> ukazatel na poslední zapsaný znak - tedy vlastně první. Ale je to 
> takové divné.
>
> Mrazík
>
> On 15. 04. 24 19:48, Jan Waclawek wrote:
>> Mozno to je jednoduche, ale rekurzia v mcu - najma 8-bitovom - je dost
>> silne nie, kym sa pracne nedokaze ze ano.
>>
>> Rule of the thumb je, ze 1 bit RAM je 6 tranzistorov kym 1 bit FLASH 
>> je 1
>> tranzistor (ano ja viem ze to je porovnanie jablk s hruskami, ale nejake
>> cislo treba povedat a toto odovodnenie znie mudro) takze asi podobna 
>> je aj
>> hodnota RAM voci FLASH.
>>
>> Je tam dost parametrov aj lokalnych premennych, vsetky int-ovite co je u
>> AVR 16-bit, takze by som povedal tak od oka ze 12 byte na iteraciu; 
>> mozno
>> nieco z toho moze byt 8-bit? Takze pre 5 cislic to je 60 byte, dobre som
>> ratal? Cize moj rule of the thumb hovori, ze len tato spotreba je
>> ekvivalentna asi 360B FLASH, takze to treba priratat na vrch.
>>
>> Ano, ano ja viem ze aj ine riesenia budu mat spotrebu RAM. Nevravel som
>> rule of the thumb a ze to treba pracne dokazovat?


Další informace o konferenci Hw-list