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