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