📄 os_core.h
字号:
#ifndef __OS_CORE_H__
#define __OS_CORE_H__
#define No_Exist 0x00
#define Exist 0x01
//最大任务数
#define TASK_NUM 5
#define MAX_SEM 1 //信号量数
#define K_SIG 1 /* 等待信号 */
#define K_TMO 2 /* 等待超时 */
#define NOT_OK 255 /* 参数错误 */
#define TMO_EVENT 8 /* 超时到 */
#define SIG_EVENT 4 /* 有信号 */
#define SEM_TMO 3
#define SEM_OK 6
#define Q_TMO 5
#define Q_OK 10
#define EN_TIMER_SHARING 1
#if EN_TIMER_SHARING == 0
#define TIME_ISR_TASK_ID TASK_NUM-1 /* 定义系统定时器软中断触发的任务ID */
#endif
typedef unsigned char uint8; /* 定义可移植的无符号8位整数关键字 */
typedef signed char int8; /* 定义可移植的有符号8位整数关键字 */
typedef unsigned int uint16; /* 定义可移植的无符号16位整数关键字 */
typedef signed int int16; /* 定义可移植的有符号16位整数关键字 */
typedef unsigned long uint32; /* 定义可移植的无符号32位整数关键字 */
typedef signed long int32; /* 定义可移植的有符号32位整数关键字 */
//程序控制块结构
typedef struct
{
uint8 Task_SP; //任务堆栈指针
uint8 Prio; //优先级,值越小,优先级越高
uint8 Status; //任务状态
uint8 Delay; //延迟时钟节拍数
void *msg;
}TCB;
extern uint8 code OSMapTbl[];
extern TCB OS_TCB[TASK_NUM];
extern uint8 OS_Current_ID;
extern uint8 OS_TaskRdy_List;
extern uint8 OS_En_Cr_Count;
extern uint8 Task_Int_List;
extern uint8 Int_count ;
void OS_Init(void);
void OS_Task_Create(uint8 Task_Prio,uint8 Task_ID, uint16 Task_PC,uint8 Stack_Bottom)reentrant ;
void OS_Start(void);
void OS_TimeTick(void);
void OS_Find_Next_Task(void);
void OSTaskSuspend(uint8 TaskId) ;
uint8 OSWait(uint8 typ, uint8 ticks);
void OSSendSignal(uint8 TaskId);
void OSClearSignal(uint8 TaskId) ;
#define OS_ENTER_CRITICAL() EA=0;OS_En_Cr_Count++; /*进入临界段*/
#define OS_EXIT_CRITICAL() if(OS_En_Cr_Count>=1){OS_En_Cr_Count--;if(OS_En_Cr_Count==0)EA=1;} /*退出临界段*/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -