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