Hirdetés

Új hozzászólás Aktív témák

  • its_grandpa

    tag

    válasz Aryes #19439 üzenetére

    Amíg "debuggoltam" írtatok párat de sebaj, azért ezt most csak itt hagyom :)

    Jogos, nem emlékeztem rá de most megnéztem.
    Viszont azt gondolom megtaláltam és vesszek meg ha értem másnak miért működik.
    Esp32_radio_init.ino 28. sor preferences.clear() , töröl mindent.
    Ezután kiírja kódból az összeset,nézzük a 49. sort. preferences.putString ( "preset", "6" ) ;

    Ezt látjuk a hibaüzenetben:
    :58:11.630 -> D: nvs_get_str failed 1102 for key preset, keylen is 6, len is 150!

    A kulcs hossza 6 ("preset" sztring hossza) de mi 150-et akarunk olvasni.
    Ennek oka a main.cpp 708. sorától az nvsgetstr ( const char* key ) függvény és a 145. sor
    #define NVSBUFSIZE        150                  // Max size of a string in NVS

    A nvsgetstr fv. első 5 sora :
    static char   nvs_buf[NVSBUFSIZE] ;  // Buffer for contents
    size_t        len = NVSBUFSIZE ;   // Max length of the string, later real length

     nvsopen() ;                               // Be sure to open nvs
     nvs_buf[0] = '\0' ;                       // Return empty string on error
     nvserr = nvs_get_str ( nvshandle, key, nvs_buf, &len ) ;

    Megnyitjuk, a 150 hosszú nvs_buf 0. pozijára beírjuk a C sztring szeparátort, eddig OK.
    Ezután viszont vissza akarjuk olvasni a kulcsot ( a mi esetünkben ez a "preset") , a 150 hosszú nvs_buf-ba, de mindig 150 hosszan mert a len változó értéke az bizony 150.
    Ez így - szerintem - sose fog menni,hibaüzenet lesz a 718. sorban.
    Ha minden igaz a kulcs valódi hosszát így lehet(ne) kideríteni.
    size_t real_len = 0;
    nvs_get_str ( nvshandle, key, nullptr , &real_len );
    Ezután kellene beolvasni a kulcsot a tényleges hossz ismeretében.
    nvserr = nvs_get_str ( nvshandle, key, nvs_buf, &real_len ) ;

    Itt egy jó példa fv. a tényleges hossz megállapítására [link]

Új hozzászólás Aktív témák