0

在 AUTOSAR 实时操作系统 (OS) 上,软件架构是单独分层的(用户空间、系统调用接口、内核空间)。此外,用户上下文和内核上下文之间的切换由特定于硬件的基础设施处理,并且通常上下文切换处理程序是用汇编代码编写的。

IBM® Rational® Test RealTime v8.0.1 (RTRT) 当前处理嵌入式汇编代码,如以下问答中所述。

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

RTRT 工具使用代码插入技术(技术上称为插桩过程)插入自己的代码,以测量被测系统的代码覆盖率。

就我而言,具有完全先发制人设计的操作系统没有终止点。因此,除非断电,否则操作系统始终运行。如果没有工作,操作系统将处于睡眠状态(通常是空闲状态并且什么都不做)。如果发生任何意外错误或异常,操作系统将被关闭并进入无限循环。这些表明操作系统始终在运行

我从 ( ** ) 中学习并确保上下文切换正常工作。但我不知道如何教 RTRT 以正确的方式完成其后处理(由attolcovattolpostpro组成)。请注意,操作系统已经在我的所有任务中正常工作,并已由调试器确认。SHUTDOWN OS 程序已正确执行且 OS 已处于 INFINITE 循环(如while(1){};在此处输入图像描述

RTRT 结束所有进程后,OS 模块的覆盖报告仍为空。

基于 IBM 的 RTRT 指南 https://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 )。

我已经尝试通过将 PC 寄存器和所有上下文切换寄存器与 Lauterbach 调试器交互来从INFINITE(我的操作系统)驱动到priv_close(RTRT),但是即使没有发生任何错误,RTRT 覆盖率报告也是空的。没有错误意味着从内核空间到用户空间的上下文切换能够正常工作并且main()函数正确返回。

4

1 回答 1

0

解决了这个问题。

它肯定来自操作系统的上下文切换过程。

就我而言,我做了一个 RAM 转储来查看用户上下文内存(在启动操作系统之前)的样子。

之后,我将备份所有上下文区域,并以确切的顺序从SleepInfiniteloop中恢复它们。

在此处输入图像描述

这样RTRT就可以知道返回点,到达自己的main()函数的_exit,完成报表生成进度。

最后,生成了代码覆盖率报告。

在此处输入图像描述

于 2020-06-16T04:13:47.503 回答