SMP Demo for the XMOS XCORE.AI Explorer Board
Note: SMP support in the FreeRTOS kernel is available but still being tested.
This demo uses the
Symmetric Multiprocessing (SMP) version of the FreeRTOS kernel.
It targets the XCORE.AI,
which has 16 cores. The demo project uses
XMOS XTC Tools to build the FreeRTOS XCORE.AI port (note the tools require a Linux host or a Linux like environment).
It demonstrates support for
FreeRTOS symmetric multiprocessing (SMP) in the kernel.
Source Code Organization
The project files for this demo are located in the
directory of the
FreeRTOS SMP Demo Git repository.
FreeRTOS Port files compiled in the project are in the
The SMP Demo Application
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY, which is defined at the top
testing_main.h, is used to switch between a simple "blinky" style getting
started project and a more comprehensive test and demo application.
When mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1, the demo application
creates two tasks, each of which periodically toggles an on-board LED (LED 0 is toggled by
one task and and LED 1 by the other).
When mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 0
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 0, the demo application
implements a comprehensive test and demo that, among other things, demonstrates
The created tasks are from the set of standard demo
tasks. Standard demo tasks are used by all FreeRTOS port demo applications. They
have no specific functionality, and were created simply to demonstrate how to use
the FreeRTOS API, and to test the RTOS port.
Two "check" tasks are created to periodically inspect the standard demo tasks
(which contain self monitoring code) to ensure all the tasks are functioning as
expected. One check task monitors the demo tasks running on tile 0 and toggles
LED 0 each time it executes. The other check task monitors the demo tasks
running on tile 1 and toggles LED 1 each time it executes. This gives visual
feedback of the system health. If both the LEDs toggle every 3 seconds, then the
check tasks have not discovered any problems. If any LED toggles every 200ms,
then the check task has discovered a problem in one or more tasks.
Building and Running the RTOS Demo Application
Plug the xTAG programmer into the evaluation board. Ensure both the xTAG and
evaluation board are connected to the computer via USB.
The development tools require a Linux host or a Linux style environment.
XMOS XTC Tools.
Uncompress the archive to your chosen installation directory. The example
below will install to your home directory:
$ tar -xf archive.tgz -C ~
Configure the default set of environment variables:
$ cd ~/XMOS/XTC/15.1.0
$ source SetEnv
Check that your tools environment has been setup correctly:
$ xcc --help
Make the XTAG drivers accessible to all users. This step is only required
to be done once on a given development machine.
$ cd ~/XMOS/XTC/15.1.0/scripts
$ sudo ./setup_xmos_devices.sh
Check that the XTAG devices are available and accessible:
$ cd ~/XMOS/XTC/15.1.0/scripts
Searching for xtag3 devices...
Searching for xtag4 devices...
Success: User <username> is able to access all xtag4 devices
Check that the device is available for debugging:
$ xrun -l
Available XMOS Devices
ID Name Adapter ID Devices
-- ---- ---------- -------
0 XMOS XTAG-4 2W3T8RAG P
Build and Run the demo application
Go to the RTOSDemo directory:
$ cd FreeRTOS/Demo/XCORE.AI_xClang/RTOSDemo
Build the demo:
Run the demo:
$ make run
RTOS Configuration and Usage Details
- Configuration items specific to this demo are in the file
constants defined in that file can be
edited to suit your application. The following configuration options are
specific to the SMP support in the FreeRTOS Kernel:
configNUM_CORES - Set the number of cores.
configRUN_MULTIPLE_PRIORITIES - Enable/Disable simultaneously running tasks with multiple priorities.
configUSE_CORE_AFFINITY - Enable/Disable setting a task's affinity to certain cores.
Source/Portable/MemMang/heap_4.c is included in the project to provide the
memory allocation required by the RTOS kernel. Please refer to the
Memory Management section of the API
documentation for complete information.
- vPortEndScheduler() has not been implemented.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.