Kernel Configuration¶
The FreeRTOS kernel is configured by FreeRTOSConfig.h file which can be found
in {SDK_INSTALL_DIR}\kernel\freertos\builds\{DEVICE}\release\pregenerated_configuration
,
you can change the configuration file so that the kernel will be tailored to your application.
For more information about kernel configuration, please see FreeRTOS Kernel Configuration Overview.
In the SimpleLink CC13xx/CC26xx SDK, all FreeRTOS application routines are abstracted using the following:
A POSIX layer, which was designed for use with this SimpleLink CC13xx/CC26xx SDK
A Driver Porting Layer (DPL) for use by the TI Drivers
You can find example FreeRTOS projects that use the SimpleLink CC13xx/CC26xx SDK in the examples/rtos/
folder for all supported IDEs.
No native FreeRTOS examples are provided in this SimpleLink CC13xx/CC26xx SDK. If you want to use the native FreeRTOS routines without the abstractions provided by the SimpleLink CC13xx/CC26xx SDK, documentation is provided on the FreeRTOS website.
Note
At this moment, the only example with FreeRTOS support is multi_role
inside the SimpleLink_Lowpower_F2 SDK.
POSIX Support¶
Portable Operating System Interface (POSIX) is an IEEE industry API standard for OS compatibility. The SimpleLink CC13xx/CC26xx SDK provides support for POSIX APIs on top of FreeRTOS (as it does for TI-RTOS7). For a more detailed description of the POSIX support in the SimpleLink CC13xx/CC26xx SDK, please refer to the POSIX Overview Workshop
Driver Porting Layer (DPL)¶
The TI Drivers (e.g. UART2, I2C, Power Management, etc.) are written to be used with the Driver Porting Layer (DPL). The SimpleLink CC13xx/CC26xx SDK includes a DPL implementation for both FreeRTOS, TI-RTOS7 and no RTOS.
Using FreeRTOS with CCS¶
In order to use FreeRTOS within CCS, you must specify the location of the FreeRTOS installation. To do this, follow these steps:
In CCS, choose Window → Preferences from the menus.
Select the General → Workspace → Linked Resource category.
Click New and add a link with the following settings.
Name:
FREERTOS_INSTALL_DIR
Value: The location of your FreeRTOS installation
These steps only need to be performed once per CCS workspace that you create.
Using FreeRTOS with IAR¶
The Quick Start guide has step-by-step instructions for building SDK Projects with IAR. Once these steps are followed, the user still needs to give IAR the location of the FREERTOS_INSTALL_DIR in the Custom Argvars:
Open Tools -> Configure Custom Argument Variables
Open the Global SDK paths.
Configure the FREERTOS_INSTALL_DIR variable to match your install directory.
FreeRTOS examples¶
As mentioned before, only the multi_role
example supports FreeRTOS and
it needs to be used with the gcc compiler, therefore please import the
project located in multi_role/freertos/gcc
.
Two projects will get imported:
FreeRTOS vs. TI-RTOS7 modules¶
The application and the ICall layer communicate using events to call the OS and made context switch. The table below shows the modules that are used by TI-RTOS7 in a typical example flow, at the same time explains which modules are used by FreeRTOS.
Example flow |
TI-RTOS7 modules |
FreeRTOS modules |
1. Application Thread Listen (pend) on event number |
TI-RTOS7 Semaphore/Event |
SemaphoreP (used through DPL layer) and mq_send / mq_receive Blocking Mqueue (POSIX queues) |
2. Stack Thread Doing whatever he asked to do by the app called |
TI-RTOS7 Timers |
TimersP (used through DPL layer) |
3. Stack Thread Push a message (or number of messages) into the queue and post an event Queue |
TI-RTOS7 utility Queue |
mq_send / mq_receive NON-Blocking Mqueue (POSIX queues) |
4. Application Thread OS wakes the application thread and the application pulls the message from the Non-OS queue |
TI-RTOS7 utility Queue |
mq_send / mq_receive NON-Blocking Mqueue (POSIX queues) |
5. Application Thread Listen (pend) on event number - cycle has completed |
TI-RTOS7 event |
mq_send / mq_receive Blocking Mqueue (POSIX queues) |
icall_POSIX¶
The file ICall_POSIX is based on POSIX, DPL and FreeRTOS bare APIs
calls. This implementation should allow us to support different Operating Systems if
required. In order to do this, all the #ifdef FreeRTOS
on the current ICall_POSIX
could be changed to support a different OS.
Here are some of the places where these defines are used (icall_POSIX.c
):
#ifdef FREERTOS #include <FreeRTOS.h> #include <task.h> #endifTask_Handle ICall_taskSelf(void) { Task_Handle task = NULL; #ifdef FREERTOS task = (Task_Handle) xTaskGetCurrentTaskHandle(); #else task = <handler need to be returned according to the chosen OS>; #endif // FREERTOS return (task); }#ifndef FREERTOS #if defined(HEAPMGR_CONFIG) && ((HEAPMGR_CONFIG == 0) || (HEAPMGR_CONFIG == 0x80)) #include <rtos_heaposal.h> #elif defined(HEAPMGR_CONFIG) && ( (HEAPMGR_CONFIG == 1) || (HEAPMGR_CONFIG == 0x81)) #include <rtos_heapmem.h> #elif defined(HEAPMGR_CONFIG) && ( (HEAPMGR_CONFIG == 2) || (HEAPMGR_CONFIG == 0x82)) #include <rtos_heaptrack.h> #else static ICall_CSState ICall_heapCSState; #include <rtos_heaposal.h> #endif #endif // !FREERTOS