📄 rtos.h
字号:
#ifndef OS_PTR_TO_VALUE
#define OS_PTR_TO_VALUE(p) (p)
#endif
#ifndef OS_IDLE
#define OS_IDLE() OS_Idle()
#endif
#ifndef OS_PTR_OP_IS_ATOMIC
#define OS_PTR_OP_IS_ATOMIC (0) // Helps to minimize code size and execution time. Some code is not required if setting pointers is an atomic operation (32 bit CPUs or 16 bit CPUs in near model)
#endif
#ifndef OS_SUSPEND_TASK_ON_TERMINATE // Sets the task state of a terminated task to "suspended". Primarily used in the OS simulation, because the windows scheduler might re-activate a suspended task
#define OS_SUSPEND_TASK_ON_TERMINATE (0)
#endif
#ifndef OS_INIT_EXPLICITLY
#define OS_INIT_EXPLICITLY (0) // If enabled, OS_InitKern() initializes Non-Zero globals. Required only for faulty compiler (or startup-code) which do not perform proper init of globals during startup.
#endif
#ifndef OS_TASK_LIST_HAS_PPREV
#define OS_TASK_LIST_HAS_PPREV OS_RR_SUPPORTED
#else
#if (OS_TASK_LIST_HAS_PPREV == 0) && OS_RR_SUPPORTED
#error "Invalid combination of config switches"
#endif
#endif
#ifndef OS_SUPPORT_CALL_ISR
#define OS_SUPPORT_CALL_ISR (1)
#endif
#ifndef OS_PREPARE_STACKPOINTER
#define OS_PREPARE_STACKPOINTER()
#endif
#ifndef OS_SUPPORT_POWER
#define OS_SUPPORT_POWER (1)
#endif
#ifndef OS_POWER_NUM_COUNTERS
#define OS_POWER_NUM_COUNTERS (5)
#endif
/*********************************************************************
*
* Check Compile time switches
*
**********************************************************************
*/
#ifndef OS_SIZEOF_INT
#error "Please define OS_SIZEOF_INT (OSChip.h)"
#endif
#ifndef OS_BIG_ENDIAN
#error "Please define OS_BIG_ENDIAN (OSChip.h)"
#endif
#if (OS_STACK_AT_BOTTOM != 0) && (OS_STACK_AT_BOTTOM != 1)
/*
* Only 0 or 1 is allowed, because OS_STACK_AT_BOTTOM is used for calculations!
*/
#error "OS_STACK_AT_BOTTOM has to be defined to 0 or 1"
#endif
/*********************************************************************
*
* Basic type defines
*
**********************************************************************
*/
#ifndef OS_I8
#define OS_I8 signed char
#endif
#ifndef OS_U8
#define OS_U8 unsigned char
#endif
#ifndef OS_I16
#define OS_I16 signed short
#endif
#ifndef OS_U16
#define OS_U16 unsigned short
#endif
#ifndef OS_I32
#define OS_I32 long
#endif
#ifndef OS_U32
#define OS_U32 unsigned OS_I32
#endif
/* Defines a true integer. This type is guaranteed
a) to have at least 8 bits,
b) to compile and execute best on the target CPU
It will normally be the same as an int, but on most
8-bit CPUs it will be replaced by a character because
the CPU can deal with 8 bits more efficient than with
16 bit integers.
Use with care !
*/
#ifndef OS_INT
#define OS_INT int
#endif
#ifndef OS_UINT
#define OS_UINT unsigned OS_INT
#endif
#ifndef OS_TIME
#define OS_TIME int
#endif
/*********************************************************************
*
* Error codes
*
**********************************************************************
*/
/* User 0..99 ***********************************/
/* Port 100..119 *********************************/
#define OS_ERR_ISR_INDEX (100)
#define OS_ERR_ISR_VECTOR (101)
#define OS_ERR_ISR_PRIO (102)
/* OS generic ************************************/
/* stack overflow or invalid stack */
#define OS_ERR_STACK (120)
/* Counting semaphore overflow */
#define OS_ERR_CSEMA_OVERFLOW (121)
/* Power management module */
#define OS_ERR_POWER_OVER (122)
#define OS_ERR_POWER_UNDER (123)
#define OS_ERR_POWER_INDEX (124)
/* invalid or non-initialized data structures */
#define OS_ERR_INV_TASK (128)
#define OS_ERR_INV_TIMER (129)
#define OS_ERR_INV_MAILBOX (130)
#define OS_ERR_INV_CSEMA (132)
#define OS_ERR_INV_RSEMA (133)
/* Using GetMail1 or PutMail1 or GetMailCond1 or PutMailCond1 on
a non-1 byte mailbox */
#define OS_ERR_MAILBOX_NOT1 (135)
/* Waitable objects deleted with waiting tasks or occupied by task */
#define OS_ERR_MAILBOX_DELETE (136)
#define OS_ERR_CSEMA_DELETE (137)
#define OS_ERR_RSEMA_DELETE (138)
/* internal errors, please contact SEGGER Microcontrollersysteme */
#define OS_ERR_MAILBOX_NOT_IN_LIST (140)
#define OS_ERR_TASKLIST_CORRUPT (142)
/* not matching routine calls or macro usage */
#define OS_ERR_UNUSE_BEFORE_USE (150)
#define OS_ERR_LEAVEREGION_BEFORE_ENTERREGION (151)
#define OS_ERR_LEAVEINT (152)
#define OS_ERR_DICNT (153)
#define OS_ERR_INTERRUPT_DISABLED (154)
#define OS_ERR_TASK_ENDS_WITHOUT_TERMINATE (155)
#define OS_ERR_RESOURCE_OWNER (156)
#define OS_ERR_ILLEGAL_IN_ISR (160) /* not a legal system call during interrupt */
#define OS_ERR_ILLEGAL_IN_TIMER (161) /* not a legal system call during timer */
#define OS_ERR_ILLEGAL_OUT_ISR (162) /* not a legal system call outside interrupt */
#define OS_ERR_NOT_IN_ISR (163) /* OS_EnterInterrupt() has been called, but CPU is not in ISR state */
#define OS_ERR_IN_ISR (164) /* OS_EnterInterrupt() has not been called, but CPU is in ISR state */
#define OS_ERR_INIT_NOT_CALLED (165) /* OS_InitKern() was not called */
/* Double used data structures */
#define OS_ERR_2USE_TASK (170)
#define OS_ERR_2USE_TIMER (171)
#define OS_ERR_2USE_MAILBOX (172)
#define OS_ERR_2USE_BSEMA (173)
#define OS_ERR_2USE_CSEMA (174)
#define OS_ERR_2USE_RSEMA (175)
#define OS_ERR_2USE_MEMF (176)
/* Communication errors (OSCOM) */
#define OS_ERR_NESTED_RX_INT (180)
/* Fixed block memory pool */
#define OS_ERR_MEMF_INV (190)
#define OS_ERR_MEMF_INV_PTR (191)
#define OS_ERR_MEMF_PTR_FREE (192)
#define OS_ERR_MEMF_RELEASE (193)
#define OS_ERR_POOLADDR (194)
#define OS_ERR_BLOCKSIZE (195)
/* Task suspend / resume errors */
#define OS_ERR_SUSPEND_TOO_OFTEN (200)
#define OS_ERR_RESUME_BEFORE_SUSPEND (201)
/* Other task related errors */
#define OS_ERR_TASK_PRIORITY (202)
/* Event object */
#define OS_ERR_EVENT_INVALID (210)
#define OS_ERR_2USE_EVENTOBJ (211)
#define OS_ERR_EVENT_DELETE (212)
/* Waitlist (checked build) */
#define OS_ERR_WAITLIST_RING (220)
#define OS_ERR_WAITLIST_PREV (221)
#define OS_ERR_WAITLIST_NEXT (222)
/* Other potential problems discovered in checked build */
#define OS_ERR_NOT_IN_REGION (225)
/* Cache related */
#define OS_ERR_NON_ALIGNED_INVALIDATE (230)
/* OS special build, or internal */
#define OS_ERR_TRIAL_LIMIT (254)
/*********************************************************************
*
* Trace identifier
*
**********************************************************************
Identifier from 0 to 99 are reserved for the OS
Even when not all of those are currently used,
they may be defined in the future
*/
#define OS_TRACE_ID_DEACTIVATE (1)
#define OS_TRACE_ID_ACTIVATE (2)
#define OS_TRACE_ID_TIMERCALLBACK (3)
/* Task group */
#define OS_TRACE_ID_DELAY (10)
#define OS_TRACE_ID_DELAYUNTIL (11)
#define OS_TRACE_ID_SETPRIORITY (12)
#define OS_TRACE_ID_WAKETASK (13)
#define OS_TRACE_ID_CREATETASK (14)
#define OS_TRACE_ID_TERMINATETASK (15)
#define OS_TRACE_ID_SUSPENDTASK (16)
#define OS_TRACE_ID_RESUMETASK (17)
#define OS_TRACE_ID_CREATETASK_EX (18)
#define OS_TRACE_ID_YIELD (19)
/* Event group */
#define OS_TRACE_ID_WAITEVENT (20)
#define OS_TRACE_ID_WAITEVENT_TIMED (21)
#define OS_TRACE_ID_SIGNALEVENT (22)
#define OS_TRACE_ID_CLEAREVENTS (23)
/* Mailbox group */
#define OS_TRACE_ID_CREATEMB (30)
#define OS_TRACE_ID_CLEARMB (31)
#define OS_TRACE_ID_DELETEMB (32)
#define OS_TRACE_ID_PUTMAIL (33)
#define OS_TRACE_ID_GETMAIL (34)
#define OS_TRACE_ID_PUTMAILCOND (35)
#define OS_TRACE_ID_GETMAILCOND (36)
#define OS_TRACE_ID_PUTMAIL_TIMED (37)
#define OS_TRACE_ID_GETMAIL_TIMED (38)
#define OS_TRACE_ID_WAITMAIL (39)
#define OS_TRACE_ID_PUTMAIL1 (40)
#define OS_TRACE_ID_GETMAIL1 (41)
#define OS_TRACE_ID_PUTMAILCOND1 (42)
#define OS_TRACE_ID_GETMAILCOND1 (43)
#define OS_TRACE_ID_PUTMAIL_TIMED1 (44)
#define OS_TRACE_ID_GETMAIL_TIMED1 (45)
#define OS_TRACE_ID_PUTMAIL_F (46)
#define OS_TRACE_ID_PUTMAIL_F1 (47)
#define OS_TRACE_ID_PUTMAIL_FCOND (48)
#define OS_TRACE_ID_PUTMAIL_FCOND1 (49)
/* Resource group */
#define OS_TRACE_ID_CREATERSEMA (50)
#define OS_TRACE_ID_USE (51)
#define OS_TRACE_ID_UNUSE (52)
#define OS_TRACE_ID_REQUEST (53)
#define OS_TRACE_ID_GETSEMAVALUE (54)
#define OS_TRACE_ID_DELETE_RSEMA (55)
/* Counting Semaphore group */
#define OS_TRACE_ID_CREATECSEMA (60)
#define OS_TRACE_ID_DELETECSEMA (61)
#define OS_TRACE_ID_SIGNALCSEMA (62)
#define OS_TRACE_ID_WAITCSEMA (63)
#define OS_TRACE_ID_WAITCSEMATIMED (64)
#define OS_TRACE_ID_SIGNALCSEMA_MAX (65)
#define OS_TRACE_ID_SET_CSEMAVALUE (66)
#define OS_TRACE_ID_CSEMAREQUEST (67)
/* Timer group */
#define OS_TRACE_ID_CREATETIMER (70)
#define OS_TRACE_ID_DELETETIMER (71)
#define OS_TRACE_ID_STARTTIMER (72)
#define OS_TRACE_ID_STOPTIMER (73)
#define OS_TRACE_ID_RETRIGGERTIMER (74)
#define OS_TRACE_ID_SETTIMERPERIOD (75)
#define OS_TRACE_ID_CREATETIMER_EX (76)
/* Heap type memory management */
#define OS_TRACE_ID_MALLOC (80)
#define OS_TRACE_ID_FREE (81)
#define OS_TRACE_ID_REALLOC (82)
/* Fixed block type memory management */
#define OS_TRACE_ID_MEMF_CREATE (90)
#define OS_TRACE_ID_MEMF_DELETE (91)
#define OS_TRACE_ID_MEMF_ALLOC (92)
/*********************************************************************
*
* Assertions
*
**********************************************************************
Assertions are used to generate code in the debug version
of the OS in order catch programming faults like
bad pointers or uninitialized data structures
*/
#if OS_DEBUG
#define OS_ASSERT(Exp, ErrCode) { if (!(Exp)) OS_Error(ErrCode); }
#else
#define OS_ASSERT(Exp, ErrCode)
#endif
#define OS_ASSERT_INT() OS_ASSERT((OS_InInt != 0), OS_ERR_ILLEGAL_OUT_ISR)
#define OS_ASSERT_NOINT() OS_ASSERT((OS_InInt == 0), OS_ERR_ILLEGAL_IN_ISR)
#define OS_ASSERT_NOTIMER() OS_ASSERT((OS_InTimer == 0), OS_ERR_ILLEGAL_IN_TIMER)
#define OS_ASSERT_DICnt() OS_ASSERT(((OS_DICnt & 0xf0) == 0), OS_ERR_DICNT)
#define OS_ASSERT_INIT_CALLED() OS_ASSERT((OS_InitCalled != 0), OS_ERR_INIT_NOT_CALLED)
/*********************************************************************
*
* Memory attributes
*
**********************************************************************
*/
#ifndef OS_STACKPTR
#define OS_STACKPTR
#endif
#ifndef OS_SADDR
#ifdef SADDR
#define OS_SADDR SADDR
#else
#define OS_SADDR
#endif
#endif
/* pointer modifier for data items */
#ifndef OS_DATAPTR
#define OS_DATAPTR
#endif
#ifndef OS_RSEMAPTR
#define OS_RSEMAPTR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -