IOC (Inter-OS-Application Communicator) is the AUTOSAR OS-defined mechanism for exchanging data between RTE ports whose sender runnable and receiver runnable are mapped to different OsCores. The RTE generator replaces normal Rte_IWrite/Rte_IRead buffer access with generated Ioc_Send() / Ioc_Receive() wrappers when it detects a cross-core port connection.
Core 0 — Task_SafetyCtrl_10ms Core 1 — Task_ComStack_1ms
┌──────────────────────────────┐ ┌──────────────────────────────┐
│ SpeedSafetySWC │ │ CanRxSWC │
│ Rte_IRead_SpeedIn_Value() │ │ Rte_IWrite_SpeedOut_Value() │
└───────────┬──────────────────┘ └──────────────┬───────────────┘
│ generated: Ioc_Receive(IOC_CH_SPEED, &val) │ generated: Ioc_Send(IOC_CH_SPEED, val)
│ │
└──────────────── IOC Channel ───────────────┘
OsSpinlock-protected shared memory ring buffer
(located in shared RAM: .ioc_data section)💡 Transparent to SWC
SWC code remains unchanged — the same Rte_IWrite and Rte_IRead calls are used regardless of whether the connected port is on the same core or a different core. The RTE generator determines IOC vs. local buffer based on OsTaskCoreRef assignments in the ARXML. This means moving a SWC between cores requires only an ARXML config change and RTE regeneration, not any SWC code changes.