gremlinable (gremlinable) wrote,
gremlinable
gremlinable

Ещё раз о тяжести программистской жизни

Уже несколько месяцев меня мучал один неприятный и весьма нестабильный баг - по непонятным причинам контроллер входил в какой-то режим, в котором он постоянно перезагружался при выключении связного модуля. При чём перезагружался он чётко и стабильно - инициализация переферии, включение связного модуля, нормальный сеанс связи, выключение, ребут и так по кругу, до тех пор, пока либо не снимешь с него всё напряжение, отключив питание и разрядив все кондёры, либо не перепрошьёшь его (external reset и кратковременное передёргивание батарейки не помогало). Отладка осложнялась нерегулярностью проявления бага - от пары раз в неделю, до раза в пару-тройку недель.
Сегодня подловил этот баг в процессе отладки бутлоадера, в результате чего выяснилось, что во-первых контроллер ребутится только в основной прошивке, хотя бутлоадер использует аналогичный код для обмена информации, только более плоский, а во-вторых - что перепрошивка через бутлоадер не выводит контроллер из этого состояния. Дальше дело техники - урезаем программу по максимуму, пичкаем код отладочным выводом и тд. Короче, причина бага оказалась банальной - я забыл сделать явную инициализацию одного из своих регистров флагов, в результате чего при каких-то хитрых стечениях обстоятельств появлялась единичка в разряде "иди в бутлоадер" - вот он и шёл...
К чему я это? Ну, например, "не доверяйте компилятору, делайте инициализацию явным образом", или просто "будьте внимательны, ищите ошибки у себя, а не у других".
Единственное, что смущает - раньше я ловил подобные ребуты и в бутлоадере и в урезанной по самое немогу прошивке, но было это на одной из первых версий прибора, которая вся искалечена экспериментами. Остаётся только надеяться, что там глюки были всё-таки обусловлены кривым питанием или парой косяков, исправленных в новой модификации.
Tags: avr, программерское
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments