0

Im trying to make my own log function inside an esp32cam, reason is i cant use the serial monitor thanks an odd hardware error while using the esp32cam-mb,

I manage to initialized the sd card and make the file, but for some odd reason I only get the same odd character

in my function i ask for a const char value but im passing a plain string Log("got ip: ") as well other error string from esp32 const char *string_err = esp_err_to_name(wifi_err), i know i shouldnt be mixing string and const but honestly i dont know how to handle strings in c, i know i can declared it in c++ but here im lost, im adding my code below.

i use it here like this

const char *string_err = esp_err_to_name(wifi_err); 
Log(string_err);
Log("This my ip:");

but all i get on my log.txt file is this

 L@?L@?L@?L@?L@?L@?L@?L@?L@?L@?L@?L@?L@?L@?L@?L@?L@?L@?L@?L@?L@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?�/@?��@?

what might be the error? this is my code

void Log(const char *info){
    sdmmc_card_t *card;
    FILE *f;
    const char mount_point[] = MOUNT_POINT;
    const char *file_foo = MOUNT_POINT"/Log.txt";

    // open cards
    card = Open_Card(); // here i initialized the sd card for further use

    // check if file exist, then append to file
    if (access(file_foo,F_OK) == 0){
        f = fopen(file_foo, "a");   //append mode
        //fgets(info,sizeof(info),f);
        fwrite(&info , 1, sizeof(info), f);
        fclose(f);
    }else{
        f = fopen(file_foo, "w");   //creates and write mode
        fwrite(&info, 1,sizeof(info),f);
        fclose(f);
    };
        // All done, unmount partition and disable SDMMC peripheral
    esp_vfs_fat_sdcard_unmount(mount_point, card);
    
}

im using esp32cam, platformio + vscode , espressif 5.3.0 (v6 wont support esp32cam)

lightshadown
  • 165
  • 1
  • 1
  • 10

1 Answers1

2

this line

 fwrite(&info , 1, sizeof(info), f);

is just writing a pointer to the file, you need fprintf

 fprintf(f , "%s", info);
pm100
  • 48,078
  • 23
  • 82
  • 145
  • i had the impression fwrite was capable of write strings direcctly to the file, anyway fprintf fix my issue, thanks a lot – lightshadown Mar 07 '23 at 23:42
  • It is but info is already a pointer. You’re taking the address of it. Also, sizeof() is a compile time directive, you’d need to use strlen(). – romkey Mar 07 '23 at 23:59
  • 1
    @lightshadown you could also do `fwrite(info,1,strlen(info),f)` but fprintf is clearer – pm100 Mar 08 '23 at 00:08