Существуют ли стандартные методы тестирования для голого кода


8

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

Ответы:


11

Первое, что я проверяю на новой плате, использует ли она внутренний генератор или внешний кристалл, это то, что у меня правильно настроена тактовая частота. Это важно, потому что от него зависят многие периферийные устройства, такие как UART, SPI, I2C и таймеры.

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

Что касается периферийных устройств, лучший способ проверить их - это использовать осциллограф, если он у вас есть, и посмотреть на линию RX для UART, CLK, MOSI и линии выбора микросхем для SPI, а также линии SDA и SCL для I2C, и проверьте, что линии переключаются, и время выглядит правильным.

Если у вас нет осциллографа, вы можете поставить светодиоды на эти линии, а затем включить или отключить периферийные устройства. Когда отключено, большинство линий будет низким (светодиод выключен), но некоторые будут высокими, как провод RX UART (светодиод включен). Когда периферийное устройство включено, большинство светодиодов должно тускнеть, так как линии будут переключаться. Работая в цикле (отключено / включено), легче увидеть разницу между on или dim.

Для UART вы можете подключить линию TX к линии RX в виде петли. Затем вы также можете подключить кабель UART к USB , а на ПК - настоящий терминал с программой, подобной RealTerm . Помимо тестирования интерфейса, это пригодится позже для другой отладки.

Для других частей кода я использую несколько светодиодов по мере необходимости, чтобы показать, что выполняются различные пути в коде. Если у вас есть UART, работающий и подключенный к ПК, вы можете посыпать свой код вызовами подпрограммы, чтобы вывести сообщение, показывающее, чего достигла программа (или использовать printf, если у вас есть стандартные библиотеки C). Но, как отмечает Владимир Краверо в комментарии ниже, это может немного замедлить ваш код (со скоростью 115 200 бод, не слишком много, поскольку время одного символа <10 мкс). Но в ISR и другом критичном по времени коде просто используйте светодиоды.

Как отмечает Аль Банди в комментарии ниже, внутрисхемные отладчики также могут быть полезны, особенно если можно установить несколько точек останова, и даже более полезны, если вы можете изменить точку останова в изменяемой области памяти. Не все отладчики имеют эту функцию.

Однако я не часто использую отладчики, если мне не нужно, например, для просмотра битов в периферийном регистре; или отследить ошибку, которую я не могу найти в результате проверки; или к элементарному анализу покрытия кода. Но в целом я люблю запускать программы с «нормальной» скоростью, поскольку обычно появляется много проблем, которых может не быть, когда программа выполняется в один шаг. Большинство моих программ часто используют прерывания, что мешает использованию отладчика.


Вы сказали почти все, я бы просто добавил, что обычно обрызгивание вашего кода с помощью fprintf сильно замедлит его, это то, что вы должны использовать в случае необходимости, и если вы знаете, что делаете. Я видел некоторые вопросы (и были некоторые проблемы) о fprintf в ISR или что-то подобное.
Владимир Краверо

@VladimirCravero Согласитесь - вот почему нравится использовать светодиоды.
tcrosley

Спасибо за ответ. Есть ли какие-нибудь указатели на то, какие инструменты / настройки вы бы использовали для покрытия кода, если у вас есть только симулятор, а не собственное оборудование?
пещерный человек

Как насчет отладчика? Разве не стоит упоминать?
Аль Банди

2
@AlBundy Я не часто использую отладчики, если мне не нужно, например, для просмотра битов в периферийном регистре; или отследить ошибку, которую я не могу найти в результате проверки; или выполнить анализ покрытия элементарного кода, как я упоминал в своем комментарии к ФП. Но в целом я люблю запускать программы с «нормальной» скоростью, поскольку обычно возникает много проблем, которых не бывает, когда программа выполняется в один шаг. Большинство моих программ часто используют прерывания, что мешает использованию отладчика. Я добавлю некоторые из этих комментариев в мой ответ.
tcrosley
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.