• 1067查看
  • 0回复

[Autosar] 详解Autosar OS的中断管理和实现

[复制链接]


该用户从未签到

发表于 8-5-2024 19:49:54 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


中断介绍
中断一般是由硬件(如外设和外部输入引脚)产生的事件,它会引起程序流偏离正常的流程(如给外设提供服务)。当外设或者硬件需要处理的服务时,一般会出现下面的流程:1 外设确认到处理器的中断请求;2 处理器暂停当前执行的任务;3 处理器执行外设的中断服务程序(ISR),如有必要可以选择软件清除中断请求;4 处理器继续执行之前暂停的任务。
FreeRTOS中断管理
有过FreeRTOS使用经验的同学应该知道,在FreeRTOSConfig.h里配置configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY这个参数,此宏用来设置 FreeRTOS 系统可管理的最大优先级,假如设置为了 5,也就是高 于 5 的优先级不归 FreeRTOS 管理!
详解Autosar OS的中断管理和实现w1.jpg

Autosar OS中断管理
Autosar的中断管理有点类似于FreeRTOS。Autosar OS将中断分为两类:一类中断和二类中断。一类中断不受操作系统的管控(bypass),因此那些对实时性要求严格的任务就可以使用一类中断。因为OS的服务函数不能被一类中断使用,因而操作系统提供的保护功能(时间和内存保护)在一类中断服务函数运行期间是不起作用的。在Autosar OS的官方文档介绍了服务函数可以使用的地方,具体如下面所示。
详解Autosar OS的中断管理和实现w2.jpg

详解Autosar OS的中断管理和实现w3.jpg

一般单片机的处理器提供的中断控制器都是支持中断嵌套的,因此,一类中断配置的优先级必须高于二类中断。需要注意的是,对于多核处理器来说,每个核的中断优先级互不影响,即在不同核上可以存在相同优先级的中断,但任何一个一类中断的优先级必须大于所有核上的二类中断的最高优先级。
实现

跳转到ISR
在处理器接受异常请求后,处理器需要确定该异常处理(若为中断,则是ISR)的起始地址,该信息位于中断向量表中。因此对于二类中断来说,在中断向量表中设置同样的中断ISR(或者二类中断进入后立马调用二类中断统一的接口)地址,在统一的ISR中调用不同外设的中断处理函数。而一类中断直接将外设的中断处理函数的地址设置在中断向量表中。二类中断的伪代码实现为:
工具生成的中断向量表(多核单片机会单独生成多个中断向量表)为:

Typedef void (*os_vectorentry_func)(void);

os_vectorentry_func OsCfg_VectorTable[] = {

    DefaultInterruptHandler,

    DefaultInterruptHandler,

    Os_Isr_InterrutpN,

    DefaultInterruptHandler

};

在.asm中定义中断服务函数的实现

Os_CAT2_Interrutp_Entry MARCO IsrConfig

     /*一些寄存器的必要处理*/

     ldrr0= IsrConfig

    bl OsIsrRun ;二类中断通用处理的wrapper,C语言实现

    /*一些寄存器的必要处理*/

ENDM

Os_Isr_InterrutpN

     Os_CAT2_Interrutp_EntryOs_Cfg_ISr_LinIsr

ENDM

void Os_IsrRun(Os_IsrConfigType Isr)

{

     /*一些处理函数,如判断Core等*/

    Os_StartThread(Isr->Thread);/*调用外设中断处理函数*/

    /*一些处理函数*/

}

中断屏蔽
在《AUTOSAR OS之Resource和Spinlock》中介绍了Resource和Spinlock的实现原理,其实中断的分类也是基于同样寄存器实现的。Autosar的中断和任务优先级都是静态配置,不支持运行过程中创建任务等,这个和FreeRTOS不同,因此可以将配置的二类中断的最高优先级写入中断控制的相关寄存器(对于ARM M3/M4处理器来说就是BASEPRI),就可以实现屏蔽所有的二类中断。同理,我们可以将一类中断的最高优先级写入中断控制的相关寄存器(对于ARM M3/M4处理器来说就是BASEPRI),就可以实现屏蔽所有中断。一般而言,resource只会屏蔽二类中断,Spinlock则是可选,配置如下所示。
Spinlock的配置
Spinlock可以通过OsSpinlockLockMethod来决定获取锁后这个锁的模式。一般配置的选项为:
1 LOCK_ALL_INTERRUPTS:在获取锁后执行代码时,所有中断都被屏蔽;

2 LOCK_CAT2_INTERRUPTS:在获取锁后执行代码时,所有二类中断都被屏蔽;

3 LOCK_NOTHING:在获取锁后执行代码时,不锁任何东西.
在配置为LOCK_ALL_INTERRUPTS,假如代码执行时间过长,将会影响一类中断的实时性!
多核单片机中断分配
多核单片机一般对应多个OSApplication,在OsApplication下的OsAppIsrRef选项中选中在OSIsr配置的中断即可将该中断分配在这个OSApplication上。


该用户从未签到

发表于 11-3-2025 16:38:00 | 显示全部楼层
您提供的关于中断管理的描述非常专业且准确。关于Autosar OS的中断管理和实现,我可以进一步为您解释。中断在嵌入式系统中至关重要,它们通常由硬件事件触发,打断正在执行的程序流程。在Autosar OS中,中断管理是其核心功能之一,涉及到中断请求、任务暂停、执行中断服务程序等步骤。相较于FreeRTOS,Autosar OS的中断管理更为复杂和标准化。其中,中断优先级管理是其特色之一,确保高优先级中断能够打断低优先级任务。具体到配置,可能需要针对具体的硬件平台和需求进行相应的配置和调整。在Autosar OS中,还需遵循其特定的编程规范和架构来实现高效且稳定的中断管理。关于具体的实现细节和配置方法,建议查阅Autosar OS的官方文档或参考手册。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 11-3-2025 16:38:00 | 显示全部楼层
好的,关于Autosar OS的中断管理和实现,以及中断介绍,我可以为您详细解答。

中断是由硬件产生的一种特殊事件,用于打断正在执行的程序流程。在Autosar OS中,中断管理是一个核心功能,确保系统能够响应外部或内部硬件事件。当中断发生时,处理器会暂停当前任务,转而执行对应的中断服务程序(ISR)。ISR处理完毕后,系统会根据优先级和状态恢复执行之前的任务。

关于FreeRTOS的中断管理,configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY这个参数用于配置系统调用中断的最高优先级。合理设置该参数能确保中断服务程序获得足够的优先级,以处理紧急任务而不影响系统稳定性。此外,FreeRTOS还提供了相关的API和机制来管理中断,如中断嵌套、中断锁等。

以上是对Autosar OS和FreeRTOS中断管理的简单介绍,如有更多问题,欢迎继续咨询。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 13-7-2025 23:42 , Processed in 0.401111 second(s), 35 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.