Re: Formátovaný tisk bylo Re: sprintf - co delam blbe?
Martin Záruba
swz na volny.cz
Středa Duben 17 08:32:22 CEST 2024
Takže takto? Je to opravdu kratší.
char * Fultoa(uint32_t val,uint8_t length,uint8_t decimal) {
uint8_t ld1 = length - decimal - 1;
uint8_t ld2 = ld1 - 1;
char * buf = (char *)malloc(11);
uint32_t k=100;
for (uint8_t i = 3;i < length; i++) k*=10;
ultoa(val+k, buf, 10);
for (uint8_t i = 0; i < ld2; i++) {
if (buf[i + 1] == '0')
buf[i] = ' ';
else
buf[i] = buf[i + 1];
}
buf[ld2] = buf[ld1];
buf[ld1] = '.';
return buf;
}
Jen mi není jasné, zda a kdy se pole buf na haldě uvolní.
Martin Záruba
Dne 17.4.2024 v 8:08 Ladislav Vaiz napsal(a):
> On 17.04.2024 7:44, Martin Záruba wrote:
>> String Fultoa(uint32_t val, uint8_t length, uint8_t decimal) {
>> uint8_t ld1 = length - decimal - 1;
>> uint8_t ld2 = ld1 - 1;
>> char buf[11];
>> uint32_t k=100;
>> for (uint8_t i = 3;i < length; i++) k*=10;
>> ultoa(val+k, buf, 10);
>> for (uint8_t i = 0; i < ld2; i++) {
>> if (buf[i + 1] == '0')
>> buf[i] = ' ';
>> else
>> buf[i] = buf[i + 1];
>> }
>> buf[ld2] = buf[ld1];
>> buf[ld1] = '.';
>> return buf;
>> }
>
>
> V rámci testování bing chatu jsem mu zkusil zadat optimalizaci pro
> AVR. Navrhl místo Stringu vracet static char buf[11] definovaný ve
> funkci. U toho zmínil problém s vlákny (což na AVR nebude tak horké),
> k tomu navrhl řešení pomocí pole definovaného volajícím a předávaného
> funkci.
>
> To poslední mi připadne nejlepší. Vyhnete se režiji Stringu a buffer
> bude alokován, jen když ho volající bude potřebovat.
>
> L.
>
> _______________________________________________
> 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/20240417/571e02d5/attachment.htm>
Další informace o konferenci Hw-list