<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>Zdravím,</p>
    <p>v tomhle zrovna problém není  - tato část kodu funguje dobře. 
      Tohle byl jen testovací kus, kterým jsem ověřoval zápis a čtení a
      to funguje.  Když je to na začátku setup(), tak to proběhne OK. 
      Když stejný kus umístím do místa, kde potřebuji zapsat svou
      hodnotu, tak proběhnou třeba 3 cykly a zhavaruje to, nebo to lehne
      hned v prvním a nebo to taky proběhne úplně bez problémů. Čím to
      je netuším, pocitově je to "nějak" odvislé od hodnoty zapisované
      do eeprom, ale může to být taky náhoda.</p>
    Petr<br>
    <br>
    Dne 20.8.2019 v 08:49 Dodo Racek napsal(a):<br>
    <blockquote type="cite"
cite="mid:CAP5hgLgFB38_i_qXhGDxjQhoT9+upi2MaENNFqHX93T5gtkFZg@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      <div dir="ltr">
        <div>Iba strely od boku:</div>
        <div><br>
        </div>
        <div>"i" je deklarovany uint8_t</div>
        <div>"integer" (asi by som zvolil iny nazov premennej - niektory
          prekladac to moze chapat ...povedzme po svojom... ) je
          deklarovany uint32_t <br>
        </div>
        <div><br>
        </div>
        <div>v riadku     "write_to_eeprom(800+i, i); " musi dojst k
          pretypovaniu premennych pred suctom ( 800 sa do uint8_t
          nezmesti, alebo bude pisat niekam, kde nema... )<br>
        </div>
        <div><br>
        </div>
        <div>Ak by prekladac pretypoval 'i" na uint32_t (alebo na int ?,
          alebo na nieco ine? -> Aky mate prekladac? co by mal, kedze
          "by mal" dorovnat premmenne na vyssi typ pred mat. operaciami
          - spoliehate sa na to), tak by ste nasledne davali vo funkcii
          adresu nie ako uint8_t ale ako uint32_t.</div>
        <div>Niektore vyvojove prostredia "arduino like" maju s
          automatickym pretypovavanim zvlastne spravanie, alebo ho
          jednoducho (niekedy - nevysledoval som do konca ) neurobia...<br>
        </div>
        <div><br>
        </div>
        <div>->  skuste urobit sucet mimo funkcie a pretypovat rucne
          premenne pred suctom a funkcii posunut typ, ktory ocakava -
          resp. ustrazit si typy hlavne pri premennej adresy, ale
          idealne vsade...<br>
        </div>
        <div><br>
        </div>
        <div>v povodnej vasej rutine so zapisovanim po bytoch ste napr.
          mali rucne pretypovanie premennej integer pred volanim write:<br>
        </div>
        <div><br>
        </div>
        <div>>>     EEPROM.write((adresa+i), (uint8_t) integer);</div>
        <div><br>
        </div>
        <div><br>
        </div>
        <div><br>
        </div>
        <div>Dodo<br>
        </div>
        <div><br>
        </div>
        <div><br>
        </div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">po 19. 8. 2019 o 22:19 Petr
          Zapadlo <<a href="mailto:zapik@email.cz"
            moz-do-not-send="true">zapik@email.cz</a>> napísal(a):<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px
          0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Zdravím,<br>
          <br>
          chápu, nějak mi unikla existence metod put() a get(), možná v
          době, kdy <br>
          jsem začal  tohle používat tak ještě nebyly. Nicméně, upravil
          jsem zápis <br>
          následovně:<br>
          <br>
          void write_to_eeprom(uint32_t integer, uint8_t adresa){<br>
               EEPROM.put(adresa, integer);<br>
               EEPROM.commit();<br>
          }<br>
          <br>
          Tohle by mělo být celkem košer. Ostatně zapisuji jen jeden
          uint32_t a to <br>
          ještě příležitostně, takže "ošoupání" buněk nehrozí.<br>
          <br>
          Ale , jsem tam kde jsem byl. Narazil jsem ještě na jednu
          zajímavost, na <br>
          začátek programu - sekce setup(). jsem si přidal následující
          testovací kod:<br>
          <br>
          EEPROM.begin(64);<br>
          for (uint8_t i=0; i < 60; i=i+4){<br>
               Serial.print("Adresa: ");<br>
               Serial.print(i);<br>
               Serial.print(" Data: ");<br>
               Serial.println(800+i);<br>
               write_to_eeprom(800+i, i);<br>
          }<br>
          for (uint8_t i=0; i < 60; i=i+4){<br>
             Serial.print("Adresa: ");<br>
             Serial.print(i);<br>
             Serial.print(" Data: ");<br>
             Serial.println(read_from_eeprom(i));<br>
          }<br>
          <br>
          A tenhle kod, projde vždy a sedí zapsané a vyčtené hodnoty.<br>
          <br>
          Nicméně pozdější zavolání  funkce write_to_eeprom() už
          nedopadne dostanu <br>
          "kernel panic". A je to opravdu zápisem do eeprom, když ho
          zakomentuji, <br>
          tak to funguje dobře (jen se neuloží hodnota do eeprom).<br>
          <br>
          Jak tohle vykoumat?<br>
          <br>
          Díky<br>
          petr<br>
          <br>
          <br>
          <br>
          <br>
          Dne 19.8.2019 v 06:19 Pavel Brychta napsal(a):<br>
          > Dobrý den,<br>
          ><br>
          > ten zápis není zcela optimální z hlediska toho, co
          vlastně simulovaná <br>
          > EEPROM v ESP8266 je, takže to vezmu trošičku obšírněji:<br>
          ><br>
          > U ESP8266 je EEPROM simulovaná sektorem ve flash paměti,
          takže trpí na <br>
          > wear leveling. Commit by se tedy měl používat pokud možno
          co nejméně, <br>
          > respektive po zápisu co největších dat. Volání commit po
          zápisu <br>
          > každého bytu znamená 4 přepisy sektoru. U ESP32 v
          posledních verzích <br>
          > jádra přešla emulace EEPROM na používání NVS, ale obávám
          se, že <br>
          > přístup k používání commit zůstal stejný. Další věcí pak
          je namísto <br>
          > bytového přístupu použít templatovaných metod put() a
          get(), které <br>
          > zabezpečí uložení celého prvku. Takže doporučuji:<br>
          ><br>
          > 1. překontrolovat, zda voláte .begin() na začátku
          programu s <br>
          > dostatečnou velikostí<br>
          ><br>
          > 2. použít .put()<br>
          ><br>
          > 3. commit() zavolat po uložení<br>
          ><br>
          > Hezký den,<br>
          ><br>
          > Pavel Brychta<br>
          ><br>
          > Dne 18.8.2019 v 22:18 Petr Zapadlo napsal(a):<br>
          >> Zdravím,<br>
          >><br>
          >> potřebuji v jednom projektu přejít z ESP8266 ->
          ESP32.  Kod jsem <br>
          >> lehce upravil (především kvůli trochu jiným
          knihovnám), přeložil a <br>
          >> testuju a narazil jsem na nečekaný problém a to s
          EEPROM.<br>
          >><br>
          >> Mám funkci:<br>
          >><br>
          >> void write_to_eeprom(uint32_t integer, uint8_t
          adresa){<br>
          >>   for (uint8_t i=0; i<4;i++){<br>
          >>     EEPROM.write((adresa+i), (uint8_t) integer);<br>
          >>     EEPROM.commit();<br>
          >>     integer= integer >> 8;<br>
          >>   }<br>
          >> }<br>
          >><br>
          >> Totožnou rutinu jsem už použil mockrát, hlavně s
          ESP8266 a ale i s <br>
          >> jedním ESP32 a nenarazil jsem na problém.  Nyní však
          když zapisuju <br>
          >> data do EEPROM tak mi cpu zhavaruje:<br>
          >><br>
          >> Guru Meditation Error: Core  1 panic'ed (Cache
          disabled but cached <br>
          >> memory region accessed)<br>
          >> Guru Meditation Error: Core  1 panic'ed
          (IllegalInstruction). <br>
          >> Exception was unhandled.<br>
          >> Memory dump at 0x401495e8: bad00bad bad00bad bad00bad<br>
          >> A je do resetu vymalováno.<br>
          >><br>
          >> A navíc je to závislé na datech - pokud je zapisovaná
          hodnota kolem <br>
          >> 66000 tak je vše OK, pokud je cca 800, tak zhavaruje.<br>
          >><br>
          >> když si dám vypsat jednotlivé byte co se zapisují,
          tak je vše OK?<br>
          >><br>
          >> Nějak to mu nerozumím, už do toho tady čumím dost
          dlouho dobu a <br>
          >> nemohu se hnout z místa.<br>
          >><br>
          >> Tuší někdo, v čem by mohl být problém?<br>
          >><br>
          >> Díky<br>
          >><br>
          >> Petr<br>
          >><br>
          >> _______________________________________________<br>
          >> HW-list mailing list  -  sponsored by <a
            href="http://www.HW.cz" rel="noreferrer" target="_blank"
            moz-do-not-send="true">www.HW.cz</a><br>
          >> <a href="mailto:Hw-list@list.hw.cz" target="_blank"
            moz-do-not-send="true">Hw-list@list.hw.cz</a><br>
          >> <a href="http://list.hw.cz/mailman/listinfo/hw-list"
            rel="noreferrer" target="_blank" moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
          > _______________________________________________<br>
          > HW-list mailing list  -  sponsored by <a
            href="http://www.HW.cz" rel="noreferrer" target="_blank"
            moz-do-not-send="true">www.HW.cz</a><br>
          > <a href="mailto:Hw-list@list.hw.cz" target="_blank"
            moz-do-not-send="true">Hw-list@list.hw.cz</a><br>
          > <a href="http://list.hw.cz/mailman/listinfo/hw-list"
            rel="noreferrer" target="_blank" moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
          <br>
          _______________________________________________<br>
          HW-list mailing list  -  sponsored by <a
            href="http://www.HW.cz" rel="noreferrer" target="_blank"
            moz-do-not-send="true">www.HW.cz</a><br>
          <a href="mailto:Hw-list@list.hw.cz" target="_blank"
            moz-do-not-send="true">Hw-list@list.hw.cz</a><br>
          <a href="http://list.hw.cz/mailman/listinfo/hw-list"
            rel="noreferrer" target="_blank" moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
        </blockquote>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <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>