TestRealTime: как протестировать операционную систему в реальном времени с помощью Rational Test Real Time

В операционной системе реального времени (ОС) AUTOSAR архитектура программного обеспечения разделена на отдельные уровни (пространство пользователя, интерфейс системных вызовов, пространство ядра). Кроме того, переключение между пользовательским контекстом и контекстом ядра обрабатывается аппаратно-зависимой инфраструктурой, и обычно обработчик переключения контекста написан на ассемблере.

IBM® Rational® Test RealTime v8.0.1 (RTRT) в настоящее время обрабатывает встроенный ассемблерный код, как указано в приведенных нижевопросах и ответах.

https://www.ibm.com/support/pages/how-treat-embedded-assembly-code( **)

Инструмент RTRT, использующий технологию вставки кода (технически известный какинструментальный процесс) для вставки собственного кода для измерения покрытия кода тестируемой системы.

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

Я узнал из ( **) и убедился, что переключение контекста работает правильно. Но я не знаю, как научить RTRT правильно завершать свою постобработку (состоящую из attolcov и attolpostpro). Обратите внимание, что ОС уже работала правильно во всех моих задачах и была подтверждена отладчиком. SHUTDOWN Процедура ОС была выполнена правильно, и ОС была в цикле INFINITE (например,while(1){};)

После того, как RTRT завершит все свои процессы, отчет о покрытии модуля ОС останется пустым.

На основе рекомендаций IBM для RTRThttps://www.ibm.com/developerworks/community/forums/atom/download/attachment_14076432_RTRT_User_Guide.pdf?nodeId=de3b0048-968c-4111-897e-b73654af32af

RTRT предоставляет две точки останова, чтобы отметить точку регистрации (priv_writeln) и точку завершения (priv_close) своего процесса.

Я уже пытался перейти от INFINITE (моя ОС) к priv_close (RTRT), взаимодействуя с регистром ПК и всеми регистрами переключения контекста с отладчиком Лаутербаха, но отчет о покрытии RTRT был пуст, даже несмотря на то, что никаких ошибок не произошло. Отсутствие ошибки означает, что переключение контекста из пространства ядра в пространство пользователя работает нормально и функция main() вернулась правильно.

1 ответ

Решение

Решил проблему.

Это определенно произошло из-за процесса переключения контекста операционной системы.

В моем случае я сделал дамп ОЗУ, чтобы увидеть, как выглядит контекстная память пользователя (перед запуском ОС).

После этого я сделаю резервную копию всех областей контекста и восстановлю их из Sleep или Infiniteloop в точном порядке.

Таким образом, RTRT может узнать точку возврата и достичь своей собственной функции main(), чтобы завершить создание отчета.

Наконец, был создан отчет о покрытии кода.

Другие вопросы по тегам