Кончается память в ОЗУ в процессе выполнения программы
- Войдите на сайт для отправки комментариев
Чт, 21/05/2015 - 16:27
Здравствуйте, извините, за столь частые и глупые вопросы, но вот еще один ;-)
У меня утекает память вот в этой процедуре, точнее я везде понатыкал serial.print который выводит оставшееся место и вот после выполнения процедуры места (в ОЗУ) становится меньше :-(
Я лишь могу предположить, что не очищаются переменные при выходе из функции?!?!?
void SS2File(String Record) { char fname[9]; bool NewFile=false; String FirstLine; sprintf(fname, "%02d%02d.txt", tm_year-30, tm_mon); MyFile = SD.open(fname); if (!MyFile) NewFile=true; MyFile = SD.open(fname, FILE_WRITE); if (MyFile) { if (NewFile) { FirstLine="Sensors: t(in), H(in), t(out), H(out), Light, SH1, SH2, SH3, SH4"+String(Valves); MyFile.println(FirstLine); FirstLine="today 20"+String(tm_year-30)+" "+String(tm_mon)+" "+String(tm_mday)+" "; MyFile.println(FirstLine); } MyFile.println(Record); MyFile.close(); } if (TestMode) { Serial.println(Record); } }
вот процедура, которая смотрит на свободную память (нашел на форуме)
int freeRam () { extern int __heap_start, *__brkval; int v; return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); }
сам же и нашел. ладно с этим куском разобрался, попробую другой кусок поискать, где напортачил
в вышепредставленном куске заменил с 6й строки на это
а то файл не закрывался. вот и памяти кусок ;-)
Пальцем в небо. Не вдаваясь в подробности, в 06 и в 08 строках открывается файл и используется один и тот же дескриптор MyFile. Первый раз ладно, а вот во второй раз, когда файл уже есть файл, получается два раза открываем.
оказывается только этот кусок кушал память, причем, достаточно нелинейно (то есть вза один проход мог скушать от 30 до 500 байт ?! ) отсюда я думал, что еще где то в алгоритме массив запрыгивает в неположенное место.