Using Processor Expert is an awesome tool: it generates source code for me, and I can can ‘dynamically’ tune my projects to my needs. Still, sometimes it is better or desirable to have a ‘normal’ or ‘static’ project. This is very well possible with Processor Expert (see “Sneaking from Processor Expert” or “Disable my Code Generation“): I can generate the code one time, and then use it without Processor Expert.
To make this even easier, I have added an option to the FreeRTOS Processor Expert component to generate ‘static’ code I can copy-paste to projects and tool chains which are either not supported by Processor Expert, or just for ‘static’ projects.
Custom Port Settings
In FreeRTOS terms, a ‘port’ are the RTOS sources with the specific support files for an architecture, e.g. an ARM Cortex-M0+. With Processor Expert I can dynamically detect which microcontroller architecture is use in the project, and generate code just for that ‘port’.
If I want to generate ‘static’ sources, then I need to enable the ‘Custom Port’ settings. One important setting is the compiler:
This sets the compiler in the FreeRTOSConfig.h which I can change later in my ‘static’ sources:
/* -------------------------------------------------------------------- */ /* Macros to identify the compiler used: */ #define configCOMPILER_ARM_GCC 1 /* GNU ARM gcc compiler */ #define configCOMPILER_ARM_IAR 2 /* IAR ARM compiler */ #define configCOMPILER_ARM_FSL 3 /* Legacy Freescale ARM compiler */ #define configCOMPILER_ARM_KEIL 4 /* ARM/Keil compiler */ #define configCOMPILER_S08_FSL 5 /* Freescale HCS08 compiler */ #define configCOMPILER_S12_FSL 6 /* Freescale HCS12(X) compiler */ #define configCOMPILER_CF1_FSL 7 /* Freescale ColdFire V1 compiler */ #define configCOMPILER_CF2_FSL 8 /* Freescale ColdFire V2 compiler */ #define configCOMPILER_DSC_FSL 9 /* Freescale DSC compiler */ #define configCOMPILER configCOMPILER_ARM_GCC
For now I mainly support the ARM Cortex with the static code generation, and for ARM I need to set the clock settings (bus clock and cpu clock), as they are used for the SysTick settings:
FreeRTOS uses the portBASE_TYPE as ‘architectural basic type’ which is typically an 8bit type for 8-bit microcontroller, and 32bit for a 32-bit microcontroller like ARM. You have the opportunity to change this:
❗ Be careful with this one: only change it if you now what you are doing 😉
Static Source Folder Settings
Instead to generate everything into the ‘Generated_Code’ folder, you can configure sub folder names:
With this, the FreeRTOS files are in separate sub folders:
Generating the sources is easy: just have a ‘base’ project where I generate the sources from. I have one on GitHub here.
Using the Static FreeRTOS Files
Now I can copy that generated ‘FreeRTOS’ folder (with its sub folders) and for example use it in another tool chain or project.
Processor Expert can be used to generate static source code: with this I have the power of code generation, only need to support one ‘master’ source base, and can use the software IP either dynamically or statically. I avoid to have different version of the source base. Processor Expert then is like a data base or system which generates the needed software in the needed format.
I have used that approach with CodeWarrior, Eclipse Kepler and IAR projects successfully. I have used it for ARM (Cortex-M0+, Cortex-M4, Cortex-M4F), but with some further tuning that approch is suitable for any architecture. It is just that my work now is nearly everything on ARM 😉
The sources of the ‘master database project’, plus examples of generated sources and their ports/projects are available on GitHub: https://github.com/ErichStyger/mcuoneclipse/tree/master/Examples/FreeRTOS_Ports
Happy Generating 🙂