Проблемы перезагрузки контроллера
- Войдите на сайт для отправки комментариев
Доброго времени суток, товарищи!
Прошу помощи, так как у самого уже идеи отсутствуют. Есть проект 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 информация о свободной оперативной памяти не выдаётся.
Значит ТС надо найти способ её получить. Подозреваю, что у него стек режет кучу, но начинать проверки без понимания а сколько там всего остаётся - бессмысленная суета.
Пока что откладываю в долгий ящик, код без включения отладки заработал, а это главное. Контроллер, на котором всё это крутится не сильно критичен, так что, если баг всё же вылезет коптер от этого не упадёт. А что это за хрень была пока нет времени разбираться. Будут новости по этому вопросу - отпишусь. Всех благодарю. Спасибо!