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