如何在VxWorks上实现抽象层,以提供异常处理和处理的句柄。内存管理?

时间:2012-03-29 15:39:26

标签: vxworks

我刚刚开始研究VxWorks。我目前正致力于以下方面: -

我需要创建一个包含异常处理和框架的框架。内存管理(例如,检测空指针使用)。总而言之,它将像操作系统上的抽象层。该框架将采用可下载的内核模块的形式。单元测试(也是DKM)将从该框架中获取。

我想操纵异常处理程序&自己处理,但我不知道怎么做。

ED& R组件需要配置内核映像才能使用某些API(如果我理解正确的话),但如果它是已经在内核空间中的DKM,则它不具有完全访问权限内存(RAM,持久性内存)&因此可以直接获得访问权限吗?

您能否就如何实现目标向我提供一些指导?

目前,当发生异常时,在显示一些细节后,任务将停止。我得到一个调试模块的提示。之后,为了查看核心转储,我使用命令edrShow。

我想要做的是,摆脱调试提示&任务停止后,将核心转储显示给用户,而不必显式发出命令。

我确实研究过edrStub.c(edrKernelFatalPolicyHandler方法),但我无法弄清楚如何操作它以获得所需的结果。

1 个答案:

答案 0 :(得分:1)

我认为你所谈论的是想要对异常机制实施某种扩展 ED& R已经很好地处理了你提到的条件。通常会暂停违规任务,以便您可以将调试器连接到它。

如果您不喜欢异常的默认处理,那么您可以修改位于comp / src / vxworks / edrStub.c中的代码(我认为这就是它的位置)。然后,您可以实现自己的函数来处理致命异常。

如果你想处理特定的异常,你可以使用excLib插入自己的异常处理程序,但你真的想知道你在做什么......

至于将内容放入DKM中,最简单的方法是为某些特定功能预定义函数指针。如果设置了函数指针,则调用该函数,否则调用常规代码。 在DKM中,通常有一些dkmInit()函数可以设置函数指针。

例如:

void regularExceptionHandler() {
   if (__myExceptionHandler != NULL) {
       __myExceptionHandler();
       return;
   }

当然,__ myExceptionHandler必须是基础vxWorks内核映像的一部分 这是vxWorks中经常使用的模式。