Модульные тесты для кода с большим количеством прерываний

Я пишу код C для чипа AVR. Код перегружен процедурами обслуживания прерываний, которые ожидают последовательных портов, АЦП и таймеров. ISR записывают в буферы, которые проверяет основной цикл, когда до них доходит.

Я разрабатываю буферы так, чтобы ISR могли обновлять их, пока основной цикл их считывает. Я хочу убедиться, что это работает. У меня есть модульные тесты для проверки базовой операции, но я не понимаю, как проверить, что произойдет, если сработает прерывание, когда основной цикл считывает буфер.

Мой юнит-тест действительно прост — некоторый код в main() функции. Я запускаю тесты на своем Linux-боксе.


person iter    schedule 01.03.2010    source источник


Ответы (1)


Потоки?

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

(Возможно, это скорее интеграционный тест, чем чистый модульный тест.)

person AShelly    schedule 02.03.2010
comment
Я ожидаю, что может быть много работы с использованием потоков для имитации времени прерывания. Интересно, достаточно ли распространен этот тип тестирования, чтобы существовал пакет, реализующий его. - person iter; 02.03.2010