<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p><font face="Arial">Ano, takto to bylo napsané. </font></p>
    <p><font face="Arial">Prosím, co by se tam mělo udělat jinak,
        popřípadě co je nešikovné, ač to funguje? Zkoušel jsem se
        vydovádět i přes pointry, ale nebylo to kratší a bylo to mnohem
        nepřehlednější (alespoň pro mě). </font></p>
    <p><font face="Arial">Jediné, co mě ještě napadlo je, že length -
        decimal - 1 a </font><font face="Arial">length - decimal - 2 je
        použito dvakrát a tak to uložit do proměnných. Program je pak o
        20 byte kratší a asi i rychlejší (pokud to má význam). </font></p>
    <p><font face="Arial">Předpokládám, že ld1, ld2, buf, k, i se
        ukládají na zásobníku, takže nezabírají statickou paměť.</font></p>
    <font face="Arial">tedy takto:</font>
    <p><font face="monospace">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>
      </font></p>
    <p><font face="monospace"><br>
      </font></p>
    <p><font face="Arial">Já kdysi dělal docela složitý (no vzhledem k
        možnostem) program pro AT89C4051. Mělo to dvě přerušení a docela
        jsem se v assembleru vydováděl, když se mi data musela vejít do
        128 Byte (program do 4kB byl v pohodě). Byla to moje první
        řídící jednotka pro tepelné čerpadlo a mělo to i ekvitermní
        regulaci. Teploty to četlo přes DS18B20. </font></p>
    <p><font face="Arial">Jinak u těch DS18B20 o kterých je většina
        konstruktérů přesvědčena, že nechodí na delším kabelu, jsem
        osciloskopem zjistil, že mu nevadí ani značná deformace pulzů,
        ale vadí mu záporné napětí vzniklé odrazem na dlouhém vedení.
        Stačilo ale dát antiparalelně ke každému teploměru schotkyho
        diodu a chodilo to s fantomovým napájením (tedy po dvou drátech)
        přes 200m nestíněnou dvoulinku.</font></p>
    <br>
    <pre class="moz-signature" cols="72">Martin Záruba</pre>
    <div class="moz-cite-prefix">Dne 16.4.2024 v 23:36 Jan Waclawek
      napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:PC1993202404162336480048b441b060@wekovci">
      <pre class="moz-quote-pre" wrap="">Ten program sa Vam formatovanim zmrsil
<a class="moz-txt-link-freetext" href="https://list.hw.cz/pipermail/hw-list/2024-April/571392.html">https://list.hw.cz/pipermail/hw-list/2024-April/571392.html</a> , dovolil som
si ho rekonstruovat:

String Fultoa(uint32_t val,uint8_t length,uint8_t decimal) {
   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 < length - decimal - 2; i++) {
      if (buf[i + 1] == '0')
         buf[i] = ' ';
      else
         buf[i] = buf[i + 1];
   }
   buf[length - decimal - 2] = buf[length - decimal - 1];
   buf[length - decimal - 1] = '.';
   return buf;
}

Serial.println(Fultoa(1,10,3));
Serial.println(Fultoa(987654321,10,2));
Serial.println(Fultoa(21,3,1));


Nepouzivam C++. V C by to fungovalo len nahodou kvoli lokalnemu buffru.

Miestni C++ guruovia prosim vysvetlite ako to instancovanie/deinstancovanie
objektu triedy String tu funguje.

wek

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