ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 ноября
871106
Tech_ (14.09.2018 18:36, просмотров: 32800)
И на старуху бывает проруха. Взялся за доработку старого проекта, который не трогал чуть больше двух лет (на прошлой работе). Добавил функционал в прибор, и на испытаниях первой партии вылез случилось странное. Небольшая часть приборов (автономных) стала заканчивать работу раньше установленного времени (случайно). Копал два дня, гонял несколько приборов, отладчик никак не помогал (неисправность не проявлялась). Стал думать при каких условиях внесенные изменения вообще могут к такой ситуации привести, при условии, что логика программы не нарушается. Есть указатель на функцию, который инициализируется нулём. Т.е. при вызове функции по свежему указателю происходит почти рестарт программы, что похоже на результат сбоя. Но в программе есть не инициализированная глобальная переменная (как бы, по умолчанию, равна нулю) которая должна принять отличное от ноля значение при присвоении указателю первого же осмысленного значения. Лезу в файл *.lkr (да, PIC MPLAB) и вижу c018i.o, а нужно было c018iz.o. Т.е. глобальным переменным не присваивалось нулевое начальное значение.