Чудеса при в цикле чтении EEPROM
- Войдите на сайт для отправки комментариев
Здравствуйте, у меня на MEGA 2560 происходит следующее: программа достаточно большая, но проблема возникает в куске, который читает кусок памяти EEPROM. Ниже приведу кусок программы и "ответ" из терминала. Помогите понять, как такое происходит.
стоит обратить внимание, что непонятно как получается такой результат (обратите, как он выводит переменную addr, которая изменяется по схемее addr+=4; она внезапоно становится равной 67 и перестает изменяться
byte addr=31; if (TestMode) Serial.print(" VClock "); for (j=0;j<Valves;j++) { ValveClock[j]=EEPROM_float_read(addr); addr=addr+4; if (TestMode) { Serial.print(addr); Serial.print("/"); Serial.print(j); Serial.print(" "); Serial.print(ValveClock[j]); Serial.print(" "); } } VClock 35/0 0.75 67/1 0.00 67/2 0.00 67/3 0.00
Функция взята с форума, честно, не особо понимаю вот это "float *y = (float *)&x;", но на форуме сказали, что работает :-)
float EEPROM_float_read(int addr) { byte j; byte x[4]; for(j=0;j<4;j++) x[j] = EEPROM.read(j+addr); float *y = (float *)&x; return y[0]; }
Когда я взял и закомментил все процедуры, то программа стала работать корректно, затем, я постепенно раскомментировал все процедуры и проблема ушла ровно до первой перезагрузки.
Я недоумеваю!
ЕПРСТ, что с названием то!!! :-) Если админ сможет со старварского на русский переставить, то ему большое спасибо!
Ну а что вам мешало проверить, что дело не в этом куске кода???
Скорее всего вы где выходите за пределы масиива или не хватает памяти.
Можете еще так попробовать Запись и чтение EEPROM переменных типа float, unsigned long, long, unsigned int, int.
м.б. я что то не понимаю, но почему
addr+=4;
внезапно перестает работать
кстати, я понимаю, что код рабочий, так как я запускал его отдельно.
Скорее всего вы где выходите за пределы масиива или не хватает памяти.
то есть, если при выполнении программы используется много памяти, она начинает "дурить" в переменных
с массивами, все должно быть корректно, так как я проверял процедуру отдельно, а запуск этой процедуры происходит в цикле setup почти в самом начале (сразу после того, как программа устанровит текущее время)
компилятор не ругается на память
Я прочесал алгоритм. Он олностью работает без двух процедур, сохраняющих и ичитающих данных из EEPROM, причем отдельно код этих двух процедур работает...
Я грешу на переполнение памяти. Есть ли какие либо средства проверки памяти?
попробуй так или так но почемутип выбрал byte?
попробуй так или так но почемутип выбрал byte?
Конечно тип in это меня глюк нуля, когда я сюда код переписывал в программе всегда int т.к. он доходит до 1500
Но вот непонятно, как я озвучил выше, почему по отдельности все работает, а вместе - нет :-(