The port is supported and tested on the following toolchains:
This port supports the FreeRTOS MPU on both single-core and SMP (multi-core) configurations. Enable via configENABLE_MPU = 1; the port programs MPU regions per task on each active core.
Minimum MPU granularity and alignment: 64 bytes. Ensure any user‑defined region base and size are 64‑byte aligned.
For SMP systems using this port, the application only needs to start the scheduler on the primary core and issue an SVC from each secondary core once they are online. The kernel coordinates the rest and ensures all cores are properly managed.
vTaskStartScheduler() on the primary core; each secondary core, in its reset handler, performs its local init and then issues an SVC (immediate value 106) to hand off to the kernel. The port will bring all cores under the scheduler.Primary core flow:
.bss).main(), create user tasks, optionally pin tasks to specific cores.vTaskStartScheduler() which invokes xPortStartScheduler().xPortStartScheduler() configures the primary core tick timer and signals secondary cores that shared init is complete using the ucPrimaryCoreInitDoneFlag variable.vPortRestoreContext() to schedule the first task on the primary core.Secondary core flow (to be done in each core’s reset handler):
ucPrimaryCoreInitDoneFlag set to 1).VBAR_EL1 from the boot vector table to the FreeRTOS vector table.ucSecondaryCoresReadyFlags array.106 (i.e., portSVC_START_FIRST_TASK) to enter FreeRTOS_SWI_Handler, which will call vPortRestoreContext() based on the SVC number to start scheduling on this core.