<!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>