Какой простой метод я могу использовать для отладки встроенного процессора без последовательного порта или видео?

StackOverflow https://stackoverflow.com/questions/69492

  •  09-06-2019
  •  | 
  •  

Вопрос

У нас есть небольшая встроенная система без каких-либо видео- или последовательных портов (т. е.мы не можем выводить текст через printf).
Мы хотели бы отслеживать прогресс нашего кода с помощью последовательности инициализации.
Есть ли какие-то простые вещи, которые мы можем сделать, чтобы помочь с этим?
Он не работает под управлением какой-либо операционной системы, а аппаратная платформа в некоторой степени настраивается.

Это было полезно?

Решение

Самым простым и масштабируемым решением являются индикаторы состояния.Переключайте светодиоды в зависимости от действий, либо в двоичной форме, либо при выполнении определенных действий, если вы можете сузить фокус.

Самым мощным будет аппаратное устройство JTAG.Вам даже не нужно устанавливать точки останова - может быть достаточно просто остановить приложение и проверить состояние памяти.Обратите внимание, что некоторые аппаратные платформы не поддерживают "навороченные" опции, такие как контроль памяти или аппаратные точки останова.Первое обычно обходится постоянной остановкой процессора и считыванием памяти (превращает вашу систему с частотой 10 МГц в систему с частотой 1 кГц), в то время как второе иногда выполняется с помощью замены кода (замените целевую инструкцию другим переходом), что иногда маскирует другие проблемы.Будьте в курсе этих проблем и того, к каким встроенным процессорам они применимы.

Другие советы

Есть несколько стратегий, которые вы можете использовать для облегчения отладки:

Если у вас есть доступные выходные контакты, вы можете подключить их к светодиодам (или осциллографу) и переключать выходные контакты high / low, чтобы указать, что в коде достигнуты определенные точки.
Например, 1 мигание может означать загрузку программы, 2 мигания - инициализацию foozbar, 3 мигания - прием входных данных...

Если у вас доступно несколько выходных линий, вы можете использовать 7-сегментный светодиод для передачи дополнительной информации (цифры / буквы вместо мигающих).

Если у вас есть возможности считывать память и доступно немного оперативной памяти, вы можете использовать функцию sprint для выполнения отладки, подобной printf, но вместо перехода к экрану / последовательному порту она записывается в память.

Это зависит от типа отладки, которую вы пытаетесь выполнить - в частности, если вам нужен временный метод трассировки или если вы пытаетесь предоставить инструмент, который можно использовать в качестве индикатора состояния в течение срока службы проекта (или продукта).

Для одноразовой детальной трассировки источника и отладки встроенного отладчика (напр.jtag) может быть очень полезным.Однако они наиболее полезны там, где ваша отладка требует установки точек останова и исследования памяти и регистров, что делает ее малоэффективной там, где вы сталкиваетесь с проблемами, критичными ко времени.

Там, где вам нужно определить состояние программы, не оказывая существенного влияния на работу вашей системы, будет полезно использовать светодиоды, подключенные к запасным контактам ввода-вывода.Они также могут использоваться в качестве входных данных для цифрового запоминающего осциллографа (DSO) или логического анализатора.Этот метод можно сделать более мощным, выбрав уникальные паттерны импульсов, которые будут идентифицироваться на DSO.

Однако для более универсального средства отладки хорошим решением является последовательный порт.Для экономии затрат и ресурсов печатной платы может оказаться полезным использовать подключаемый модуль, содержащий преобразователи RS232.

Если вы пытаетесь обеспечить долгосрочную индикацию состояния в рамках нормальной работы вашего устройства, светодиоды опять же являются дешевым и простым методом.Однако в этой ситуации лучше всего выбирать достаточно медленные схемы импульсов, которые можно легко идентифицировать при визуальном осмотре.Это поможет вам со временем усвоить определенный паттерн, представляющий "нормальное" поведение.

Вы можете легко эмулировать последовательную связь (UARTS), используя битовый обмен с выводами ввода-вывода системы.Подсоедините его к одному из выводов карты и подсоедините к преобразователю RS232 (преобразователи TTL в RS232 легко купить или изготовить самостоятельно), который подключается к последовательному порту вашего компьютера.

Отладчик JTAG также является опцией, хотя и громоздкой в настройке.

Если у вас нет JTAG, светодиоды, предложенные другими, - отличная идея, хотя вы, как правило, заканчиваете цикл тестирования / перестройки, пытаясь отследить проблему.

Если у вас есть больше времени, запасные аппаратные контакты и свободная память, вы всегда можете использовать низкоскоростной последовательный интерфейс.Я находил это довольно полезным в прошлом.

Другие предложили несколько довольно хороших идей с использованием выходных выводов, поэтому я не буду этого предлагать, хотя это может быть очень хорошим решением и очень экономичным.Если ваш бюджет и целевой процессор поддерживают это, система аппаратной трассировки (либо старомодный эмулятор, либо навороченный BDM с поддержкой трассировки отслеживания шины) может отлично подойти для такого рода задач.Хотя это очень дорого.

Идея использования немного потрепанного программного обеспечения UART хороша, но при его написании требуются определенные усилия, а также вам нужны свободные таймеры и прерывания.Если ваше оборудование имеет какой-либо другой неиспользуемый последовательный интерфейс (SPI, I2C, ..), использовать их будет проще.С помощью небольшого микроконтроллера вы могли бы преобразовать интерфейс в RS-232.

Если вам нужно использовать бит-стук, создание синхронного последовательного канала может быть более простой альтернативой, поскольку это не будет иметь критического значения для синхронизации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top