《嵌入式软件的时间分析》二:操作系统章节学习笔记
[复制链接]
本帖最后由 数码小叶 于 2024-7-11 20:50 编辑
在这一章节里首先介绍了目前嵌入式的常用开发模式:无RTOS 情况下的无限循环+中断、轮询+无中断,第一种是大多数情况下使用的,可以满足很多场合。第二种的优点是避免了数据一致性问题,但是实时性没有第一种高。在这种模式下,引入了新的概念--抖动。实际发生时间和计划发生时间的偏差,因此就有一个新问题,抖动与保证数据一致性之间的权衡。
在众多RTOS中,第三章选取了OSEK(Open Systemes and their interface for Electronics in the Kraftfahrzeug)/VDX((Vehicle Distributed Executive)两种来介绍:概念、基本调度策略等。OSEK/VDX的任务模型分为基本符合类和扩展符合类,一个定义了三种任务状态(就绪、运行、结束),一个定义了四种任务状态(等待、就绪、运行、结束)
对于操作系统,比较重要的就是任务调度,OSEK/VDX通过可抢占式、不可抢占式(协作式)。两者也是各有优缺点,协作式避免了很多实时问题,省却了很多确保数据一致性的工作,所需堆栈空间一般远小于抢占式。抢占式延迟更低,抖动远小于协作式,不需要分割任务函数来限制任务运行时间。感觉这里都很好理解,唯一稍微抽象的就是堆栈空间需求
如上图所示,相比于协作式,抢占式的任务调度,对于堆栈的需求分析,不仅要高很多,计算起来也更复杂,申请、释放、中断、有很多的不确定性。因为被谁中断和何时中断,具有不确定性。确保数据一致性,目前一直是前3章反复提及的,也是逐渐深入的,前面介绍了禁用中断的方法,现在为了更高效,介绍了一种方式,创建数据副本,这些副本在任务开始 / 结束时进行同步,缺点就是要占用更多的RAM,并且同步也需要额外的时间,但大大减少了开发人员在解决数据一致性问题上花费的时间。
综合对比下来,感觉到底该使用何种任务调度方式,还是要取决于产品和开发成本去衡量。
|