Each physical core is represented by one OsCore container. The master core (Core 0) is always started by the BSP startup code; secondary cores are either auto-started or explicitly launched with Os_StartCore().
| OsCore Parameter | Value / Type | Purpose |
|---|---|---|
| OsCoreId | 0, 1, 2 … | Unique numeric ID referenced by tasks and ISRs |
| OsCoreIsStartedByStartupCode | TRUE / FALSE | TRUE = hardware/BSP starts core automatically; FALSE = master must call Os_StartCore(coreId, &status) |
| OsCoreUseMasterStartupCode | TRUE on Core 0 only | Designates the bootstrap core that calls Os_Init() and starts the OS |
| OsCoreAutostart | TRUE / FALSE | Auto-activates tasks and alarms on that core when Os_StartCore() returns |
/* Secondary core launch from EcuM_AL_DriverInitOne on Core 0 */
StatusType coreStatus;
Os_StartCore(OS_CORE_ID_1, &coreStatus);
if (coreStatus != E_OK) {
/* Core 1 failed to start — log DEM event and continue on Core 0 only */
Dem_ReportErrorStatus(DEM_EVENT_CORE1_START_FAIL, DEM_EVENT_STATUS_FAILED);
}
/* BootBarrier: Core 0 waits until Core 1 signals MCAL init complete */
Os_WaitBarrier(BOOT_BARRIER_MCAL_DONE);