145 lines
7.6 KiB
C
145 lines
7.6 KiB
C
#include "stdint.h"
|
|
#include "stddef.h"
|
|
#define osWaitForever 0xFFFFFFFFU ///< Wait forever timeout value.
|
|
|
|
/// Status code values returned by CMSIS-RTOS functions.
|
|
typedef enum {
|
|
osOK = 0, ///< Operation completed successfully.
|
|
osError = -1, ///< Unspecified RTOS error: run-time error but no other error message fits.
|
|
osErrorTimeout = -2, ///< Operation not completed within the timeout period.
|
|
osErrorResource = -3, ///< Resource not available.
|
|
osErrorParameter = -4, ///< Parameter error.
|
|
osErrorNoMemory = -5, ///< System is out of memory: it was impossible to allocate or reserve memory for the operation.
|
|
osErrorISR = -6, ///< Not allowed in ISR context: the function cannot be called from interrupt service routines.
|
|
osStatusReserved = 0x7FFFFFFF ///< Prevents enum down-size compiler optimization.
|
|
} osStatus_t;
|
|
|
|
|
|
/// Priority values.
|
|
typedef enum {
|
|
osPriorityNone = 0, ///< No priority (not initialized).
|
|
osPriorityIdle = 1, ///< Reserved for Idle thread.
|
|
osPriorityLow = 8, ///< Priority: low
|
|
osPriorityLow1 = 8+1, ///< Priority: low + 1
|
|
osPriorityLow2 = 8+2, ///< Priority: low + 2
|
|
osPriorityLow3 = 8+3, ///< Priority: low + 3
|
|
osPriorityLow4 = 8+4, ///< Priority: low + 4
|
|
osPriorityLow5 = 8+5, ///< Priority: low + 5
|
|
osPriorityLow6 = 8+6, ///< Priority: low + 6
|
|
osPriorityLow7 = 8+7, ///< Priority: low + 7
|
|
osPriorityBelowNormal = 16, ///< Priority: below normal
|
|
osPriorityBelowNormal1 = 16+1, ///< Priority: below normal + 1
|
|
osPriorityBelowNormal2 = 16+2, ///< Priority: below normal + 2
|
|
osPriorityBelowNormal3 = 16+3, ///< Priority: below normal + 3
|
|
osPriorityBelowNormal4 = 16+4, ///< Priority: below normal + 4
|
|
osPriorityBelowNormal5 = 16+5, ///< Priority: below normal + 5
|
|
osPriorityBelowNormal6 = 16+6, ///< Priority: below normal + 6
|
|
osPriorityBelowNormal7 = 16+7, ///< Priority: below normal + 7
|
|
osPriorityNormal = 24, ///< Priority: normal
|
|
osPriorityNormal1 = 24+1, ///< Priority: normal + 1
|
|
osPriorityNormal2 = 24+2, ///< Priority: normal + 2
|
|
osPriorityNormal3 = 24+3, ///< Priority: normal + 3
|
|
osPriorityNormal4 = 24+4, ///< Priority: normal + 4
|
|
osPriorityNormal5 = 24+5, ///< Priority: normal + 5
|
|
osPriorityNormal6 = 24+6, ///< Priority: normal + 6
|
|
osPriorityNormal7 = 24+7, ///< Priority: normal + 7
|
|
osPriorityAboveNormal = 32, ///< Priority: above normal
|
|
osPriorityAboveNormal1 = 32+1, ///< Priority: above normal + 1
|
|
osPriorityAboveNormal2 = 32+2, ///< Priority: above normal + 2
|
|
osPriorityAboveNormal3 = 32+3, ///< Priority: above normal + 3
|
|
osPriorityAboveNormal4 = 32+4, ///< Priority: above normal + 4
|
|
osPriorityAboveNormal5 = 32+5, ///< Priority: above normal + 5
|
|
osPriorityAboveNormal6 = 32+6, ///< Priority: above normal + 6
|
|
osPriorityAboveNormal7 = 32+7, ///< Priority: above normal + 7
|
|
osPriorityHigh = 40, ///< Priority: high
|
|
osPriorityHigh1 = 40+1, ///< Priority: high + 1
|
|
osPriorityHigh2 = 40+2, ///< Priority: high + 2
|
|
osPriorityHigh3 = 40+3, ///< Priority: high + 3
|
|
osPriorityHigh4 = 40+4, ///< Priority: high + 4
|
|
osPriorityHigh5 = 40+5, ///< Priority: high + 5
|
|
osPriorityHigh6 = 40+6, ///< Priority: high + 6
|
|
osPriorityHigh7 = 40+7, ///< Priority: high + 7
|
|
osPriorityRealtime = 48, ///< Priority: realtime
|
|
osPriorityRealtime1 = 48+1, ///< Priority: realtime + 1
|
|
osPriorityRealtime2 = 48+2, ///< Priority: realtime + 2
|
|
osPriorityRealtime3 = 48+3, ///< Priority: realtime + 3
|
|
osPriorityRealtime4 = 48+4, ///< Priority: realtime + 4
|
|
osPriorityRealtime5 = 48+5, ///< Priority: realtime + 5
|
|
osPriorityRealtime6 = 48+6, ///< Priority: realtime + 6
|
|
osPriorityRealtime7 = 48+7, ///< Priority: realtime + 7
|
|
osPriorityISR = 56, ///< Reserved for ISR deferred thread.
|
|
osPriorityError = -1, ///< System cannot determine priority or illegal priority.
|
|
osPriorityReserved = 0x7FFFFFFF ///< Prevents enum down-size compiler optimization.
|
|
} osPriority_t;
|
|
|
|
typedef struct {
|
|
const char *name; ///< name of the thread
|
|
uint32_t attr_bits; ///< attribute bits
|
|
void *cb_mem; ///< memory for control block
|
|
uint32_t cb_size; ///< size of provided memory for control block
|
|
void *stack_mem; ///< memory for stack
|
|
uint32_t stack_size; ///< size of stack
|
|
osPriority_t priority; ///< initial thread priority (default: osPriorityNormal)
|
|
uint32_t reserved; ///< reserved (must be 0)
|
|
} osThreadAttr_t;
|
|
|
|
|
|
|
|
/// Attributes structure for message queue.
|
|
typedef struct {
|
|
const char *name; ///< name of the message queue
|
|
uint32_t attr_bits; ///< attribute bits
|
|
void *cb_mem; ///< memory for control block
|
|
uint32_t cb_size; ///< size of provided memory for control block
|
|
void *mq_mem; ///< memory for data storage
|
|
uint32_t mq_size; ///< size of provided memory for data storage
|
|
} osMessageQueueAttr_t;
|
|
|
|
|
|
/// Attributes structure for timer.
|
|
typedef struct {
|
|
const char *name; ///< name of the timer
|
|
uint32_t attr_bits; ///< attribute bits
|
|
void *cb_mem; ///< memory for control block
|
|
uint32_t cb_size; ///< size of provided memory for control block
|
|
} osTimerAttr_t;
|
|
|
|
|
|
/// Timer callback function.
|
|
typedef void (*osTimerFunc_t) (void *argument);
|
|
|
|
typedef void (*osThreadFunc_t) (void *argument);
|
|
typedef void* osMessageQueueId_t;
|
|
typedef void* osThreadId_t;
|
|
typedef void* osTimerId_t;
|
|
void Error_Handler();
|
|
|
|
|
|
/// Timer type.
|
|
typedef enum {
|
|
osTimerOnce = 0, ///< One-shot timer.
|
|
osTimerPeriodic = 1 ///< Repeating timer.
|
|
} osTimerType_t;
|
|
|
|
// Flags options (\ref osThreadFlagsWait and \ref osEventFlagsWait).
|
|
#define osFlagsWaitAny 0x00000000U ///< Wait for any flag (default).
|
|
#define osFlagsWaitAll 0x00000001U ///< Wait for all flags.
|
|
#define osFlagsNoClear 0x00000002U ///< Do not clear flags which have been specified to wait for.
|
|
|
|
|
|
osThreadId_t osThreadNew(osThreadFunc_t func, void *argument, const osThreadAttr_t *attr);
|
|
osStatus_t osMessageQueueGet (osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *msg_prio, uint32_t timeout);
|
|
osStatus_t osMessageQueuePut (osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout);
|
|
osMessageQueueId_t osMessageQueueNew (uint32_t msg_count, uint32_t msg_size, const osMessageQueueAttr_t *attr) ;
|
|
osTimerId_t osTimerNew (osTimerFunc_t func, osTimerType_t type, void *argument, const osTimerAttr_t *attr);
|
|
osStatus_t osTimerStart (osTimerId_t timer_id, uint32_t ticks);
|
|
|
|
uint32_t osThreadFlagsWait (uint32_t flags, uint32_t options, uint32_t timeout);
|
|
uint32_t osThreadFlagsSet (osThreadId_t thread_id, uint32_t flags);
|
|
void osThreadExit (void);
|
|
|
|
|
|
|
|
osStatus_t osDelay (uint32_t ticks);
|
|
uint32_t osKernelGetSysTimerCount (void);
|