ВходНаше всё Теги codebook PARTS Поиск Опросы Закон Вторник
7 июля
/961867
Топик полностью
Nikolay_Po (30.11.2019 21:05, просмотров: 18) в ответ на На всякую пожарку поясню что это я дебажу не свежий и не свой код. В код изменения я не вносил. - автор: RxTx
То, что собранный код в железе работает 5 лет, совершенно не означает, что в нём нет ошибок. А разница между рабочей прошивкой и отладочной есть, отладчик забирает десятки байт памяти, поэтому не исключены подвижки объектов в ОЗУ. Например, выполнили не корректное преобразование типов между 16 и 8 битами. И при сдвиге на байт - вуаля - аппаратный сбой, ошибка адресации. Или память для DMA или SIMD не объявили должным образом. Тоже. Нужны прописанные трэпы и прерывания, для начала с while(1);, чтобы понять, где виснет/сбрасывается. Не знаю, что там у вас за проект, требования и рамки, но если ресурсов не на пределе, рекомендую полностью сменить тулчейн на MPLAB X и XC16 и отрефакторить. Недавно имел опыт доработки чужого, рабочего кода на dsPIC30F6914A. Нужно было добавить Modbus RTU вдобавок к обычному UART. Как оказалось, старый код индусский (на самом деле таковым и был), дышит на ладан. И работа нарушается при любых мало-мальских изменениях. За два вечера переписал с HiTech C на XC16 (код электромагнитного расходомера). Самой большой трудностью была замена коммуникационных библиотечных функций. I2C заменил на машину состояний с очередью. АЦП перевёл на оверсэмплинг с более глубокой фильтрацией. Разделил задачи по приоритетам используя контроллер прерываний - для задач разного приоритета барл вектора прерываний неиспользуемой периферии. В общем, стало намного лучше, стабильнее и точнее. Для шин передачи данных добился такой надёжности, что при произвольных помехах, замыканиях на землю, код не вис, сохранял управляемость и восстанавливал связь с чипами обвязки сразу, как только внешнее воздействие завершалось. В итоге появилась возможность добавлять любой функционал в пределах ресурса CPU без влияния на работу расходомера. Но сама доработка, фактически, замена кода заняла уже пару месяцев свободного времени.
Ответить