Using Custom FreeRTOS With S32K SDK and OSIF for ARM
Want to learn more about how you can use the Custom FreeRTOS with the S32K SDK and OSIF for ARM? Click for the tutorial to learn more!
Join the DZone community and get the full member experience.Join For Free
In the “Tutorial: FreeRTOS 10.0.1 with NXP S32 Design Studio 2018.R1,” I demonstrated how to use a custom FreeRTOS with the S32 Design Studio (ARM). The OSIF (OS Interface) provides an operating system and services abstraction for the application, which is used by other S32K SDK components:
OSIF in S32K for ARM Eclipse Project
The challenge I had was to make the OSIF component aware that there is a custom FreeRTOS component in the project (it worked fine with the NXP supplied one). If the presence of FreeRTOS is detected, the OSIF will use the RTOS services. Otherwise, it will create its own services, e.g. using the SysTick timer interrupt.
Here is how you can use the McuOnEclipse FreeRTOS with the S32K SDK using the OSIF:
You will need at least version 01.558 of the McuOnEclipse FreeRTOS component, available from SourceForge.
The OSIF checks for the presence of a component named ‘FreeRTOS.’ In the component settings, rename the component:
FreeRTOS component name
The component will generate a FreeRTOSConfig.h (to configure the RTOS) and the file FreeRTOS_config.h (to configure the component settings, which are not covered by the standard FreeRTOS one).
Then, you will need to enable it to generate FreeRTOS files into subfolders with ‘Manual Clock Values' disabled:
FreeRTOS Source Folders
This generates the RTOS files into subfolders:
FreeRTOS files folder structure
The reason for this is that, otherwise, there might be conflicts with the NXP version of the FreeRTOS file handling. The ‘normal’ component files are still stored in the normal place:
FreeRTOS component files
Now, with the extra subfolders, I need to tell the compiler where it can find the header files. This is a setting in the project, so add the following include paths (you can copy-paste them):
../Generated_Code/FreeRTOS/Source/include ../Generated_Code/FreeRTOS/config/gcc ../Generated_Code/FreeRTOS/Source/portable/GCC/ARM_CM4F
FreeRTOS Include Paths
main.c, make sure you include the necessary FreeRTOS files first:
#include "FreeRTOS.h" #include "task.h"
Finally, you will need to add the following to define to the compiler preprocessor settings:
That’s it. With all this, the OSIF component uses the FreeRTOS services and can be used with other S32K SDK components.
OSIF using FreeRTOS functions
- Tutorial: FreeRTOS 10.0.1 with NXP S32 Design Studio 2018.R1
- Examples on GitHub: https://github.com/ErichStyger/mcuoneclipse/tree/master/Examples/S32DS
- McuOnEclipse components on SourceForge: https://sourceforge.net/projects/mcuoneclipse/files/PEx%20Components/
Published at DZone with permission of Erich Styger, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.