Junkie
Member
Суть проблемы в том, что я перегоняю изображение из одного формата в другой, то есть открываю один файл, вычитываю его и в это же время записываю, но все это по разным функциям, то есть у меня общая переменная
в функции инициализации я присваиваю
и затем уже в функции add я делаю
эта функция вызывается многократно,
вобщем после некоторого числа переваренных данных все падает с ошибкой
расшифровка
как видим падает в функции которая делает write
а в исходниках littlefs эта выглядит
то есть там какие-то проверки, и между вызовом функции он крашится, кстати что за функция LFS_TRACE? как я понял можно где-то включить чтобы она выводила все действия, как это сделать? и самое главное почему падает программа? что можно попробовать чтобы исправить?
File f;
в функции инициализации я присваиваю
f = fileSystem->open("convert.tmp", "r");
и затем уже в функции add я делаю
Код:
uint16_t pix =
((*(colors + el * 3 + 0) >> 3) << 10) |
((*(colors + el * 3 + 1) >> 3) << 5 ) |
(*(colors + el * 3 + 2) >> 3);
giftemp.write((char*)&pix, 2);
вобщем после некоторого числа переваренных данных все падает с ошибкой
Код:
Panic ../lib/littlefs/lfs.c:2875 lfs_file_write: Assertion 'file->flags & LFS_F_OPENED' failed.
>>>stack>>>
ctx: cont
sp: 3ffffc60 end: 3fffffc0 offset: 0000
3ffffc60: 00000001 000000be 00000374 00000003
3ffffc70: 000000fe 00000000 00000000 00000000
3ffffc80: 00000000 00000000 00000000 40260db4
3ffffc90: 3fff2310 000010b1 00000000 3fffff10
3ffffca0: 3fff577c 0000086f 3fff2d2c 4021ef62
3ffffcb0: 3ffffd42 00000002 00000000 4021ef96
3ffffcc0: 4020a4eb 00000030 00000015 4020340d
3ffffcd0: 4020a4f4 0000062e 3fff4e7c 00000020
Код:
Decoding stack results
0x4020a4eb: add(uint16_t) at C:\Users\user\AppData\Local\Temp\arduino_build_408149\sketch\sub_gif.cpp line 89
0x4020340d: lfs_file_write at C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\LittleFS\src\../lib/littlefs/lfs.c line 2881
0x4020a4f4: add(uint16_t) at C:\Users\user\AppData\Local\Temp\arduino_build_408149\sketch\sub_gif.cpp line 90
0x40100184: NeoEsp8266DmaMethodBase ::i2s_slc_isr() at C:\Users\user\Documents\Arduino\libraries\NeoPixelBus_by_Makuna\src/internal/NeoEsp8266DmaMethod.h line 487
0x4021286d: littlefs_impl::LittleFSFileImpl::write(unsigned char const*, unsigned int) at C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\LittleFS\src/LittleFS.h line 346
0x4020a5ca: getBit(unsigned char*, int) at C:\Users\user\AppData\Local\Temp\arduino_build_408149\sketch\sub_gif.cpp line 14
0x40221bdd: fs::File::write(unsigned char const*, unsigned int) at C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\cores\esp8266\FS.cpp line 40
0x4020a946: gif_header(String, bool) at C:\Users\user\AppData\Local\Temp\arduino_build_408149\sketch\sub_gif.cpp line 124
0x4020a4cd: add(uint16_t) at C:\Users\user\AppData\Local\Temp\arduino_build_408149\sketch\sub_gif.cpp line 69
а в исходниках littlefs эта выглядит
Код:
lfs_ssize_t lfs_file_write(lfs_t *lfs, lfs_file_t *file,
const void *buffer, lfs_size_t size) {
LFS_TRACE("lfs_file_write(%p, %p, %p, %"PRIu32")",
(void*)lfs, (void*)file, buffer, size);
LFS_ASSERT(file->flags & LFS_F_OPENED);
LFS_ASSERT((file->flags & 3) != LFS_O_RDONLY);
....