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