// Check if Kernel has been started static uint32_t os_kernel_is_active(void) { static uint8_t os_kernel_active = 0U; if (os_kernel_active == 0U) { if (osKernelGetState() > osKernelReady) { os_kernel_active = 1U; } } return (uint32_t)os_kernel_active; }
int main (void) { SystemCoreClockUpdate(); osKernelInitialize(); // Initialize CMSIS-RTOS osThreadNew(app_main, NULL, NULL); // Create application main thread if (osKernelGetState() == osKernelReady) { osKernelStart(); // Start thread execution } for (;;) {}; }
/// Start the RTOS Kernel scheduler. osStatus_t osKernelStart (void) { osStatus_t status; EvrRtxKernelStart(); if (IsIrqMode() || IsIrqMasked()) { EvrRtxKernelError((int32_t)osErrorISR); status = osErrorISR; } else { /* Call the pre-start event (from unprivileged mode) if the handler exists * and the kernel is not running. */ /* FIXME osEventObs needs to be readable but not writable from unprivileged * code. */ if (osKernelGetState() != osKernelRunning && osEventObs && osEventObs->pre_start) { osEventObs->pre_start(); } status = __svcKernelStart(); } return status; }