如何从IRQ触发Runnable

时间:2018-08-02 14:10:58

标签: autosar

开始以下用例: 如果发生特定的中断,则要从此IRQ内触发Runnable,然后退出该中断,以使其尽可能短。此外,在IRQ发生后,可能还必须在特定的延迟后触发此Runnable。 在这两种情况下,您都可以定义一个通过事件触发Runnable的警报。 问题是配置工具不支持这种情况。进行配置的唯一方法是创建虚拟RPort,以触发Runnable数据接收并在IRQ中误用生成的Alarm + Event。 还是有更好的方法从IRQ触发Runnable?

1 个答案:

答案 0 :(得分:2)

好吧,AUTOSAR的原理也是硬件的抽象。

SWC在RTE之上运行。因此,它们的访问受到限制。 MCAL用于抽象通用硬件。 MCAL上方的HwAbstraction用于将其进一步抽象到各个层。

驱动程序可以向高层提供通知。 然后可以将这些通知映射到事件(例如Internal / ExternalTriggerOccuredEvent,DataReceivedEvent,DataReceiveErrorEvent等)。

所以,问题是,中断的目的是什么,为什么在RTE之上应该有一个可运行对象对它们做出反应?

例如ISR用于接收消息的RxIndications,或用于成功传输消息的TxConfirmation。中断在Can驱动程序(Can_Irq)中处理。 Can驱动程序具有CanRxProcessing和CanTxProcessing的可配置选项。如果为INTTERRUPT,则直接在ISR中调用对更高层的回调。如果进行轮询,则Can驱动程序将从任务级别上的Can_Mainfunction_Read()或Can_Mainfunction_Write()进行轮询。 较高的层(例如Com)也有选项,例如ComIpduProcessing推迟或立即执行。这意味着,所有已配置的标注将立即调用(在较低层处理配置INTERRUPT或POLLING的上下文中),或在Com__Mainfunction_Rx()或Com_Mainfunction_Tx()中的任务级别上延迟。

由于dataReceivedEvent,dataWrite / SendCompletedEvent,这些回调由RTE配置为转到特定的端口/可运行。

您还可以创建CDD来实现特定的硬件抽象  /驱动程序的实现。