2016-11-06 5 views
-1

После некоторых изменений мой эскиз Arduino стал нестабильным, он работает только 1-2 часа и сработает. Теперь это месяц, что я пытаюсь понять, но не сделать разумный прогресс: основная трудность заключается в том, что малейшее изменение сделать его запустить, видимо, «ОК» в течение нескольких дней ...нужна помощь отладка нестабильной программы

Программа ~ 1500 строк длиной

Может кто-нибудь предложить, как продвигаться?

Заранее спасибо за ваше время

+0

Вы можете использовать 'setDefaultUncaughtExceptionHandler()', посмотрите здесь http://stackoverflow.com/questions/19897628/need-to-handle-uncaught-exception-and-send-log-file, чтобы реализовать это, и в 'handleUncaughtException()' позволяет сохранить исключение в файле или что-то, что вы можете просмотреть позже, и узнать, что происходит. – Yazan

ответ

0

Ну, встроенные системы Wery хорошо известны для непрерывной борьбы против Вселенной четвертого измерения: время. Известно, что некоторые задержки должны быть добавлены внутри кода - это не означает, что всегда используется подпрограмма sistem delay - просто порядок операций может решить много. Отладка системы с такой проблемой сложна. Могут быть использованы некоторые методы:

a) инвазивные: отметьте (например, используйте некоторые заявления printf) в различных местах вашего программного обеспечения, впишите или выйдите из некоторых процедур или других важных шагов и запустите снова - когда приложение выйдет из строя, вы должен заметить последнее увиденное сообщение и завершить сбой после этого шага программного обеспечения, отмеченного printf.

b) менее инвазивный: используйте доступный вывод GPIO в качестве выходного сигнала и установите его при входе в какую-либо рутину и на выходе; точка разрушения оставит вывод слишком высоким или низким. Вы можете использовать несколько контактов, если они доступны, и наблюдать за деятельностью с помощью осциллографа.

c) неинвазивный - используйте отладку JTAG или SWD - это лучший вариант - если ваша отладка микросопротивления отлаживается, тогда у вас есть способы найти ошибку.

+0

@Yazan: ваша ссылка относится к Android, o/p относится к Arduino, менее ресурсоемкой. Не спускайте вниз. – Yoan

+0

У меня есть вывод трассировки на монитор, и проявление пробоя ВСЕГДА та же сигнатура трассировки. но неясно, как программа выйдет из строя. Поскольку код продолжает выполняться во время вывода трассировки, я не знаю точно, где он разбивается. Я подозреваю, что одна функция вызвана сразу после последней печатной трассы, но при чтении кода я не нахожу ничего ненормального, а функция - примерно - ну 10 раз или около того перед сбоем – g2c

+0

Насколько велик ваш стек? Попытайтесь увеличить его, функция printf использует много стека, 2k будет начальным значением. Попробуйте также использовать штырь, как это предлагается, внутри этой функции. – Yoan