<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p><font face="Arial">Chápu, že to nejde. To volání tak, jak to
        píšete, zase vyžaduje další parametr. Pokud by se buf
        nadefinovala jako statická, chodilo by to a bylo by to
        jednoduché, ale funkce nebude reentrantní, což možná nevadí.
        Udělat to tak, aby pole bylo ve volajícím modulu (což je asi
        nutný předpoklad reentrantnosti) a současně ho nebylo třeba
        manuálně definovat asi nejde. Je to jen takové duševní cvičení.</font><br>
    </p>
    <pre class="moz-signature" cols="72">Martin Záruba</pre>
    <div class="moz-cite-prefix">Dne 17.4.2024 v 8:46 Ladislav Vaiz
      napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:64655409-7eeb-478b-997b-f30f5f79afd2@nagano.cz">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <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"
        moz-do-not-send="true">www.HW.cz</a>
<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>
<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>
</pre>
      </blockquote>
      <p><br>
      </p>
      <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>
  </body>
</html>