ESP-32-CAM работа с jpeg файлом

По какой то причине он же не хочет сразу задать массив нужного размера в шапке программы

Тут все равно не понял того что вы пишете. Как можно выделить нужный размер массива если максимальный размер этой самой кучи 113кб. Вылетает в ребут если пытаться что то такое выделять больше чем данный буфер размера.

Можно же задать 50К или 100К сразу и не выделять - очищать в цикле.

а еще лучше 1к

Ок. Я переделал. Буфер уменьшил до 1кб. В целом тоже работает. Файл 2мб записывался примерно 30секунд но все работает. Всем спасибо!
Ниже получившийся код. Вдруг кому нужно

long trebfilesize = file2.size(), bufsize=1024; 
          long ost = trebfilesize,tek=0,sled=0,mnog=0, i, j; 
          unsigned char *buf = new unsigned char[bufsize];
          while(ost>0){
            
            if (ost>bufsize) {mnog=bufsize;}  
            else {mnog=ost;}
            Serial.print("mnog= ");
            Serial.println(mnog); 
            tek=sled;           
            sled=tek+mnog;
            
            
            
            if (nullptr == buf) { Serial.print("error"); }
            for(i=tek, j=0;i<sled, j<mnog;i++,j++){
              buf[j]=file2.read();
               
            }
            file3.write( buf, mnog );             
            
            ost=ost-mnog;
            
            
             
            
            Serial.print("ost= ");
            Serial.println(ost);
          }
          delete [] buf;

условия через запятую не записывают, они так работать не будут. Используйте AND или OR

Файл будет обрабатываться быстрее, если читать не по одному байту, а сразу блоком в 1к

Художник пишет как умеет !!!

При чем тут умеет или нет. Условия через запятую - это грубая ошибка, может опять привести к вывалу за пределы массива и зависанию программы…

1 лайк

Там условия монопенисуальны и любое из них можно удалить …

Да согласен. Работает и через буфер. Тогда половина кода не нужна

long trebfilesize = file2.size(), bufsize=1024; 
          long ost = trebfilesize, mnog=0, i, j; 
          unsigned char *buf = new unsigned char[bufsize];
          while(ost>0){
            
            if (ost>bufsize) {mnog=bufsize;}  
            else {mnog=ost;}
            Serial.print("mnog= ");
            Serial.println(mnog); 
            
            
             
            file2.read(buf, mnog);
            file3.write( buf, mnog );             
            
            ost=ost-mnog;
             
            Serial.print("ost= ");
            Serial.println(ost);
          }
          delete [] buf;