OS的启动是通过StartOS函数来实现。
在标准的AUTOSAR项目中,StartOS函数由EcuM_Init调用。StartOS()会对OS内部各组件进行初始化,激活自启动任务、报警或调度表。StartOS()的最后,会启动系统定时器,并触发第一次任务调度。
如果用户使能了相关Hook,StartOS会在所有初始化完成之后,启动系统定时器、触发第一次任务调度之前,调用用户的Hook,调用顺序为:(1)调用OsSartupHook,(2)调用各个OS-Appication的OsAppSartupHook
OS操作系统的关闭是通过调用“ShutdownOS()”函数实现。该函数会禁能所有中断,停止系统定时器运行,最终进入死循环。如果用户使能了相关Hook,ShutdownOS会在进入结尾处,进入死循环之前,调用用户的Hook。
中断向量表:存放在内存中的一个数组,内容是中断服务函数的地址们(数组下标与中断优先级对应,也称为中断向量)。当中断来临,根据 中断向量查询中断向量表,根据地址找到对应的服务函数。
CAT1 interrupts:
· 是优先级最高的中断
·不与OS进行交互,不需OS支持
·大部分OS API不允许被call
·需要用户正确的配置硬件、编写处理程序并从中断中返回,用不好的话出错概率高,一般应用较少
CAT2 interrupts:
·中断发生时,RTA-OS执行内部代码,然后调用用户提供的ISR
·中断执行从ISR的指定入口点开始,一直持续到入口函数返回
·完全支持OS特征
OS的调度机制—调度表ScheduleTable
调度表由一系列按时间先后顺序排序的终结点组成,其中每个终结点都有自己的任务,由的终结点可能是激活一系列的任务,有的是设置一系列的事件,还有的可能是既激活一系列任务又设置一系列事件。
调度表(ScheduleTables)提供一组静态定义的**到期点(expiry points)**的封装来解决同步问题。每个到期点定义
1)处理时必须发生的一个或多个动作,其中动作是任务Task的激活或事件event的设置
2)从调度表开始点一个以滴答为单位的偏移量
3)终结点在调度表上是按偏移从小到大有序排列,因此要保证每个终结点的偏移都是独一无二的,不能有偏移相同的终结点。
每个调度表都有一个持续时间(Duration),即调度表的一次运行时间,度量单位为计数器的计数单位Tick
驱动计数器
驱动计数器默数
调度表时间
驱动计数器与调度表持续时间关系