设想以下用例:如果发生特定中断,您希望在此 IRQ 内触发 Runnable,然后退出中断以使其尽可能短。此外,这个 Runnable 可能还必须在 IRQ 发生后以特定延迟触发。在这两种情况下,您都可以定义一个通过事件触发 Runnable 的警报。问题是配置工具不支持这样的事情。以某种方式对其进行配置的唯一方法是创建虚拟 RPort,以触发 Runnable on-data-receive 并在 IRQ 中误用生成的 Alarm+Event。还是有更好的方法来从 IRQ 触发 Runnables?
1 回答
嗯,AUTOSAR的原理也是对HW的抽象。
SWC 在 RTE 之上运行。因此,他们的访问受到限制。MCAL 用于抽象通用硬件。MCAL 之上的 HwAbstraction 用于将它们进一步抽象到层。
驱动程序可以向更高层提供通知。然后可以将这些通知映射到事件(例如 Internal/ExternalTriggerOccuredEvent、DataReceivedEvent、DataReceiveErrorEvent、...)。
所以,问题是,中断的目的是什么,以及为什么你应该在 RTE 之上有一个可运行的对象对它们做出反应。
例如,用于传入消息的 RxIndications 的 ISR,或用于成功传输消息的 TxConfirmation。中断在 Can 驱动程序 (Can_Irq) 中处理。Can 驱动程序具有 CanRxProcessing 和 CanTxProcessing 的可配置选项。如果是 INTTERRUPT,则直接在 ISR 中调用对更高层的回调。如果 POLLING,Can 驱动程序正在从任务级别的 Can_Mainfunction_Read() 或 Can_Mainfunction_Write() 轮询这个。较高层(例如 Com)也有选项,例如 ComIpduProcessing DEFERRED 或 IMMEDIATE。这意味着,立即调用所有配置的标注(在较低层处理配置 INTERRUPT 或 POLLING 的上下文中)或在 Com__Mainfunction_Rx() 或 Com_Mainfunction_Tx() 内的任务级别上延迟。
由于 dataReceivedEvent、dataWrite/SendCompletedEvent,这些回调由 RTE 配置为转到特定端口/可运行。
您还可以创建 CDD 来实现特定的硬件抽象/驱动程序实现。