当前位置:首页 » 《随便一记》 » 正文

Autosar模块介绍:AutosarOS(6)

15 人参与  2022年11月15日 12:20  分类 : 《随便一记》  评论

点击全文阅读


上一篇 | 返回主目录 | 下一篇

AutosarOS:错误处理、跟踪与调试(6)

1 钩子例程2 错误处理(ErrorHook)3 系统启动(StartupHook)4 系统关闭(ShutdownHook)5 系统保护(ProtectionHook)6 调试

1 钩子例程

钩子例程特点
1)、由操作系统调用,在特定的上下文中取决于操作系统的实现
2)、高于所有任务
3)、不被第二类中断程序打断。
4)、操作系统的一部分
5)、由用户使用用户定义的功能实现
6)、在接口上是标准化的,但在功能上不是标准化的(钩子例程本身的环境和行为),因此钩子例程通常是不可移植的
7)、只允许使用API函数的子集

钩子例程作用
1)、系统启动:在操作系统启动之后和调度程序运行之前调用相应的钩子例程(StartupHook)
2)、系统关闭:当应用程序或操作系统在出现严重错误时请求系统关闭时调用 (ShutdownHook)
3)、跟踪或依赖于应用程序的调试目的,以及用户定义的上下文切换扩展(PreTaskHook、Post Task Hook)
4)、错误处理(ErrorHook)

#OSEK的每个实现都必须遵循钩子例程的约定:
1)、如果应用程序在钩子例程中调用了一个不允许的API服务,则行为没有定义
2)、如果引发错误,则实现应该返回特定于实现的错误代码

2 错误处理(ErrorHook)

提供错误服务来处理OSEK操作系统中临时和永久发生的错误。它的基本框架是预先定义的,由用户自行完成。这使用户可以选择有效的集中或分散的错误处理。区分了两种不同的错误:
应用程序错误:操作系统无法正确执行请求的服务,但假定其内部数据是正确的。在这种情况下,将调用集中错误处理。此外,操作系统通过状态信息返回错误码对其进行分散的错误处理。由用户根据发生的错误类型来决定处理方式。
致命错误:操作系统不能再保证其内部数据的正确性。在这种情况下,操作系统调用集中式系统关闭。

#所有这些错误服务都有一个指定错误标识符(宏编号)

OSEK操作系统提供两个级别的错误检查,标准状态和扩展状态。如果一个任务在标准状态的版本中被激活,会返回“E_OK”或“Too many task activation”。在扩展状态的版本中,可以返回额外的返回值“Task is invalid”、“Task still occupy resources”等。这些扩展的返回值在执行时不再出现在目标应用程序中,也就是说,相应的错误不会在操作系统的运行时版本中被拦截。

OSEK api服务的返回值优先于输出参数。如果一个API服务返回错误,输出参数的值是未定义的。

错误钩子例程
如果系统服务返回的StatusType值不等于E_OK,则会调用错误钩子例程(ErrorHook)。如果从ErrorHook本身调用系统服务,则钩子例程ErrorHook不会被调用(也就是说,error钩子的递归调用不会发生)。从ErrorHook调用系统服务时可能发生的任何错误都只能通过计算返回值来检测。
如果在任务激活或事件设置期间检测到错误,例如在警报过期或消息到达时,也会调用ErrorHook。

错误管理
为了在ErrorHook中实现有效的错误管理,用户可以访问其他信息(如下图:处理的逻辑结构)。
在这里插入图片描述

3 系统启动(StartupHook)

系统启动过程(单核系统,参考图1)
1)、重置后,用户可以自由地执行(不可移植的)硬件特定代码。第2类中断在第5阶段之前不允许运行。不可移植部分以检测应用模式结束。
2)、使用应用程序模式作为参数调用StartOS。
3)、操作系统执行内部启动功能
4)、调用钩子例程StartupHook,用户可以在其中放置初始化过程。在这个钩子例程中,所有用户中断都被禁用。
5)、操作系统允许用户中断并启动调度活动。
在这里插入图片描述
在这里插入图片描述

4 系统关闭(ShutdownHook)

应用程序或操作系统可以由于致命错误而请求此服务(ShutdownOS)。当调用ShutdownOS时,操作系统将调用钩子例程ShutdownHook,然后关闭(如下图: 多核系统关闭过程)。用户通常可以在ShutdownHook中自由定义任何系统行为。
在这里插入图片描述

5 系统保护(ProtectionHook)

发生严重的执行时间错误以及违背存储保护时会进入此钩子例程。

可采用的处理方式:
1)、关闭造成问题的任务/二类中断
2)、强制关闭任务/二类中断属于的应用集(或者重启(Restart))
3)、关闭系统
4)、不做处理
在这里插入图片描述

6 调试

两个钩子例程(PreTaskHook和PostTaskHook)在任务上下文切换时被调用。这两个钩子例程可用于调试或时间测量(包括上下文切换时间)。每次在任务离开RUNNING状态之前,都会直接调用PostTaskHook;PreTaskHook每次在新任务进入RUNNING状态后直接调用。
在这里插入图片描述
上一篇 | 返回主目录 | 下一篇


点击全文阅读


本文链接:http://zhangshiyu.com/post/48494.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1