<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div class="moz-cite-prefix">Jeste stoji za zminku, ze resit usporne
printf pro MCU uz napadlo spoustu lidi a je ke stazeni mnoho
projektu, ktere lze ruzne parametrizovat atd. Namatkou napr. <a
href="https://github.com/mpaland/printf">GitHub -
mpaland/printf: Tiny, fast, non-dependent and fully loaded
printf implementation for embedded systems. Extensive test suite
passing.</a></div>
<div class="moz-cite-prefix">Ja bych to printf s formatovanim uplne
nezavrhoval, je to velmi prakticke a flexibilni a s rozumnou
implementaci a orezanim slozitejsich formatu to neni nijak narocne
na prostredky.</div>
<div class="moz-cite-prefix">Cpat to do 4kB flash a 256B RAM je
samozrejme blbost ale u attiny s 16/2kB uz jsem se nejak moc
neomezoval.<br>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">Dne 20.04.2024 v 18:28 Petr Labaj
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:0d2fc8e0-d008-8848-edea-c63cb36de3b1@volny.cz">Za sebe
můžu říct, že se mi to Vaše pojetí s formátovacím řetězcem líbí.
<br>
Asi bych tam trochu šetřil s buffery, ale to je drobnost.
<br>
<br>
Já to skládám 3 voláními (text, číslo, text), ale takhle je to
docela elegantní.
<br>
<br>
PL
<br>
<br>
******************
<br>
<br>
Dne 19.4.2024 v 19:23 Martin Záruba napsal(a):
<br>
<blockquote type="cite">Už jsem se Vás dost natrápil na toto téma
a měl jsem pocit, že nic moc úsporného a jednoduše použitelného
není. Jenže jsem paličatý a zkusil jsem přece něco vymyslet.
Požadavek byl:
<br>
<br>
Výpis na požadovaný počet míst s možností textu před i za
číslem.
<br>
<br>
Potlačení nevýznamných nul.
<br>
<br>
Co nejúspornější kód jak funkce, tak volání, vhodný pro malinky
procesor.
<br>
<br>
Přímý tisk bez nutnosti psaní Serial.print();
<br>
<br>
Vyrobil jsem toto, posuďte a navrhněte prosím co by ještě šlo
líp.
<br>
<br>
<br>
void pr(int32_t h, const char* f) {
<br>
char buf[100];
<br>
uint8_t i = 0xFF;
<br>
int32_t x = abs(h);
<br>
do {
<br>
i++;
<br>
buf[i] = f[i];
<br>
} while (f[i] != 0);
<br>
<br>
do {
<br>
i--;
<br>
if (buf[i] == '#') {
<br>
if (x != 0) {
<br>
buf[i] = x % 10 + (uint8_t)'0';
<br>
if (h < 0 && x < 10) {
<br>
i--;
<br>
buf[i] = '-';
<br>
}
<br>
} else {
<br>
buf[i] = ' ';
<br>
}
<br>
x /= 10;
<br>
}
<br>
} while (i != 0);
<br>
Serial.print(buf);
<br>
}
<br>
<br>
<br>
Funkce má jediný formátovací znak #
<br>
<br>
Příklady:
<br>
<br>
int32_t napetimV = 5432;
<br>
pr(napetimV, "Pokus1=###.###V\n");
<br>
pr(-21, "Pokus2=### zaporne cislo\n");
<br>
pr(9876543, "Pokus3=# ### ### cislo s mezerami po 1000\n");
<br>
float a = 54.3;
<br>
pr(a*10, "Pokus4=####.# vypis float na 1 desetinne
misto\n");
<br>
<br>
Výsledek vypadá takto:
<br>
<br>
Pokus1= 5.432V
<br>
Pokus2=-21 zaporne cislo
<br>
Pokus3=9 876 543 cislo s mezerami po 1000
<br>
Pokus4= 54.3 vypis float na 1 desetinne misto
<br>
</blockquote>
<br>
_______________________________________________
<br>
HW-list mailing list - sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<br>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<br>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
<br>
</blockquote>
<p><br>
</p>
</body>
</html>