30 #define TRACE_LEVEL TRACE_LEVEL_OFF
53 #if (osCMSIS >= 0x10001)
66 #if (osCMSIS >= 0x10001)
71 osKernelStart(NULL, NULL);
89 osThreadDef_t threadDef;
92 memset(&threadDef, 0,
sizeof(threadDef));
95 #if defined(osCMSIS_RTX) && (osCMSIS_RTX < 0x50000)
96 threadDef.pthread = (os_pthread) taskCode;
97 threadDef.tpriority = (osPriority) params->
priority;
98 threadDef.instances = 1;
99 threadDef.stacksize = params->
stackSize *
sizeof(uint32_t);
100 #elif defined(osCMSIS_RTX) && (osCMSIS_RTX >= 0x50000)
101 threadDef.pthread = (os_pthread) taskCode;
102 threadDef.attr.name =
name;
103 threadDef.attr.attr_bits = 0;
104 threadDef.attr.cb_mem = NULL;
105 threadDef.attr.cb_size = 0;
106 threadDef.attr.stack_mem = NULL;
107 threadDef.attr.stack_size = params->
stackSize *
sizeof(uint32_t);
108 threadDef.attr.priority = (osPriority_t) params->
priority;
109 threadDef.attr.tz_module = 0;
110 threadDef.attr.reserved = 0;
111 #elif defined(osCMSIS_FreeRTOS)
112 threadDef.pthread = (os_pthread) taskCode;
113 threadDef.attr.name =
name;
114 threadDef.attr.attr_bits = 0;
115 threadDef.attr.cb_mem = NULL;
116 threadDef.attr.cb_size = 0;
117 threadDef.attr.stack_mem = NULL;
118 threadDef.attr.stack_size = params->
stackSize *
sizeof(uint32_t);
119 threadDef.attr.priority = (osPriority_t) params->
priority;
120 threadDef.attr.tz_module = 0;
121 threadDef.attr.reserved = 0;
124 threadDef.pthread = (os_pthread) taskCode;
125 threadDef.tpriority = (osPriority) params->
priority;
126 threadDef.instances = 1;
131 threadId = osThreadCreate(&threadDef, arg);
145 #if (osCMSIS >= 0x20000)
153 osThreadTerminate((osThreadId_t) taskId);
157 osThreadTerminate((osThreadId) taskId);
191 #if defined(osCMSIS_RTX) || defined(osCMSIS_FreeRTOS)
195 if(osKernelRunning())
198 osThreadSuspendAll();
210 #if defined(osCMSIS_RTX) || defined(osCMSIS_FreeRTOS)
214 if(osKernelRunning())
232 osSemaphoreDef_t semaphoreDef;
234 #if defined(osCMSIS_RTX) && (osCMSIS_RTX < 0x50000)
235 semaphoreDef.semaphore =
event->cb;
236 #elif defined(osCMSIS_RTX) && (osCMSIS_RTX >= 0x50000)
237 semaphoreDef.name = NULL;
238 semaphoreDef.attr_bits = 0;
239 semaphoreDef.cb_mem = NULL;
240 semaphoreDef.cb_size = 0;
241 #elif defined(osCMSIS_FreeRTOS)
242 semaphoreDef.name = NULL;
243 semaphoreDef.attr_bits = 0;
244 semaphoreDef.cb_mem = NULL;
245 semaphoreDef.cb_size = 0;
247 semaphoreDef.dummy = 0;
251 event->id = osSemaphoreCreate(&semaphoreDef, 1);
254 if(event->
id != NULL)
257 osSemaphoreWait(event->
id, 0);
277 if(event->
id != NULL)
280 osSemaphoreDelete(event->
id);
293 osSemaphoreRelease(event->
id);
304 #if defined(osCMSIS_RTX) && (osCMSIS_RTX < 0x50000)
306 while(osSemaphoreWait(event->
id, 0) > 0)
311 osSemaphoreWait(event->
id, 0);
333 ret = osSemaphoreWait(event->
id, osWaitForever);
337 #if defined(osCMSIS_RTX) && (osCMSIS_RTX < 0x50000)
344 n =
MIN(timeout, 10000);
346 ret = osSemaphoreWait(event->
id,
n);
351 }
while(ret == 0 && timeout > 0);
354 ret = osSemaphoreWait(event->
id, timeout);
358 #if defined(osCMSIS_RTX) && (osCMSIS_RTX < 0x50000)
363 while(osSemaphoreWait(event->
id, 0) > 0);
373 #elif defined(osCMSIS_RTX) && (osCMSIS_RTX >= 0x50000)
383 #elif defined(osCMSIS_FreeRTOS)
417 osSemaphoreRelease(event->
id);
435 osSemaphoreDef_t semaphoreDef;
437 #if defined(osCMSIS_RTX) && (osCMSIS_RTX < 0x50000)
438 semaphoreDef.semaphore = semaphore->cb;
439 #elif defined(osCMSIS_RTX) && (osCMSIS_RTX >= 0x50000)
440 semaphoreDef.name = NULL;
441 semaphoreDef.attr_bits = 0;
442 semaphoreDef.cb_mem = NULL;
443 semaphoreDef.cb_size = 0;
444 #elif defined(osCMSIS_FreeRTOS)
445 semaphoreDef.name = NULL;
446 semaphoreDef.attr_bits = 0;
447 semaphoreDef.cb_mem = NULL;
448 semaphoreDef.cb_size = 0;
450 semaphoreDef.dummy = 0;
454 semaphore->
id = osSemaphoreCreate(&semaphoreDef, count);
457 if(semaphore->
id != NULL)
476 if(semaphore->
id != NULL)
479 osSemaphoreDelete(semaphore->
id);
500 ret = osSemaphoreWait(semaphore->
id, osWaitForever);
504 #if defined(osCMSIS_RTX) && (osCMSIS_RTX < 0x50000)
511 n =
MIN(timeout, 10000);
513 ret = osSemaphoreWait(semaphore->
id,
n);
518 }
while(ret == 0 && timeout > 0);
521 ret = osSemaphoreWait(semaphore->
id, timeout);
525 #if defined(osCMSIS_RTX) || defined(osCMSIS_FreeRTOS)
557 osSemaphoreRelease(semaphore->
id);
570 osMutexDef_t mutexDef;
572 #if defined(osCMSIS_RTX) && (osCMSIS_RTX < 0x50000)
573 mutexDef.mutex = mutex->cb;
574 #elif defined(osCMSIS_RTX) && (osCMSIS_RTX >= 0x50000)
575 mutexDef.name = NULL;
576 mutexDef.attr_bits = 0;
577 mutexDef.cb_mem = NULL;
578 mutexDef.cb_size = 0;
579 #elif defined(osCMSIS_FreeRTOS)
580 mutexDef.name = NULL;
581 mutexDef.attr_bits = 0;
582 mutexDef.cb_mem = NULL;
583 mutexDef.cb_size = 0;
589 mutex->
id = osMutexCreate(&mutexDef);
592 if(mutex->
id != NULL)
611 if(mutex->
id != NULL)
614 osMutexDelete(mutex->
id);
627 osMutexWait(mutex->
id, osWaitForever);
639 osMutexRelease(mutex->
id);
652 #if defined(osCMSIS_RTX) && (osCMSIS_RTX < 0x50000)
654 extern uint32_t rt_time_get(
void);
657 time = rt_time_get();
658 #elif defined(osCMSIS_RTX) && (osCMSIS_RTX >= 0x50000)
659 time = osKernelGetTickCount();
660 #elif defined(osCMSIS_FreeRTOS)
661 time = osKernelGetTickCount();
664 time = osKernelSysTick();
692 size, (uintptr_t)
p);
710 TRACE_DEBUG(
"Freeing memory at 0x%08" PRIXPTR
"\r\n", (uintptr_t)
p);
void(* OsTaskCode)(void *arg)
Task routine.
#define OS_SYSTICKS_TO_MS(n)
uint32_t systime_t
System time.
thread_t * OsTaskId
Task identifier.
void osSwitchTask(void)
Yield control to the next task.
void osResumeAllTasks(void)
Resume scheduler activity.
bool_t osCreateMutex(OsMutex *mutex)
Create a mutex object.
bool_t osWaitForEvent(OsEvent *event, systime_t timeout)
Wait until the specified event is in the signaled state.
void osDeleteEvent(OsEvent *event)
Delete an event object.
void osDeleteMutex(OsMutex *mutex)
Delete a mutex object.
void osReleaseSemaphore(OsSemaphore *semaphore)
Release the specified semaphore object.
const OsTaskParameters OS_TASK_DEFAULT_PARAMS
__weak_func void * osAllocMem(size_t size)
Allocate a memory block.
void osDeleteSemaphore(OsSemaphore *semaphore)
Delete a semaphore object.
void osAcquireMutex(OsMutex *mutex)
Acquire ownership of the specified mutex object.
void osDelayTask(systime_t delay)
Delay routine.
__weak_func void osFreeMem(void *p)
Release a previously allocated memory block.
bool_t osWaitForSemaphore(OsSemaphore *semaphore, systime_t timeout)
Wait for the specified semaphore to be available.
OsTaskId osCreateTask(const char_t *name, OsTaskCode taskCode, void *arg, const OsTaskParameters *params)
Create a task.
void osReleaseMutex(OsMutex *mutex)
Release ownership of the specified mutex object.
void osResetEvent(OsEvent *event)
Set the specified event object to the nonsignaled state.
bool_t osSetEventFromIsr(OsEvent *event)
Set an event object to the signaled state from an interrupt service routine.
void osDeleteTask(OsTaskId taskId)
Delete a task.
bool_t osCreateSemaphore(OsSemaphore *semaphore, uint_t count)
Create a semaphore object.
systime_t osGetSystemTime(void)
Retrieve system time.
void osSuspendAllTasks(void)
Suspend scheduler activity.
bool_t osCreateEvent(OsEvent *event)
Create an event object.
void osStartKernel(void)
Start kernel.
void osInitKernel(void)
Kernel initialization.
void osSetEvent(OsEvent *event)
Set the specified event object to the signaled state.
RTOS abstraction layer (CMSIS-RTOS)