There are two ways of using FreeRTOS in the Xilinx SDK environment:
Using a stand-alone BSP
A stand-along board support package (BSP) is a library generated by the SDK
that is specific to the hardware design (the FPGA configuration). It
contains software drivers for the MicroBlaze soft processor itself and all the
peripherals included in the design, but it is not FreeRTOS aware.
FreeRTOS can be used with a stand-alone BSP by building the FreeRTOS source
files as part of the application that references the BSP library. This
method is used by the
main FreeRTOS MicroBlaze demo application.
Using a FreeRTOS BSP
A FreeRTOS BSP extends the stand-alone BSP described above to also include
the FreeRTOS source files. FreeRTOS can be used with a FreeRTOS BSP
without having to include the FreeRTOS source files as part of the application
that references the BSP library. This page describes how a FreeRTOS BSP
is generated and used, and how the SDK can automatically generate a complete
(but simple) FreeRTOS example application that makes use of a FreeRTOS BSP library.
The files required to integrate FreeRTOS into the SDK environment (for versions
of the SDK that are not shipped with FreeRTOS pre-integrated) are located in the
FreeRTOS/Demo/MicroBlaze_Spartan-6_EthernetLite/KernelAwareBSPRepository
directory. To make the SDK environment FreeRTOS aware, the KernelAwareBSPRepository directory
must be registered as a repository directory. Before doing this, however,
the latest FreeRTOS source files must be copied into the KernelAwareBSPRepository
directory. To do this, execute the CreateProjectDirectoryStructure.bat batch file that
is located in the FreeRTOS/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource
directory. [NOTE: There is no need to run this batch file while the demo project is provided in
a separate zip file - it will be required when the demo project is included in the main FreeRTOS.org download.]
CreateProjectDirectoryStructure.bat must be executed before
performing any of the steps described below.
To register KernelAwareBSPRepository as a repository directory:
Ensure CreateProjectDirectoryStructure.bat has been executed successfully.
From within the SDK, click Xilinx Tools > Repositories to open the Software Repositories tab in the Preferences dialog box.
To add a local or global repository, click New. Browse to and select the
FreeRTOS/Demo/MicroBlaze_Spartan-6_EthernetLite/KernelAwareBSPRepository directory.
Adding the FreeRTOS BSP repository directory to the list of
referenced repositories within the SDK
With the repository installed as described above, the SDK menus can be used to
create a complete, but very simple, FreeRTOS application. To do this:
From within the SDK, click File > New > Xilinx C Project to open the New Project dialog.
If a hardware project has not already been defined, you will be prompted to
select one before the New Project dialog opens.
Select "FreeRTOS Hello World" as the Project Template, before clicking Next
Selecting FreeRTOS Hello World as the project template in the new project dialog
The next dialog that opens allows the project to be named.
Once the application has been created, the FreeRTOS configuration can be
modified using the Board Support Package Settings dialog. To access
the Board Support Package Settings dialogue, still within the SDK, click
Xilinx Tools > Board Support Package Settings in the SDK.
The dialog that opens is the same as depicted in the
Creating a FreeRTOS BSP from within the SDK section
below.
The simple application created by the SDK does not place any
reliance on the hardware on which it is executed (other than the MicroBlaze
soft core itself). As a result, there is no visible indication of its status
when it is running. Its execution and behavior can, however, be inspected using
a debugger.
A description of the applications behavior is contained at the top of the single
source file, named FreeRTOS-main.c - which is replicated here for convenience:
/*
* FreeRTOS-main.c (this file) defines a very simple demo that creates two tasks,
* one queue, and one timer.
*
* The main() Function:
* main() creates one software timer, one queue, and two tasks. It then starts
* the RTOS scheduler.
*
* The Queue Send Task:
* The queue send task is implemented by the prvQueueSendTask() function in
* this file. prvQueueSendTask() sits in a loop that causes it to repeatedly
* block for 200 milliseconds, before sending the value 100 to the queue that
* was created within main(). Once the value is sent, the task loops back
* around to block for another 200 milliseconds.
*
* The Queue Receive Task:
* The queue receive task is implemented by the prvQueueReceiveTask() function
* in this file. prvQueueReceiveTask() sits in a loop that causes it to
* repeatedly attempt to read data from the queue that was created within
* main(). When data is received, the task checks the value of the data, and
* if the value equals the expected 100, increments the ulRecieved variable.
* The 'block time' parameter passed to the queue receive function specifies
* that the task should be held in the Blocked state indefinitely to wait for
* data to be available on the queue. The queue receive task will only leave
* the Blocked state when the queue send task writes to the queue. As the queue
* send task writes to the queue every 200 milliseconds, the queue receive task
* leaves the Blocked state every 200 milliseconds, and therefore toggles the LED
* every 200 milliseconds.
*
* The Software Timer:
* The software timer is configured to be an "auto reset" timer. Its callback
* function simply increments the ulCallback variable each time it executes.
*/
The simple application described above uses a FreeRTOS BSP library. The FreeRTOS BSP
library can also be created by itself, without the simple application. To do this:
Ensure KernelAwareBSPRepository is installed as a repository directory,
as described previously.
From within the SDK, click File > New > Xilinx Board Support Package to open the New Board Support Package Project dialog.
If a hardware project has not already been defined, you will be prompted to
select one before the New Board Support Package Project dialog opens.
Select "freertos" as the Board Support Package OS, before clicking Finish.
Selecting freertos as the board support package OS
The Board Support Package Settings dialog will open, in which the FreeRTOS parameters can be adjusted as required.
Configuring FreeRTOS using the board support package settings dialog.
Once the FreeRTOS BSP has been created, it can be referenced by other SDK projects,
to quickly and simply add FreeRTOS controlled multitasking to any application.