Multicore Startup Variants

In all cases of a multicore PXROS-HR startup process:

  • The _MASTER_CORE_ shall execute PxInit() function first while other cores are in their inactive state, either HALT or IDLE.

  • The _MASTER_CORE_ activates other cores during PxInit() function within the _PxInit_Start_Cores() routine, provided either by PXROS-HR kernel library or by Init utility library.

Core MPU compatibility enabled

This mode is a default reset state on AURIX architecture, meaning that each core can enable/disable its core MPU protection without a need to access Safety Watchdog module.

In this case, the only task for the _MASTER_CORE_ is to activate other cores and let them enable the core MPU system as part of their duties.

pxros cpu0 compat on
Fig. 1. MPU-COMPAT=ON (MPU not Safety Watchdog EndInit protected)

_MASTER_CORE_ activities:

  • Start inactive cores

  • Program its core MPU regions according to their PXROS-HR init structure

  • Enable its core MPU system

  • Continue PxInit() till InitTask

OTHER Core activities:

  • Program their core MPU regions according to their PXROS-HR init structure

  • Enable their core MPU system

  • Continue PxInit() till InitTask

Core MPU compatibility disabled

Having disabled MPU compatibility, only one core shall enable the MPU system under Safety Watchdog EndInit Protection for all cores in the microcontroller to keep the module handling multicore safe.

In the PXROS-HR operating system, it is the kernel instance running on the _MASTER_CORE_ that configures and enables the MPU system for inactive cores before activating them.

pxros cpu0 compat off
Fig. 2. MPU-COMPAT=OFF (MPU is Safety Watchdog EndInit protected)

_MASTER_CORE_ activities:

  • Configure MPU regions according to their PXROS-HR init structure on each core

  • Enable MPU system on each core

  • Start inactive cores

  • Continue PxInit() till InitTask

OTHER Core activities:

  • Program MPU regions according to PXROS-HR init structure

  • Continue PxInit() till InitTask

Starting from other than Reset core

The case when _MASTER_CORE_ != 0, the application code running on the reset core (CORE 0) must activate the desired _MASTER_CORE_ first and switch the current core to IDLE. The reset core remains in IDLE mode until PxInit() running on _MASTER_CORE_ activates it again.

The Init utility library provides a supportive function PxuStartMasterCore() to activate _MASTER_CORE_ from the reset core. Part of the function is to switch the current core to IDLE mode.

PxInit() function handles other cores MPU protection in the same style as described above having two variants depending on MPU compatibility mode set.

pxros cpu1 compat on
Fig. 3. _MASTER_CORE_=1, MPU-COMPAT=ON (MPU not Safety Watchdog EndInit protected)
pxros cpu1 compat off
Fig. 4. _MASTER_CORE_=1, MPU-COMPAT=OFF (MPU is Safety Watchdog EndInit protected)