<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div class="moz-cite-prefix">Co alokujete funkcí malloc, to musíte
uvolnit funkcí free. Myslel jsem to nějak takto:</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">void Fultoa(char *buf, ...){</div>
<div class="moz-cite-prefix">// zrušit malloc<br>
</div>
<div class="moz-cite-prefix">}<br>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">void volajici(){</div>
<div class="moz-cite-prefix"> char buf[11];</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix"> Fultoa((char *)buf, ...);</div>
<div class="moz-cite-prefix"> Serial.print(buf);<br>
</div>
<div class="moz-cite-prefix">}<br>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">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č.<br>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">L.<br>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">On 17.04.2024 8:32, Martin Záruba
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:1c40b123-dc4c-4756-b438-fe084652b030@volny.cz">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<p><font face="Arial">Takže takto? Je to opravdu kratší.<br>
<br>
</font></p>
<p><font face="monospace">char * Fultoa(uint32_t val,uint8_t
length,uint8_t decimal) {<br>
uint8_t ld1 = length - decimal - 1;<br>
uint8_t ld2 = ld1 - 1;<br>
char * buf = (char *)malloc(11);<br>
uint32_t k=100;<br>
for (uint8_t i = 3;i < length; i++) k*=10;<br>
ultoa(val+k, buf, 10);<br>
for (uint8_t i = 0; i < ld2; i++) {<br>
if (buf[i + 1] == '0')<br>
buf[i] = ' ';<br>
else<br>
buf[i] = buf[i + 1];<br>
}<br>
buf[ld2] = buf[ld1];<br>
buf[ld1] = '.';<br>
return buf;<br>
}</font></p>
<p><font face="monospace">Jen mi není jasné, zda a kdy se pole buf
na haldě uvolní.<br>
</font></p>
<pre class="moz-signature" cols="72">Martin Záruba</pre>
<div class="moz-cite-prefix">Dne 17.4.2024 v 8:08 Ladislav Vaiz
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:3e985af2-482d-48fe-9262-6cd4c4e40080@nagano.cz">On
17.04.2024 7:44, Martin Záruba wrote: <br>
<blockquote type="cite">String Fultoa(uint32_t val, uint8_t
length, uint8_t decimal) { <br>
uint8_t ld1 = length - decimal - 1; <br>
uint8_t ld2 = ld1 - 1; <br>
char buf[11]; <br>
uint32_t k=100; <br>
for (uint8_t i = 3;i < length; i++) k*=10; <br>
ultoa(val+k, buf, 10); <br>
for (uint8_t i = 0; i < ld2; i++) { <br>
if (buf[i + 1] == '0') <br>
buf[i] = ' '; <br>
else <br>
buf[i] = buf[i + 1]; <br>
} <br>
buf[ld2] = buf[ld1]; <br>
buf[ld1] = '.'; <br>
return buf; <br>
} <br>
</blockquote>
<br>
<br>
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. <br>
<br>
To poslední mi připadne nejlepší. Vyhnete se režiji Stringu a
buffer bude alokován, jen když ho volající bude potřebovat. <br>
<br>
L. <br>
<br>
_______________________________________________ <br>
HW-list mailing list - sponsored by <a
class="moz-txt-link-abbreviated" href="http://www.HW.cz"
moz-do-not-send="true">www.HW.cz</a> <br>
<a class="moz-txt-link-abbreviated moz-txt-link-freetext"
href="mailto:Hw-list@list.hw.cz" moz-do-not-send="true">Hw-list@list.hw.cz</a>
<br>
<a class="moz-txt-link-freetext"
href="http://list.hw.cz/mailman/listinfo/hw-list"
moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a>
<br>
</blockquote>
<br>
<fieldset class="moz-mime-attachment-header"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list - sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
<p><br>
</p>
</body>
</html>