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