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