We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi,
we want to be able to change processor clock in a running CMSIS RTOS application.
As we see, we can only statically configure RTOS via RTX_CONF_CM.c (OS_CLOCK). In addition all variables using OS_CLOCK are defined const in RTX_CM_lib.h.
Is there a way to change processor clock via SystemCoreClockUpdate() so that timer tick of RTOS is modified accordingly ? So that e.g. osDelay() will always wait same time amount.
Best regards Juergen
You are referring to RTX4 (based on CMSIS-RTOS API) which assumes that the processor clock does not change dynamically.
You should consider upgrading to RTX5. You may continue using CMSIS-RTOS API or migrate to CMSIS-RTOS2 API. Take a look at the migration guide: http://www.keil.com/pack/doc/CMSIS/RTOS2/html/os2Migration.html
When using RTX5 and the processor clock changes you just need to setup the SysTick LOAD register correctly after calling SystemCoreClockUpdate().
Somehing like this:
// freq: Kernel Tick Frequency defined in RTX_Config.h (typically 1000) SysTick->LOAD = (SystemCoreClock / freq) - 1U;