⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_core.h

📁 模仿ucos ii和RTX Tiny写的一个小操作系统
💻 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 + -