我刚刚开始研究VxWorks。我目前正致力于以下方面: -
我需要创建一个包含异常处理和框架的框架。内存管理(例如,检测空指针使用)。总而言之,它将像操作系统上的抽象层。该框架将采用可下载的内核模块的形式。单元测试(也是DKM)将从该框架中获取。
我想操纵异常处理程序&自己处理,但我不知道怎么做。
ED& R组件需要配置内核映像才能使用某些API(如果我理解正确的话),但如果它是已经在内核空间中的DKM,则它不具有完全访问权限内存(RAM,持久性内存)&因此可以直接获得访问权限吗?
您能否就如何实现目标向我提供一些指导?
目前,当发生异常时,在显示一些细节后,任务将停止。我得到一个调试模块的提示。之后,为了查看核心转储,我使用命令edrShow。
我想要做的是,摆脱调试提示&任务停止后,将核心转储显示给用户,而不必显式发出命令。
我确实研究过edrStub.c(edrKernelFatalPolicyHandler方法),但我无法弄清楚如何操作它以获得所需的结果。
答案 0 :(得分:1)
我认为你所谈论的是想要对异常机制实施某种扩展 ED& R已经很好地处理了你提到的条件。通常会暂停违规任务,以便您可以将调试器连接到它。
如果您不喜欢异常的默认处理,那么您可以修改位于comp / src / vxworks / edrStub.c中的代码(我认为这就是它的位置)。然后,您可以实现自己的函数来处理致命异常。
如果你想处理特定的异常,你可以使用excLib插入自己的异常处理程序,但你真的想知道你在做什么......
至于将内容放入DKM中,最简单的方法是为某些特定功能预定义函数指针。如果设置了函数指针,则调用该函数,否则调用常规代码。 在DKM中,通常有一些dkmInit()函数可以设置函数指针。
例如:
void regularExceptionHandler() {
if (__myExceptionHandler != NULL) {
__myExceptionHandler();
return;
}
当然,__ myExceptionHandler必须是基础vxWorks内核映像的一部分 这是vxWorks中经常使用的模式。