I'm working on a project that I need to write a file in the flash memory, but when I calling the function to open file (fs_open), the microcontroller crashes completely and the following message appears:
->E: ***** MPU FAULT *****
->E: Stacking error (context area might be not valid)
->E: Data Access Violation
->E: MMFAR Address: 0x200159b8
->E: r0/a1: 0x8625890d r1/a2: 0x911daf84 r2/a3: 0x8779922f
->E: r3/a4: 0xfe8bd497 r12/ip: 0xd8dc16c8 r14/lr: 0xb98b5e52
->E: xpsr: 0x5fd38800
->E: Faulting instruction address (r15/pc): 0xac1da62a
->E: >>> ZEPHYR FATAL ERROR 2: Stack overflow on CPU 0
->E: Current thread: 0x20001be8 (unknown)
->E: Halting system
- Libraries used to file system:
ssize_t sirros_readFile(char * file_name, char* file_content, size_t file_size, off_t file_pos) { char caminho_arquivo[MAX_FILE_PATH_LEN]; struct fs_file_t file; int ret; ssize_t read_size; snprintf(caminho_arquivo, sizeof(caminho_arquivo), "%s%s", mp->mnt_point, file_name); fs_file_t_init(&file); ret = fs_open(&file, caminho_arquivo, FS_O_READ); if (ret) return 0; if (file_pos != 0) fs_seek(&file, file_pos, FS_SEEK_SET); read_size = fs_read(&file, file_content, file_size); ret = fs_close(&file); file_content[read_size] = 0; return read_size; } bool sirros_writeFile(char * file_name, char* file_content, size_t file_size, off_t file_pos) { //printf("entrei na writeFile"); char caminho_arquivo[MAX_FILE_PATH_LEN]; struct fs_file_t file; int ret; size_t written_size = 0; //printf("parte 1"); snprintf(caminho_arquivo, sizeof(caminho_arquivo), "%s%s", mp->mnt_point, file_name); //printf("parte 2"); fs_file_t_init(&file); //printf("parte 3"); ret = fs_open(&file, caminho_arquivo, FS_O_CREATE | FS_O_WRITE); //printf("parte 4"); if(ret < 0) return false; //printf("parte 5"); if (file_pos != 0) fs_seek(&file, file_pos, FS_SEEK_SET); if(file_size == 0) file_size = strlen(file_content); written_size = fs_write(&file, file_content, file_size); ret = fs_close(&file); return written_size == file_size; } bool sirros_appendFile(char * file_name, char* file_content, size_t file_size) { char caminho_arquivo[MAX_FILE_PATH_LEN]; struct fs_file_t file; int ret; size_t written_size = 0; snprintf(caminho_arquivo, sizeof(caminho_arquivo), "%s%s", mp->mnt_point, file_name); fs_file_t_init(&file); ret = fs_open(&file, caminho_arquivo, FS_O_CREATE | FS_O_APPEND); if(ret < 0) return false; if(file_size == 0) file_size = strlen(file_content); written_size = fs_write(&file, file_content, file_size); ret = fs_close(&file); return written_size == file_size; } bool sirros_existsFile(char * file_name) { char caminho_arquivo[MAX_FILE_PATH_LEN]; struct fs_file_t file; int ret; snprintf(caminho_arquivo, sizeof(caminho_arquivo), "%s%s", mp->mnt_point, file_name); fs_file_t_init(&file); ret = fs_open(&file, caminho_arquivo, 0); fs_close(&file); return ret == 0; } bool sirros_removeFile(char * file_name) { char caminho_arquivo[MAX_FILE_PATH_LEN]; snprintf(caminho_arquivo, sizeof(caminho_arquivo), "%s%s", mp->mnt_point, file_name); int ret = fs_unlink(caminho_arquivo); return ret == 0; }
sprintf(payload_id_char, "%d", payload_id); sirros_removeFile("/arq_id.txt"); sirros_writeFile("/arq_id.txt", &payload_id_char, strlen(payload_id_char), 0);
sirros_readFile("/arq_id.txt", payload_id_char, sizeof(payload_id_char), 0); payload_id = atoi(payload_id_char); printf("payload_id: %i", payload_id);