Один из наших сопроцессоров — 8-битный микропроцессор. Его основная роль заключается в управлении аппаратным обеспечением, которое обрабатывает флэш-память. Мы подозреваем, что код, который он выполняет, очень неэффективен, поскольку мы замерили низкие скорости при чтении/записи во флэш-память. Проблема в том, что у нас есть только один порт J-TAG, подключенный к основному процессору, поэтому его отладка невозможна. Что у нас есть, так это регистр, доступный из ЦП, который содержит программный счетчик микропроцессора. Плохая новость заключается в том, что микропроцессор работает на другой частоте, чем ЦП, поэтому контролировать его программный счетчик снаружи также сложно. Измерение времени внутри микропроцессора также очень сложно, поскольку его регистры имеют длину всего 8 бит. Излишне говорить, что код находится на ассемблере и очень сложен. Как бы вы подошли к этой проблеме?
Отладка микропроцессора
Ответы (1)
Излишне говорить, что код находится на ассемблере и очень сложен. Как бы вы подошли к этой проблеме?
Я бы посоветовал вам начать с (или сгенерировать) спецификации требований для этой части и повторно реализовать код на C (или даже осторожно использовать подмножество C++). Если «сложность», которую вы воспринимаете, заключается просто в коде, а не в требованиях, было бы неплохо спроектировать это - это только сделает обслуживание в будущем более сложным, подверженным ошибкам и дорогим.
Одним из распространенных аргументов в пользу использования ассемблера являются размер и производительность, но чаще всего большой объем кода на ассемблере далек от оптимального; чтобы сохранить уровень производительности и удобства обслуживания, часто используется и повторно используется «шаблонный» код, который не адаптирован к конкретной ситуации, тогда как компилятор будет анализировать изменения кода и выполнять «микрооптимизацию», которую проектировщики системы действительно не должен париться. Сделайте ваши алгоритмы и структуры данных эффективными и оставьте детали целевого набора инструкций компилятору.
Даже без возможности прямой отладки на цели использование языка высокого уровня позволит создавать прототипы и моделировать, например, на ПК.
Даже если вы сохраните код на ассемблере, если ваши инструменты разработки включают симулятор набора инструкций, это может быть хорошей альтернативой аппаратной отладке; особенно если он поддерживает сценарии отладчика, которые можно использовать для имитации поведения аппаратных устройств.
Все это говорит о том, что смотреть на это как на «черный ящик» и делать вывод о том, что код неэффективен, — это своего рода скачок. Например, какая флэш-память кажется медленной? Как он связан с микроконтроллером? И как вы измеряли эту производительность? Флэш-память по своей природе медленная - особенно запись и стирание страниц; проверьте технические характеристики флэш-памяти, прежде чем делать какие-либо выводы о производительности программного обеспечения.