Re: Formátovaný tisk bylo Re: sprintf - co delam blbe?

Ladislav Vaiz spam na nagano.cz
Středa Duben 17 08:46:21 CEST 2024


Co alokujete funkcí malloc, to musíte uvolnit funkcí free. Myslel jsem 
to nějak takto:

void Fultoa(char *buf, ...){
// zrušit malloc
}

void volajici(){
   char buf[11];

   Fultoa((char *)buf, ...);
   Serial.print(buf);
}

Můžete ponechat i vracení char *, ale pak hrozí, že se ukazatel použije 
mimo platnost buf a bude ukazovat do cizí paměti. Takto se vám o to 
postará překladač.

L.


On 17.04.2024 8:32, Martin Záruba wrote:
>
> 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
>
> _______________________________________________
> HW-list mailing list  -  sponsored bywww.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/cc83bc1c/attachment.htm>


Další informace o konferenci Hw-list