Проблемы перезагрузки контроллера
- Войдите на сайт для отправки комментариев
Доброго времени суток, товарищи!
Прошу помощи, так как у самого уже идеи отсутствуют. Есть проект JD-IOboard - атмега 328 16 МГц с ардуиновским загрузчиком с силовыми выходами через ULN2003. Проект судя по коммитам заброшен, а последняя прошивка имеет некорректную логику работы. Решил переписать код "как надо". После долгого и мучительного разбора плата начала работать адекватно. Но появился странный баг: контроллер начал рандомно перезагружаться на одном и том же месте кода (то есть, иногда перегружается, иногда нет). Я никак не могу это исправить. Кроме того выявился еще один глюк: При избыточной отладке на RX0 пин выдаётся LOW, из-за чего перестают идти данные в сторону контроллера, при том, что отладка идёт через SoftwareSerial. Прошу помочь хотя бы советом, в чём может быть причина такого неадекватного поведения.
Вылет происходит при арме полётного контроллера в файле IOBoard_Funcs.ino вот тут:
stoplight = false;
while(flMode != readEEPROM(mbind01_ADDR + (loopPos))) {
loopPos = loopPos + 2;
if (mbind01_ADDR + loopPos > mbind15_ADDR)
{
//DPL("Pattern not found Turn led off");
stoplight = true;
break;
}
}
if (stoplight){
pattByteA = 0x11111111;
pattByteB = 0x11111111;
} else {
pattByteA = readEEPROM(pat01_ADDR + loopPos);
pattByteB = readEEPROM(pat01_ADDR + (loopPos + 1));
}
DPL("Pattern is: ");
DPL(pattByteA, BIN);
DPL(pattByteB, BIN);
Сам скетч: https://yadi.sk/d/h7HJhsE2uQumy
Оригинальный проект: https://github.com/jdrones/jD-IOBoard/tree/master/jD_IOBoard_MAVLink
Причин такого поведения может быть 100500. Нужно акуратно идти и исключать одну за другой. Ну, вот, например, сколько памяти всё это добро занимает?
Много. freemem() показывает 185 байт. А как по-другому её глянуть не знаю. Я начинающий ардуинщик.
При компиляции что говорит? В конце компиляции там отчёт о памяти появляется. Скопируйте сюда сообщение.
Попробуйте для начала убрать полностью работу с последовательным портом, если он используется для отладки. Доступной памяти станет больше и если виснуть будет в том-же месте и при тех-же условиях, можно будет делать хоть какой-то предварительный вывод.
Прикольно, весь день сегодня причёсывал код, пришел домой, подключил всё это хозяйство - ничего не поменялось. Только убрал отладку (в т.ч. создание софтваре сериал на 11 ноге) - мало того, что скетч похудел почти в полтора раза, так еще и заработал =)
Остаётся только ответить на вопрос: что это было?
Вы шутите? Там было не только размер чкетча, но и размер глобальных переменных, что гораздо важнее. Давайте сообщение целиком, чего я из Вас по капле выдавливаю?
Это весь высер ардуино иде. Нет тут нужной информации. Что я делаю не так?
Типа "сам нарвался".
Там, кстати, много интересного. Например, предупреждения типа строк 17-20 обычно свидетельствуют об ошибках в коде.
Но дело не в этом, что у Вас за IDE такая? Обычо в сообщении появляется информация о памяти занимаемой глобальными переменными. Примерно вот так:э
Последнее (про переменные) намного важнее, чем про программу. Первое, что нужно исключить - это то, что у Вас не хватает памяти.
Поройтесь в опциях и попробуйте заставить её это сказать.
Но дело не в этом, что у Вас за IDE такая? Обычо в сообщении появляется информация о памяти занимаемой глобальными переменными.
Поройтесь в опциях и попробуйте заставить её это сказать.
В Arduino IDE 1.0.5 информация о свободной оперативной памяти не выдаётся.
В Arduino IDE 1.0.5 информация о свободной оперативной памяти не выдаётся.
Значит ТС надо найти способ её получить. Подозреваю, что у него стек режет кучу, но начинать проверки без понимания а сколько там всего остаётся - бессмысленная суета.
Пока что откладываю в долгий ящик, код без включения отладки заработал, а это главное. Контроллер, на котором всё это крутится не сильно критичен, так что, если баг всё же вылезет коптер от этого не упадёт. А что это за хрень была пока нет времени разбираться. Будут новости по этому вопросу - отпишусь. Всех благодарю. Спасибо!