Keil RTX5 is a feature-rich real-time operating system (RTOS). CMSIS and the CMSIS-RTOS2 API makes it easy to work with.
When setting up the project’s Run-Time Environment, ensure you add the appropriate system initialization code (C Startup
).
Once this is done, the RTX5
initialization code is typically the same. It involves setting up the SysTick
timer with the
SystemCoreClockUpdate()
function, then initializing and starting the RTOS.
main()
Return to the CMSIS
view.
Within the Source Files
group, a main.c
is automatically created. Click on the file to open it in the text editor.
Delete any auto-generated code and replace it with the following:
#include "RTE_Components.h"
#include CMSIS_device_header
#include "cmsis_os2.h"
void app_main(void *);
int __attribute__((noreturn)) main (void) {
SystemCoreClockUpdate(); // initialize clocks etc
osKernelInitialize(); // initialize RTOS
osThreadNew(app_main, NULL, NULL); // Create application main thread
if (osKernelGetState() == osKernelReady) // If all OK...
osKernelStart(); // Start thread execution
while(1); // If you get to here, something has gone wrong!
}
The function osKernelStart() is designed to never return.
If your code reaches the infinite while()
loop, something has gone wrong - most likely with the platform initialization code.
All threads should follow a prototype like this:
void thread(void *);
The argument for this function is provided as the second parameter of the
osThreadNew()
function. Use NULL
if no argument to pass.
In the example above, app_main
is used as the main application thread, but this naming is arbitrary. From here, you will spawn all other threads in the RTOS.