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

Slavomir Skopalik skopalik na elektlabs.cz
Pondělí Duben 15 21:56:08 CEST 2024


Pouzivam tohle:

Treba to pomuze, ale je to upraveny pro NXP ARM MCU jenz neumi delit 
integery, ale maji HW delicku.

voidUARTLog_t::itoa(intval){

// original source 
https://github.com/wsq003/itoa_for_linux/blob/master/itoa.c

constunsignedintradix = 10;

char* p = msg;

unsignedinta; //every digit

char* b; //start of the digit char

chartemp;

unsignedintu;

if(val < 0)

{

*p++ = '-';

val = 0 - val;

}

u = (unsignedint)val;

b = p;

do

{

/* Original code

a = u % radix;

u /= radix;

*/

// HW division

a = MMDVSQ_GetDivideRemainder(MMDVSQ0, u, radix, true);

u = MMDVSQ_GetDivideQuotient(MMDVSQ0, u, radix, true);

*p++ = a + '0';

} while(u > 0);

*p-- = 0;

//swap

do{

temp = *p;

*p = *b;

*b = temp;

--p;

++b;

} while(b < p);

SendMsg();

}

Slavek

Ing. Slavomir Skopalik
Executive Head
Elekt Labs s.r.o.
MASA - Collection and evaluation of data from machines and laboratories
http://eng.elektlabs.com/products-and-services/masa
-----------------------------------------------------------------
Address:
Elekt Labs s.r.o.
Chaloupky 158
783 72 Velky Tynec
Czech Republic
---------------------------------------------------------------
Mobile: +420 724 207 851
skype:skopaliks
e-mail:skopalik na elektlabs.com
http://www.elektlabs.com

On 15.04.24 21:33, Miroslav Mraz wrote:
> 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?
>>
>> wek
>>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.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/20240415/24946c5d/attachment.htm>


Další informace o konferenci Hw-list