<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    Schválně, jak dlouhé by vyšlo tohle?<br>
    (nemám Arduino, tak nevyzkouším)<br>
    <br>
    char buf [6];<br>
    <br>
    utoa (milivolt, buf, 10);<br>
    Serial.write (buf, 2);<br>
    Serial.write ('.');<br>
    Serial.write (buf+2, 3);<br>
    <br>
    PL<br>
    <br>
    ********************<br>
    <br>
    <div class="moz-cite-prefix">Dne 15.4.2024 v 17:22 Petr Labaj
      napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:4b809508-5228-299c-763b-885c010abd72@volny.cz">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      Já na takové výpisy mám udělanou jednoduchou funkci, která jako
      parametr dostane integer vstup, počet znaků na které to má
      převést, a pozici, na které má být desetinná tečka.<br>
      <br>
      Pokud byste to chtěl mít rychle rychle, tak třeba zednicky
      zkonvertovat ten integer do stringu číslic, pak ho projít cyklem a
      do druhého stringu nakopírovat číslice před desetinnou tečkou, pak
      přidat znak tečky, a dokopírovat zbylé číslice.<br>
      Pak píšu - je to zednicky, ale máte to hned, bude to celé integer
      a bude to asi celkem malé.<br>
      <br>
      PL<br>
      <br>
      *******************<br>
      <br>
      <div class="moz-cite-prefix">Dne 15.4.2024 v 17:14 Martin Záruba
        napsal(a):<br>
      </div>
      <blockquote type="cite"
        cite="mid:02da0aa0-a32a-41e7-b579-6213e5f2a98a@volny.cz">
        <meta http-equiv="Content-Type" content="text/html;
          charset=UTF-8">
        <p><font face="Arial">S tím double máte pravdu. Ale nějak
            nechápu, jak pomocí utoa() JEDNODUŠE dosáhnout, aby se mi
            vypsaly ty nuly třeba př. 81.002</font><br>
        </p>
        <pre class="moz-signature" cols="72">Martin Záruba</pre>
        <div class="moz-cite-prefix">Dne 15.4.2024 v 17:04 Jan Waclawek
          napsal(a):<br>
        </div>
        <blockquote type="cite"
          cite="mid:PC195202404151704220709c685c71b@wekPC">
          <pre class="moz-quote-pre" wrap="">No ved dobre, double to je priamociare peklo este aj v ARM Cortex-Mx kde x
< 7.

Takze to rozdelte pomocou /1000 a %1000 ako v tom druhom pripade, a pouzite
utoa(). Treba si dat pozor na zlomkovu cast mensiu ako 100, finta je
pripocitat 1000 a potom odstranit tu jednicku zo zaciatku. 

wek



----- Original Message ---------------

Subject: Re: sprintf - co dělám blbě?
   From: Martin Záruba <a class="moz-txt-link-rfc2396E" href="mailto:swz@volny.cz" moz-do-not-send="true"><swz@volny.cz></a>
   Date: Mon, 15 Apr 2024 16:40:23 +0200
     To: <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>

</pre>
          <blockquote type="cite">
            <pre class="moz-quote-pre" wrap="">Je to zcela logické, ale výsledek překladu tomu neodpovídá, ale zjevně 
je chyba u mě. Potřeboval jsem vypsat uint16_t proměnnou 
JKComputedData.BatteryVoltageMillivolt, která obsahuje napětí baterie v 
milivoltech. Ale chtěl jsem, aby výpis byl ve voltech, tedy aby to napsalo:

Napětí 80.245V

zkusil jsem dvě varianty:

Serial.print(PSTR("Napětí"));Serial.print(dtostrf(JKComputedData.BatteryVoltageMillivolt/1000.0, 
7, 3, sStringBuffer));Serial.print("V, ");
sprintf_P(sStringBuffer,PSTR("Napětí%3d.%03dV, 
"),JKComputedData.BatteryVoltageMillivolt/1000,JKComputedData.BatteryVoltageMillivolt%1000);Serial.print(sStringBuffer);

ta první, bez sprintf je o 1372 byte delší.

Martin Záruba

Dne 15.4.2024 v 14:29 Petr Labaj napsal(a):
</pre>
            <blockquote type="cite">
              <pre class="moz-quote-pre" wrap="">Dovolím si zareagovat a trochu rozvinout poznámku pana weka o 
nevhodnosti používání *printf na jednochipech (se kterou souzním).
Všechny ty *printf jsou obecně dost mocné funkce, které umí formátovat 
kde co, kde jak.
Ale protože toho umí hodně, tak jsou velké.
Na nějakém PC s gigabyty paměti to moc nevadí, ale pro použití na MCU 
to (podle mě, a asi i podle pana weka) moc vhodné není.
Proto když už tam jsou jsou, tak jsou často všelijak osekané a některé 
věci neumí (třeba ty float a double, které se případně musí nějak 
extra povolit).

Takže obecné doporučení: zvažte, jestli fakt potřebujete univerzální 
*printf.
Jestli si raději nenapíšete svou vlastní konverzi pro textový výstup, 
která bude umět jen to, co potřebujete.
Ale zase na druhé straně bude dělat přesně to, co potřebujete.

PL

******************

Dne 15.4.2024 v 14:06 Martin Záruba napsal(a):
</pre>
              <blockquote type="cite">
                <pre class="moz-quote-pre" wrap="">Dík. To mě fakt nenapadlo. Nikde jsem nenašel, parametr l. No patří 
mi to.

Lze ho nějak podobně donutit i k formátování float? Vypisuje otazník.

Martin Záruba
P.S. co je špatného na printf v jednočipu?
Dne 15.4.2024 v 13:58 Jan Waclawek napsal(a):
</pre>
                <blockquote type="cite">
                  <pre class="moz-quote-pre" wrap="">%lu

C99, 7.19.6.1#7 (conversion modifier l)

Conversion specifier, t.j. "zakladny typ", co je tu to "u", je v tych %xxx
vzdy posledne.

wek


PS. <flame on> Na odtazku z nadpisu mam chut odpovedat, ze "pouzivate
*printf v jednocipe"...


----- Original Message ---------------

</pre>
                  <blockquote type="cite">
                    <pre class="moz-quote-pre" wrap="">Prostě se to někde orizne na 16bitů. Nemá to být ul?
Opět upozorňuji na zdravý zvyk používat snprintf...

J.

---------- Původní e-mail ----------
Od: Martin Záruba<a class="moz-txt-link-rfc2396E" href="mailto:swz@volny.cz" moz-do-not-send="true"><swz@volny.cz></a>
Komu: Martin Zaruba<a class="moz-txt-link-rfc2396E" href="mailto:hw-list@list.hw.cz" moz-do-not-send="true"><hw-list@list.hw.cz></a>
Datum: 15.04.2024 13:35:10
Předmět: sprintf - co dělám blbě?

"

Tento triviální kousek programu





   char sStringBuffer[50];

   sprintf(sStringBuffer,"%6u",(uint32_t)123456);

</pre>
                  </blockquote>
                </blockquote>
              </blockquote>
            </blockquote>
          </blockquote>
          <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>
        <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>
      <br>
      <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>
    <br>
  </body>
</html>