Mercurial > pub > halpp
comparison f103c8/Drivers/CMSIS/RTOS/Template/cmsis_os.h @ 2:0c59e7a7782a
Working on GPIO and RCC
| author | cin |
|---|---|
| date | Mon, 16 Jan 2017 11:04:47 +0300 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1:a0b14b11ad9f | 2:0c59e7a7782a |
|---|---|
| 1 /* ---------------------------------------------------------------------- | |
| 2 * $Date: 5. February 2013 | |
| 3 * $Revision: V1.02 | |
| 4 * | |
| 5 * Project: CMSIS-RTOS API | |
| 6 * Title: cmsis_os.h template header file | |
| 7 * | |
| 8 * Version 0.02 | |
| 9 * Initial Proposal Phase | |
| 10 * Version 0.03 | |
| 11 * osKernelStart added, optional feature: main started as thread | |
| 12 * osSemaphores have standard behavior | |
| 13 * osTimerCreate does not start the timer, added osTimerStart | |
| 14 * osThreadPass is renamed to osThreadYield | |
| 15 * Version 1.01 | |
| 16 * Support for C++ interface | |
| 17 * - const attribute removed from the osXxxxDef_t typedef's | |
| 18 * - const attribute added to the osXxxxDef macros | |
| 19 * Added: osTimerDelete, osMutexDelete, osSemaphoreDelete | |
| 20 * Added: osKernelInitialize | |
| 21 * Version 1.02 | |
| 22 * Control functions for short timeouts in microsecond resolution: | |
| 23 * Added: osKernelSysTick, osKernelSysTickFrequency, osKernelSysTickMicroSec | |
| 24 * Removed: osSignalGet | |
| 25 *---------------------------------------------------------------------------- | |
| 26 * | |
| 27 * Copyright (c) 2013 ARM LIMITED | |
| 28 * All rights reserved. | |
| 29 * Redistribution and use in source and binary forms, with or without | |
| 30 * modification, are permitted provided that the following conditions are met: | |
| 31 * - Redistributions of source code must retain the above copyright | |
| 32 * notice, this list of conditions and the following disclaimer. | |
| 33 * - Redistributions in binary form must reproduce the above copyright | |
| 34 * notice, this list of conditions and the following disclaimer in the | |
| 35 * documentation and/or other materials provided with the distribution. | |
| 36 * - Neither the name of ARM nor the names of its contributors may be used | |
| 37 * to endorse or promote products derived from this software without | |
| 38 * specific prior written permission. | |
| 39 * | |
| 40 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
| 41 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| 42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
| 43 * ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE | |
| 44 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
| 45 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
| 46 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
| 47 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
| 48 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
| 49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
| 50 * POSSIBILITY OF SUCH DAMAGE. | |
| 51 *---------------------------------------------------------------------------*/ | |
| 52 | |
| 53 | |
| 54 #ifndef _CMSIS_OS_H | |
| 55 #define _CMSIS_OS_H | |
| 56 | |
| 57 /// \note MUST REMAIN UNCHANGED: \b osCMSIS identifies the CMSIS-RTOS API version. | |
| 58 #define osCMSIS 0x10002 ///< API version (main [31:16] .sub [15:0]) | |
| 59 | |
| 60 /// \note CAN BE CHANGED: \b osCMSIS_KERNEL identifies the underlying RTOS kernel and version number. | |
| 61 #define osCMSIS_KERNEL 0x10000 ///< RTOS identification and version (main [31:16] .sub [15:0]) | |
| 62 | |
| 63 /// \note MUST REMAIN UNCHANGED: \b osKernelSystemId shall be consistent in every CMSIS-RTOS. | |
| 64 #define osKernelSystemId "KERNEL V1.00" ///< RTOS identification string | |
| 65 | |
| 66 /// \note MUST REMAIN UNCHANGED: \b osFeature_xxx shall be consistent in every CMSIS-RTOS. | |
| 67 #define osFeature_MainThread 1 ///< main thread 1=main can be thread, 0=not available | |
| 68 #define osFeature_Pool 1 ///< Memory Pools: 1=available, 0=not available | |
| 69 #define osFeature_MailQ 1 ///< Mail Queues: 1=available, 0=not available | |
| 70 #define osFeature_MessageQ 1 ///< Message Queues: 1=available, 0=not available | |
| 71 #define osFeature_Signals 8 ///< maximum number of Signal Flags available per thread | |
| 72 #define osFeature_Semaphore 30 ///< maximum count for \ref osSemaphoreCreate function | |
| 73 #define osFeature_Wait 1 ///< osWait function: 1=available, 0=not available | |
| 74 #define osFeature_SysTick 1 ///< osKernelSysTick functions: 1=available, 0=not available | |
| 75 | |
| 76 #include <stdint.h> | |
| 77 #include <stddef.h> | |
| 78 | |
| 79 #ifdef __cplusplus | |
| 80 extern "C" | |
| 81 { | |
| 82 #endif | |
| 83 | |
| 84 | |
| 85 // ==== Enumeration, structures, defines ==== | |
| 86 | |
| 87 /// Priority used for thread control. | |
| 88 /// \note MUST REMAIN UNCHANGED: \b osPriority shall be consistent in every CMSIS-RTOS. | |
| 89 typedef enum { | |
| 90 osPriorityIdle = -3, ///< priority: idle (lowest) | |
| 91 osPriorityLow = -2, ///< priority: low | |
| 92 osPriorityBelowNormal = -1, ///< priority: below normal | |
| 93 osPriorityNormal = 0, ///< priority: normal (default) | |
| 94 osPriorityAboveNormal = +1, ///< priority: above normal | |
| 95 osPriorityHigh = +2, ///< priority: high | |
| 96 osPriorityRealtime = +3, ///< priority: realtime (highest) | |
| 97 osPriorityError = 0x84 ///< system cannot determine priority or thread has illegal priority | |
| 98 } osPriority; | |
| 99 | |
| 100 /// Timeout value. | |
| 101 /// \note MUST REMAIN UNCHANGED: \b osWaitForever shall be consistent in every CMSIS-RTOS. | |
| 102 #define osWaitForever 0xFFFFFFFF ///< wait forever timeout value | |
| 103 | |
| 104 /// Status code values returned by CMSIS-RTOS functions. | |
| 105 /// \note MUST REMAIN UNCHANGED: \b osStatus shall be consistent in every CMSIS-RTOS. | |
| 106 typedef enum { | |
| 107 osOK = 0, ///< function completed; no error or event occurred. | |
| 108 osEventSignal = 0x08, ///< function completed; signal event occurred. | |
| 109 osEventMessage = 0x10, ///< function completed; message event occurred. | |
| 110 osEventMail = 0x20, ///< function completed; mail event occurred. | |
| 111 osEventTimeout = 0x40, ///< function completed; timeout occurred. | |
| 112 osErrorParameter = 0x80, ///< parameter error: a mandatory parameter was missing or specified an incorrect object. | |
| 113 osErrorResource = 0x81, ///< resource not available: a specified resource was not available. | |
| 114 osErrorTimeoutResource = 0xC1, ///< resource not available within given time: a specified resource was not available within the timeout period. | |
| 115 osErrorISR = 0x82, ///< not allowed in ISR context: the function cannot be called from interrupt service routines. | |
| 116 osErrorISRRecursive = 0x83, ///< function called multiple times from ISR with same object. | |
| 117 osErrorPriority = 0x84, ///< system cannot determine priority or thread has illegal priority. | |
| 118 osErrorNoMemory = 0x85, ///< system is out of memory: it was impossible to allocate or reserve memory for the operation. | |
| 119 osErrorValue = 0x86, ///< value of a parameter is out of range. | |
| 120 osErrorOS = 0xFF, ///< unspecified RTOS error: run-time error but no other error message fits. | |
| 121 os_status_reserved = 0x7FFFFFFF ///< prevent from enum down-size compiler optimization. | |
| 122 } osStatus; | |
| 123 | |
| 124 | |
| 125 /// Timer type value for the timer definition. | |
| 126 /// \note MUST REMAIN UNCHANGED: \b os_timer_type shall be consistent in every CMSIS-RTOS. | |
| 127 typedef enum { | |
| 128 osTimerOnce = 0, ///< one-shot timer | |
| 129 osTimerPeriodic = 1 ///< repeating timer | |
| 130 } os_timer_type; | |
| 131 | |
| 132 /// Entry point of a thread. | |
| 133 /// \note MUST REMAIN UNCHANGED: \b os_pthread shall be consistent in every CMSIS-RTOS. | |
| 134 typedef void (*os_pthread) (void const *argument); | |
| 135 | |
| 136 /// Entry point of a timer call back function. | |
| 137 /// \note MUST REMAIN UNCHANGED: \b os_ptimer shall be consistent in every CMSIS-RTOS. | |
| 138 typedef void (*os_ptimer) (void const *argument); | |
| 139 | |
| 140 // >>> the following data type definitions may shall adapted towards a specific RTOS | |
| 141 | |
| 142 /// Thread ID identifies the thread (pointer to a thread control block). | |
| 143 /// \note CAN BE CHANGED: \b os_thread_cb is implementation specific in every CMSIS-RTOS. | |
| 144 typedef struct os_thread_cb *osThreadId; | |
| 145 | |
| 146 /// Timer ID identifies the timer (pointer to a timer control block). | |
| 147 /// \note CAN BE CHANGED: \b os_timer_cb is implementation specific in every CMSIS-RTOS. | |
| 148 typedef struct os_timer_cb *osTimerId; | |
| 149 | |
| 150 /// Mutex ID identifies the mutex (pointer to a mutex control block). | |
| 151 /// \note CAN BE CHANGED: \b os_mutex_cb is implementation specific in every CMSIS-RTOS. | |
| 152 typedef struct os_mutex_cb *osMutexId; | |
| 153 | |
| 154 /// Semaphore ID identifies the semaphore (pointer to a semaphore control block). | |
| 155 /// \note CAN BE CHANGED: \b os_semaphore_cb is implementation specific in every CMSIS-RTOS. | |
| 156 typedef struct os_semaphore_cb *osSemaphoreId; | |
| 157 | |
| 158 /// Pool ID identifies the memory pool (pointer to a memory pool control block). | |
| 159 /// \note CAN BE CHANGED: \b os_pool_cb is implementation specific in every CMSIS-RTOS. | |
| 160 typedef struct os_pool_cb *osPoolId; | |
| 161 | |
| 162 /// Message ID identifies the message queue (pointer to a message queue control block). | |
| 163 /// \note CAN BE CHANGED: \b os_messageQ_cb is implementation specific in every CMSIS-RTOS. | |
| 164 typedef struct os_messageQ_cb *osMessageQId; | |
| 165 | |
| 166 /// Mail ID identifies the mail queue (pointer to a mail queue control block). | |
| 167 /// \note CAN BE CHANGED: \b os_mailQ_cb is implementation specific in every CMSIS-RTOS. | |
| 168 typedef struct os_mailQ_cb *osMailQId; | |
| 169 | |
| 170 | |
| 171 /// Thread Definition structure contains startup information of a thread. | |
| 172 /// \note CAN BE CHANGED: \b os_thread_def is implementation specific in every CMSIS-RTOS. | |
| 173 typedef struct os_thread_def { | |
| 174 os_pthread pthread; ///< start address of thread function | |
| 175 osPriority tpriority; ///< initial thread priority | |
| 176 uint32_t instances; ///< maximum number of instances of that thread function | |
| 177 uint32_t stacksize; ///< stack size requirements in bytes; 0 is default stack size | |
| 178 } osThreadDef_t; | |
| 179 | |
| 180 /// Timer Definition structure contains timer parameters. | |
| 181 /// \note CAN BE CHANGED: \b os_timer_def is implementation specific in every CMSIS-RTOS. | |
| 182 typedef struct os_timer_def { | |
| 183 os_ptimer ptimer; ///< start address of a timer function | |
| 184 } osTimerDef_t; | |
| 185 | |
| 186 /// Mutex Definition structure contains setup information for a mutex. | |
| 187 /// \note CAN BE CHANGED: \b os_mutex_def is implementation specific in every CMSIS-RTOS. | |
| 188 typedef struct os_mutex_def { | |
| 189 uint32_t dummy; ///< dummy value. | |
| 190 } osMutexDef_t; | |
| 191 | |
| 192 /// Semaphore Definition structure contains setup information for a semaphore. | |
| 193 /// \note CAN BE CHANGED: \b os_semaphore_def is implementation specific in every CMSIS-RTOS. | |
| 194 typedef struct os_semaphore_def { | |
| 195 uint32_t dummy; ///< dummy value. | |
| 196 } osSemaphoreDef_t; | |
| 197 | |
| 198 /// Definition structure for memory block allocation. | |
| 199 /// \note CAN BE CHANGED: \b os_pool_def is implementation specific in every CMSIS-RTOS. | |
| 200 typedef struct os_pool_def { | |
| 201 uint32_t pool_sz; ///< number of items (elements) in the pool | |
| 202 uint32_t item_sz; ///< size of an item | |
| 203 void *pool; ///< pointer to memory for pool | |
| 204 } osPoolDef_t; | |
| 205 | |
| 206 /// Definition structure for message queue. | |
| 207 /// \note CAN BE CHANGED: \b os_messageQ_def is implementation specific in every CMSIS-RTOS. | |
| 208 typedef struct os_messageQ_def { | |
| 209 uint32_t queue_sz; ///< number of elements in the queue | |
| 210 uint32_t item_sz; ///< size of an item | |
| 211 void *pool; ///< memory array for messages | |
| 212 } osMessageQDef_t; | |
| 213 | |
| 214 /// Definition structure for mail queue. | |
| 215 /// \note CAN BE CHANGED: \b os_mailQ_def is implementation specific in every CMSIS-RTOS. | |
| 216 typedef struct os_mailQ_def { | |
| 217 uint32_t queue_sz; ///< number of elements in the queue | |
| 218 uint32_t item_sz; ///< size of an item | |
| 219 void *pool; ///< memory array for mail | |
| 220 } osMailQDef_t; | |
| 221 | |
| 222 /// Event structure contains detailed information about an event. | |
| 223 /// \note MUST REMAIN UNCHANGED: \b os_event shall be consistent in every CMSIS-RTOS. | |
| 224 /// However the struct may be extended at the end. | |
| 225 typedef struct { | |
| 226 osStatus status; ///< status code: event or error information | |
| 227 union { | |
| 228 uint32_t v; ///< message as 32-bit value | |
| 229 void *p; ///< message or mail as void pointer | |
| 230 int32_t signals; ///< signal flags | |
| 231 } value; ///< event value | |
| 232 union { | |
| 233 osMailQId mail_id; ///< mail id obtained by \ref osMailCreate | |
| 234 osMessageQId message_id; ///< message id obtained by \ref osMessageCreate | |
| 235 } def; ///< event definition | |
| 236 } osEvent; | |
| 237 | |
| 238 | |
| 239 // ==== Kernel Control Functions ==== | |
| 240 | |
| 241 /// Initialize the RTOS Kernel for creating objects. | |
| 242 /// \return status code that indicates the execution status of the function. | |
| 243 /// \note MUST REMAIN UNCHANGED: \b osKernelInitialize shall be consistent in every CMSIS-RTOS. | |
| 244 osStatus osKernelInitialize (void); | |
| 245 | |
| 246 /// Start the RTOS Kernel. | |
| 247 /// \return status code that indicates the execution status of the function. | |
| 248 /// \note MUST REMAIN UNCHANGED: \b osKernelStart shall be consistent in every CMSIS-RTOS. | |
| 249 osStatus osKernelStart (void); | |
| 250 | |
| 251 /// Check if the RTOS kernel is already started. | |
| 252 /// \note MUST REMAIN UNCHANGED: \b osKernelRunning shall be consistent in every CMSIS-RTOS. | |
| 253 /// \return 0 RTOS is not started, 1 RTOS is started. | |
| 254 int32_t osKernelRunning(void); | |
| 255 | |
| 256 #if (defined (osFeature_SysTick) && (osFeature_SysTick != 0)) // System Timer available | |
| 257 | |
| 258 /// Get the RTOS kernel system timer counter | |
| 259 /// \note MUST REMAIN UNCHANGED: \b osKernelSysTick shall be consistent in every CMSIS-RTOS. | |
| 260 /// \return RTOS kernel system timer as 32-bit value | |
| 261 uint32_t osKernelSysTick (void); | |
| 262 | |
| 263 /// The RTOS kernel system timer frequency in Hz | |
| 264 /// \note Reflects the system timer setting and is typically defined in a configuration file. | |
| 265 #define osKernelSysTickFrequency 100000000 | |
| 266 | |
| 267 /// Convert a microseconds value to a RTOS kernel system timer value. | |
| 268 /// \param microsec time value in microseconds. | |
| 269 /// \return time value normalized to the \ref osKernelSysTickFrequency | |
| 270 #define osKernelSysTickMicroSec(microsec) (((uint64_t)microsec * (osKernelSysTickFrequency)) / 1000000) | |
| 271 | |
| 272 #endif // System Timer available | |
| 273 | |
| 274 // ==== Thread Management ==== | |
| 275 | |
| 276 /// Create a Thread Definition with function, priority, and stack requirements. | |
| 277 /// \param name name of the thread function. | |
| 278 /// \param priority initial priority of the thread function. | |
| 279 /// \param instances number of possible thread instances. | |
| 280 /// \param stacksz stack size (in bytes) requirements for the thread function. | |
| 281 /// \note CAN BE CHANGED: The parameters to \b osThreadDef shall be consistent but the | |
| 282 /// macro body is implementation specific in every CMSIS-RTOS. | |
| 283 #if defined (osObjectsExternal) // object is external | |
| 284 #define osThreadDef(name, priority, instances, stacksz) \ | |
| 285 extern const osThreadDef_t os_thread_def_##name | |
| 286 #else // define the object | |
| 287 #define osThreadDef(name, priority, instances, stacksz) \ | |
| 288 const osThreadDef_t os_thread_def_##name = \ | |
| 289 { (name), (priority), (instances), (stacksz) } | |
| 290 #endif | |
| 291 | |
| 292 /// Access a Thread definition. | |
| 293 /// \param name name of the thread definition object. | |
| 294 /// \note CAN BE CHANGED: The parameter to \b osThread shall be consistent but the | |
| 295 /// macro body is implementation specific in every CMSIS-RTOS. | |
| 296 #define osThread(name) \ | |
| 297 &os_thread_def_##name | |
| 298 | |
| 299 /// Create a thread and add it to Active Threads and set it to state READY. | |
| 300 /// \param[in] thread_def thread definition referenced with \ref osThread. | |
| 301 /// \param[in] argument pointer that is passed to the thread function as start argument. | |
| 302 /// \return thread ID for reference by other functions or NULL in case of error. | |
| 303 /// \note MUST REMAIN UNCHANGED: \b osThreadCreate shall be consistent in every CMSIS-RTOS. | |
| 304 osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument); | |
| 305 | |
| 306 /// Return the thread ID of the current running thread. | |
| 307 /// \return thread ID for reference by other functions or NULL in case of error. | |
| 308 /// \note MUST REMAIN UNCHANGED: \b osThreadGetId shall be consistent in every CMSIS-RTOS. | |
| 309 osThreadId osThreadGetId (void); | |
| 310 | |
| 311 /// Terminate execution of a thread and remove it from Active Threads. | |
| 312 /// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. | |
| 313 /// \return status code that indicates the execution status of the function. | |
| 314 /// \note MUST REMAIN UNCHANGED: \b osThreadTerminate shall be consistent in every CMSIS-RTOS. | |
| 315 osStatus osThreadTerminate (osThreadId thread_id); | |
| 316 | |
| 317 /// Pass control to next thread that is in state \b READY. | |
| 318 /// \return status code that indicates the execution status of the function. | |
| 319 /// \note MUST REMAIN UNCHANGED: \b osThreadYield shall be consistent in every CMSIS-RTOS. | |
| 320 osStatus osThreadYield (void); | |
| 321 | |
| 322 /// Change priority of an active thread. | |
| 323 /// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. | |
| 324 /// \param[in] priority new priority value for the thread function. | |
| 325 /// \return status code that indicates the execution status of the function. | |
| 326 /// \note MUST REMAIN UNCHANGED: \b osThreadSetPriority shall be consistent in every CMSIS-RTOS. | |
| 327 osStatus osThreadSetPriority (osThreadId thread_id, osPriority priority); | |
| 328 | |
| 329 /// Get current priority of an active thread. | |
| 330 /// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. | |
| 331 /// \return current priority value of the thread function. | |
| 332 /// \note MUST REMAIN UNCHANGED: \b osThreadGetPriority shall be consistent in every CMSIS-RTOS. | |
| 333 osPriority osThreadGetPriority (osThreadId thread_id); | |
| 334 | |
| 335 | |
| 336 // ==== Generic Wait Functions ==== | |
| 337 | |
| 338 /// Wait for Timeout (Time Delay). | |
| 339 /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue "time delay" value | |
| 340 /// \return status code that indicates the execution status of the function. | |
| 341 osStatus osDelay (uint32_t millisec); | |
| 342 | |
| 343 #if (defined (osFeature_Wait) && (osFeature_Wait != 0)) // Generic Wait available | |
| 344 | |
| 345 /// Wait for Signal, Message, Mail, or Timeout. | |
| 346 /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out | |
| 347 /// \return event that contains signal, message, or mail information or error code. | |
| 348 /// \note MUST REMAIN UNCHANGED: \b osWait shall be consistent in every CMSIS-RTOS. | |
| 349 osEvent osWait (uint32_t millisec); | |
| 350 | |
| 351 #endif // Generic Wait available | |
| 352 | |
| 353 | |
| 354 // ==== Timer Management Functions ==== | |
| 355 /// Define a Timer object. | |
| 356 /// \param name name of the timer object. | |
| 357 /// \param function name of the timer call back function. | |
| 358 /// \note CAN BE CHANGED: The parameter to \b osTimerDef shall be consistent but the | |
| 359 /// macro body is implementation specific in every CMSIS-RTOS. | |
| 360 #if defined (osObjectsExternal) // object is external | |
| 361 #define osTimerDef(name, function) \ | |
| 362 extern const osTimerDef_t os_timer_def_##name | |
| 363 #else // define the object | |
| 364 #define osTimerDef(name, function) \ | |
| 365 const osTimerDef_t os_timer_def_##name = \ | |
| 366 { (function) } | |
| 367 #endif | |
| 368 | |
| 369 /// Access a Timer definition. | |
| 370 /// \param name name of the timer object. | |
| 371 /// \note CAN BE CHANGED: The parameter to \b osTimer shall be consistent but the | |
| 372 /// macro body is implementation specific in every CMSIS-RTOS. | |
| 373 #define osTimer(name) \ | |
| 374 &os_timer_def_##name | |
| 375 | |
| 376 /// Create a timer. | |
| 377 /// \param[in] timer_def timer object referenced with \ref osTimer. | |
| 378 /// \param[in] type osTimerOnce for one-shot or osTimerPeriodic for periodic behavior. | |
| 379 /// \param[in] argument argument to the timer call back function. | |
| 380 /// \return timer ID for reference by other functions or NULL in case of error. | |
| 381 /// \note MUST REMAIN UNCHANGED: \b osTimerCreate shall be consistent in every CMSIS-RTOS. | |
| 382 osTimerId osTimerCreate (const osTimerDef_t *timer_def, os_timer_type type, void *argument); | |
| 383 | |
| 384 /// Start or restart a timer. | |
| 385 /// \param[in] timer_id timer ID obtained by \ref osTimerCreate. | |
| 386 /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue "time delay" value of the timer. | |
| 387 /// \return status code that indicates the execution status of the function. | |
| 388 /// \note MUST REMAIN UNCHANGED: \b osTimerStart shall be consistent in every CMSIS-RTOS. | |
| 389 osStatus osTimerStart (osTimerId timer_id, uint32_t millisec); | |
| 390 | |
| 391 /// Stop the timer. | |
| 392 /// \param[in] timer_id timer ID obtained by \ref osTimerCreate. | |
| 393 /// \return status code that indicates the execution status of the function. | |
| 394 /// \note MUST REMAIN UNCHANGED: \b osTimerStop shall be consistent in every CMSIS-RTOS. | |
| 395 osStatus osTimerStop (osTimerId timer_id); | |
| 396 | |
| 397 /// Delete a timer that was created by \ref osTimerCreate. | |
| 398 /// \param[in] timer_id timer ID obtained by \ref osTimerCreate. | |
| 399 /// \return status code that indicates the execution status of the function. | |
| 400 /// \note MUST REMAIN UNCHANGED: \b osTimerDelete shall be consistent in every CMSIS-RTOS. | |
| 401 osStatus osTimerDelete (osTimerId timer_id); | |
| 402 | |
| 403 | |
| 404 // ==== Signal Management ==== | |
| 405 | |
| 406 /// Set the specified Signal Flags of an active thread. | |
| 407 /// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. | |
| 408 /// \param[in] signals specifies the signal flags of the thread that should be set. | |
| 409 /// \return previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters. | |
| 410 /// \note MUST REMAIN UNCHANGED: \b osSignalSet shall be consistent in every CMSIS-RTOS. | |
| 411 int32_t osSignalSet (osThreadId thread_id, int32_t signals); | |
| 412 | |
| 413 /// Clear the specified Signal Flags of an active thread. | |
| 414 /// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId. | |
| 415 /// \param[in] signals specifies the signal flags of the thread that shall be cleared. | |
| 416 /// \return previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters or call from ISR. | |
| 417 /// \note MUST REMAIN UNCHANGED: \b osSignalClear shall be consistent in every CMSIS-RTOS. | |
| 418 int32_t osSignalClear (osThreadId thread_id, int32_t signals); | |
| 419 | |
| 420 /// Wait for one or more Signal Flags to become signaled for the current \b RUNNING thread. | |
| 421 /// \param[in] signals wait until all specified signal flags set or 0 for any single signal flag. | |
| 422 /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. | |
| 423 /// \return event flag information or error code. | |
| 424 /// \note MUST REMAIN UNCHANGED: \b osSignalWait shall be consistent in every CMSIS-RTOS. | |
| 425 osEvent osSignalWait (int32_t signals, uint32_t millisec); | |
| 426 | |
| 427 | |
| 428 // ==== Mutex Management ==== | |
| 429 | |
| 430 /// Define a Mutex. | |
| 431 /// \param name name of the mutex object. | |
| 432 /// \note CAN BE CHANGED: The parameter to \b osMutexDef shall be consistent but the | |
| 433 /// macro body is implementation specific in every CMSIS-RTOS. | |
| 434 #if defined (osObjectsExternal) // object is external | |
| 435 #define osMutexDef(name) \ | |
| 436 extern const osMutexDef_t os_mutex_def_##name | |
| 437 #else // define the object | |
| 438 #define osMutexDef(name) \ | |
| 439 const osMutexDef_t os_mutex_def_##name = { 0 } | |
| 440 #endif | |
| 441 | |
| 442 /// Access a Mutex definition. | |
| 443 /// \param name name of the mutex object. | |
| 444 /// \note CAN BE CHANGED: The parameter to \b osMutex shall be consistent but the | |
| 445 /// macro body is implementation specific in every CMSIS-RTOS. | |
| 446 #define osMutex(name) \ | |
| 447 &os_mutex_def_##name | |
| 448 | |
| 449 /// Create and Initialize a Mutex object. | |
| 450 /// \param[in] mutex_def mutex definition referenced with \ref osMutex. | |
| 451 /// \return mutex ID for reference by other functions or NULL in case of error. | |
| 452 /// \note MUST REMAIN UNCHANGED: \b osMutexCreate shall be consistent in every CMSIS-RTOS. | |
| 453 osMutexId osMutexCreate (const osMutexDef_t *mutex_def); | |
| 454 | |
| 455 /// Wait until a Mutex becomes available. | |
| 456 /// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate. | |
| 457 /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. | |
| 458 /// \return status code that indicates the execution status of the function. | |
| 459 /// \note MUST REMAIN UNCHANGED: \b osMutexWait shall be consistent in every CMSIS-RTOS. | |
| 460 osStatus osMutexWait (osMutexId mutex_id, uint32_t millisec); | |
| 461 | |
| 462 /// Release a Mutex that was obtained by \ref osMutexWait. | |
| 463 /// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate. | |
| 464 /// \return status code that indicates the execution status of the function. | |
| 465 /// \note MUST REMAIN UNCHANGED: \b osMutexRelease shall be consistent in every CMSIS-RTOS. | |
| 466 osStatus osMutexRelease (osMutexId mutex_id); | |
| 467 | |
| 468 /// Delete a Mutex that was created by \ref osMutexCreate. | |
| 469 /// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate. | |
| 470 /// \return status code that indicates the execution status of the function. | |
| 471 /// \note MUST REMAIN UNCHANGED: \b osMutexDelete shall be consistent in every CMSIS-RTOS. | |
| 472 osStatus osMutexDelete (osMutexId mutex_id); | |
| 473 | |
| 474 | |
| 475 // ==== Semaphore Management Functions ==== | |
| 476 | |
| 477 #if (defined (osFeature_Semaphore) && (osFeature_Semaphore != 0)) // Semaphore available | |
| 478 | |
| 479 /// Define a Semaphore object. | |
| 480 /// \param name name of the semaphore object. | |
| 481 /// \note CAN BE CHANGED: The parameter to \b osSemaphoreDef shall be consistent but the | |
| 482 /// macro body is implementation specific in every CMSIS-RTOS. | |
| 483 #if defined (osObjectsExternal) // object is external | |
| 484 #define osSemaphoreDef(name) \ | |
| 485 extern const osSemaphoreDef_t os_semaphore_def_##name | |
| 486 #else // define the object | |
| 487 #define osSemaphoreDef(name) \ | |
| 488 const osSemaphoreDef_t os_semaphore_def_##name = { 0 } | |
| 489 #endif | |
| 490 | |
| 491 /// Access a Semaphore definition. | |
| 492 /// \param name name of the semaphore object. | |
| 493 /// \note CAN BE CHANGED: The parameter to \b osSemaphore shall be consistent but the | |
| 494 /// macro body is implementation specific in every CMSIS-RTOS. | |
| 495 #define osSemaphore(name) \ | |
| 496 &os_semaphore_def_##name | |
| 497 | |
| 498 /// Create and Initialize a Semaphore object used for managing resources. | |
| 499 /// \param[in] semaphore_def semaphore definition referenced with \ref osSemaphore. | |
| 500 /// \param[in] count number of available resources. | |
| 501 /// \return semaphore ID for reference by other functions or NULL in case of error. | |
| 502 /// \note MUST REMAIN UNCHANGED: \b osSemaphoreCreate shall be consistent in every CMSIS-RTOS. | |
| 503 osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t count); | |
| 504 | |
| 505 /// Wait until a Semaphore token becomes available. | |
| 506 /// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate. | |
| 507 /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. | |
| 508 /// \return number of available tokens, or -1 in case of incorrect parameters. | |
| 509 /// \note MUST REMAIN UNCHANGED: \b osSemaphoreWait shall be consistent in every CMSIS-RTOS. | |
| 510 int32_t osSemaphoreWait (osSemaphoreId semaphore_id, uint32_t millisec); | |
| 511 | |
| 512 /// Release a Semaphore token. | |
| 513 /// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate. | |
| 514 /// \return status code that indicates the execution status of the function. | |
| 515 /// \note MUST REMAIN UNCHANGED: \b osSemaphoreRelease shall be consistent in every CMSIS-RTOS. | |
| 516 osStatus osSemaphoreRelease (osSemaphoreId semaphore_id); | |
| 517 | |
| 518 /// Delete a Semaphore that was created by \ref osSemaphoreCreate. | |
| 519 /// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate. | |
| 520 /// \return status code that indicates the execution status of the function. | |
| 521 /// \note MUST REMAIN UNCHANGED: \b osSemaphoreDelete shall be consistent in every CMSIS-RTOS. | |
| 522 osStatus osSemaphoreDelete (osSemaphoreId semaphore_id); | |
| 523 | |
| 524 #endif // Semaphore available | |
| 525 | |
| 526 | |
| 527 // ==== Memory Pool Management Functions ==== | |
| 528 | |
| 529 #if (defined (osFeature_Pool) && (osFeature_Pool != 0)) // Memory Pool Management available | |
| 530 | |
| 531 /// \brief Define a Memory Pool. | |
| 532 /// \param name name of the memory pool. | |
| 533 /// \param no maximum number of blocks (objects) in the memory pool. | |
| 534 /// \param type data type of a single block (object). | |
| 535 /// \note CAN BE CHANGED: The parameter to \b osPoolDef shall be consistent but the | |
| 536 /// macro body is implementation specific in every CMSIS-RTOS. | |
| 537 #if defined (osObjectsExternal) // object is external | |
| 538 #define osPoolDef(name, no, type) \ | |
| 539 extern const osPoolDef_t os_pool_def_##name | |
| 540 #else // define the object | |
| 541 #define osPoolDef(name, no, type) \ | |
| 542 const osPoolDef_t os_pool_def_##name = \ | |
| 543 { (no), sizeof(type), NULL } | |
| 544 #endif | |
| 545 | |
| 546 /// \brief Access a Memory Pool definition. | |
| 547 /// \param name name of the memory pool | |
| 548 /// \note CAN BE CHANGED: The parameter to \b osPool shall be consistent but the | |
| 549 /// macro body is implementation specific in every CMSIS-RTOS. | |
| 550 #define osPool(name) \ | |
| 551 &os_pool_def_##name | |
| 552 | |
| 553 /// Create and Initialize a memory pool. | |
| 554 /// \param[in] pool_def memory pool definition referenced with \ref osPool. | |
| 555 /// \return memory pool ID for reference by other functions or NULL in case of error. | |
| 556 /// \note MUST REMAIN UNCHANGED: \b osPoolCreate shall be consistent in every CMSIS-RTOS. | |
| 557 osPoolId osPoolCreate (const osPoolDef_t *pool_def); | |
| 558 | |
| 559 /// Allocate a memory block from a memory pool. | |
| 560 /// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate. | |
| 561 /// \return address of the allocated memory block or NULL in case of no memory available. | |
| 562 /// \note MUST REMAIN UNCHANGED: \b osPoolAlloc shall be consistent in every CMSIS-RTOS. | |
| 563 void *osPoolAlloc (osPoolId pool_id); | |
| 564 | |
| 565 /// Allocate a memory block from a memory pool and set memory block to zero. | |
| 566 /// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate. | |
| 567 /// \return address of the allocated memory block or NULL in case of no memory available. | |
| 568 /// \note MUST REMAIN UNCHANGED: \b osPoolCAlloc shall be consistent in every CMSIS-RTOS. | |
| 569 void *osPoolCAlloc (osPoolId pool_id); | |
| 570 | |
| 571 /// Return an allocated memory block back to a specific memory pool. | |
| 572 /// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate. | |
| 573 /// \param[in] block address of the allocated memory block that is returned to the memory pool. | |
| 574 /// \return status code that indicates the execution status of the function. | |
| 575 /// \note MUST REMAIN UNCHANGED: \b osPoolFree shall be consistent in every CMSIS-RTOS. | |
| 576 osStatus osPoolFree (osPoolId pool_id, void *block); | |
| 577 | |
| 578 #endif // Memory Pool Management available | |
| 579 | |
| 580 | |
| 581 // ==== Message Queue Management Functions ==== | |
| 582 | |
| 583 #if (defined (osFeature_MessageQ) && (osFeature_MessageQ != 0)) // Message Queues available | |
| 584 | |
| 585 /// \brief Create a Message Queue Definition. | |
| 586 /// \param name name of the queue. | |
| 587 /// \param queue_sz maximum number of messages in the queue. | |
| 588 /// \param type data type of a single message element (for debugger). | |
| 589 /// \note CAN BE CHANGED: The parameter to \b osMessageQDef shall be consistent but the | |
| 590 /// macro body is implementation specific in every CMSIS-RTOS. | |
| 591 #if defined (osObjectsExternal) // object is external | |
| 592 #define osMessageQDef(name, queue_sz, type) \ | |
| 593 extern const osMessageQDef_t os_messageQ_def_##name | |
| 594 #else // define the object | |
| 595 #define osMessageQDef(name, queue_sz, type) \ | |
| 596 const osMessageQDef_t os_messageQ_def_##name = \ | |
| 597 { (queue_sz), sizeof (type) } | |
| 598 #endif | |
| 599 | |
| 600 /// \brief Access a Message Queue Definition. | |
| 601 /// \param name name of the queue | |
| 602 /// \note CAN BE CHANGED: The parameter to \b osMessageQ shall be consistent but the | |
| 603 /// macro body is implementation specific in every CMSIS-RTOS. | |
| 604 #define osMessageQ(name) \ | |
| 605 &os_messageQ_def_##name | |
| 606 | |
| 607 /// Create and Initialize a Message Queue. | |
| 608 /// \param[in] queue_def queue definition referenced with \ref osMessageQ. | |
| 609 /// \param[in] thread_id thread ID (obtained by \ref osThreadCreate or \ref osThreadGetId) or NULL. | |
| 610 /// \return message queue ID for reference by other functions or NULL in case of error. | |
| 611 /// \note MUST REMAIN UNCHANGED: \b osMessageCreate shall be consistent in every CMSIS-RTOS. | |
| 612 osMessageQId osMessageCreate (const osMessageQDef_t *queue_def, osThreadId thread_id); | |
| 613 | |
| 614 /// Put a Message to a Queue. | |
| 615 /// \param[in] queue_id message queue ID obtained with \ref osMessageCreate. | |
| 616 /// \param[in] info message information. | |
| 617 /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. | |
| 618 /// \return status code that indicates the execution status of the function. | |
| 619 /// \note MUST REMAIN UNCHANGED: \b osMessagePut shall be consistent in every CMSIS-RTOS. | |
| 620 osStatus osMessagePut (osMessageQId queue_id, uint32_t info, uint32_t millisec); | |
| 621 | |
| 622 /// Get a Message or Wait for a Message from a Queue. | |
| 623 /// \param[in] queue_id message queue ID obtained with \ref osMessageCreate. | |
| 624 /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out. | |
| 625 /// \return event information that includes status code. | |
| 626 /// \note MUST REMAIN UNCHANGED: \b osMessageGet shall be consistent in every CMSIS-RTOS. | |
| 627 osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec); | |
| 628 | |
| 629 #endif // Message Queues available | |
| 630 | |
| 631 | |
| 632 // ==== Mail Queue Management Functions ==== | |
| 633 | |
| 634 #if (defined (osFeature_MailQ) && (osFeature_MailQ != 0)) // Mail Queues available | |
| 635 | |
| 636 /// \brief Create a Mail Queue Definition. | |
| 637 /// \param name name of the queue | |
| 638 /// \param queue_sz maximum number of messages in queue | |
| 639 /// \param type data type of a single message element | |
| 640 /// \note CAN BE CHANGED: The parameter to \b osMailQDef shall be consistent but the | |
| 641 /// macro body is implementation specific in every CMSIS-RTOS. | |
| 642 #if defined (osObjectsExternal) // object is external | |
| 643 #define osMailQDef(name, queue_sz, type) \ | |
| 644 extern const osMailQDef_t os_mailQ_def_##name | |
| 645 #else // define the object | |
| 646 #define osMailQDef(name, queue_sz, type) \ | |
| 647 const osMailQDef_t os_mailQ_def_##name = \ | |
| 648 { (queue_sz), sizeof (type) } | |
| 649 #endif | |
| 650 | |
| 651 /// \brief Access a Mail Queue Definition. | |
| 652 /// \param name name of the queue | |
| 653 /// \note CAN BE CHANGED: The parameter to \b osMailQ shall be consistent but the | |
| 654 /// macro body is implementation specific in every CMSIS-RTOS. | |
| 655 #define osMailQ(name) \ | |
| 656 &os_mailQ_def_##name | |
| 657 | |
| 658 /// Create and Initialize mail queue. | |
| 659 /// \param[in] queue_def reference to the mail queue definition obtain with \ref osMailQ | |
| 660 /// \param[in] thread_id thread ID (obtained by \ref osThreadCreate or \ref osThreadGetId) or NULL. | |
| 661 /// \return mail queue ID for reference by other functions or NULL in case of error. | |
| 662 /// \note MUST REMAIN UNCHANGED: \b osMailCreate shall be consistent in every CMSIS-RTOS. | |
| 663 osMailQId osMailCreate (const osMailQDef_t *queue_def, osThreadId thread_id); | |
| 664 | |
| 665 /// Allocate a memory block from a mail. | |
| 666 /// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. | |
| 667 /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out | |
| 668 /// \return pointer to memory block that can be filled with mail or NULL in case of error. | |
| 669 /// \note MUST REMAIN UNCHANGED: \b osMailAlloc shall be consistent in every CMSIS-RTOS. | |
| 670 void *osMailAlloc (osMailQId queue_id, uint32_t millisec); | |
| 671 | |
| 672 /// Allocate a memory block from a mail and set memory block to zero. | |
| 673 /// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. | |
| 674 /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out | |
| 675 /// \return pointer to memory block that can be filled with mail or NULL in case of error. | |
| 676 /// \note MUST REMAIN UNCHANGED: \b osMailCAlloc shall be consistent in every CMSIS-RTOS. | |
| 677 void *osMailCAlloc (osMailQId queue_id, uint32_t millisec); | |
| 678 | |
| 679 /// Put a mail to a queue. | |
| 680 /// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. | |
| 681 /// \param[in] mail memory block previously allocated with \ref osMailAlloc or \ref osMailCAlloc. | |
| 682 /// \return status code that indicates the execution status of the function. | |
| 683 /// \note MUST REMAIN UNCHANGED: \b osMailPut shall be consistent in every CMSIS-RTOS. | |
| 684 osStatus osMailPut (osMailQId queue_id, void *mail); | |
| 685 | |
| 686 /// Get a mail from a queue. | |
| 687 /// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. | |
| 688 /// \param[in] millisec \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out | |
| 689 /// \return event that contains mail information or error code. | |
| 690 /// \note MUST REMAIN UNCHANGED: \b osMailGet shall be consistent in every CMSIS-RTOS. | |
| 691 osEvent osMailGet (osMailQId queue_id, uint32_t millisec); | |
| 692 | |
| 693 /// Free a memory block from a mail. | |
| 694 /// \param[in] queue_id mail queue ID obtained with \ref osMailCreate. | |
| 695 /// \param[in] mail pointer to the memory block that was obtained with \ref osMailGet. | |
| 696 /// \return status code that indicates the execution status of the function. | |
| 697 /// \note MUST REMAIN UNCHANGED: \b osMailFree shall be consistent in every CMSIS-RTOS. | |
| 698 osStatus osMailFree (osMailQId queue_id, void *mail); | |
| 699 | |
| 700 #endif // Mail Queues available | |
| 701 | |
| 702 | |
| 703 #ifdef __cplusplus | |
| 704 } | |
| 705 #endif | |
| 706 | |
| 707 #endif // _CMSIS_OS_H |
