📄 os_core.h
字号:
#if !defined( _OS_CORE_H )
#define _OS_CORE_H
typedef U8 OS_TID;
typedef U8 OS_RESULT;
#define OS_VERSION 100 // 系统版本号
#define OSVersion() OS_VERSION // 返回系统版本
#define OSRunningTaskID() OSCurrentTaskID // 返回当前任务ID
//最大任务数
#define OS_MAX_USER_TASKS 4 //用户最大任务数
#define OS_LOWEST_PRIO (OS_MAX_USER_TASKS+1) // Defines the lowest priority that can be assigned
#define OS_MAX_TASKS (OS_MAX_USER_TASKS+1) //系统最大任务数
#define OS_RDY_TBL_SIZE ((OS_LOWEST_PRIO) / 8 + 1) // 准备列表大小
//任务状态;下面是ucOS-II中的定义
#define OS_STAT_RDY 0x00 /* Ready to run */
#define OS_STAT_SEM 0x01 /* Pending on semaphore */
#define OS_STAT_MBOX 0x02 /* Pending on mailbox */
#define OS_STAT_Q 0x04 /* Pending on queue */
#define OS_STAT_SUSPEND 0x08 // Task is suspended
// Values for 'state' 下面 ARM-RTX中的定义,目前用ARM-RTX中的定义
#define INACTIVE 0
#define READY 1
#define RUNNING 2
#define WAIT_DLY 3
#define WAIT_ITV 4
#define WAIT_OR 5
#define WAIT_AND 6
#define WAIT_SEM 7
#define WAIT_MBX 8
#define WAIT_MUT 9
/* Return codes */
#define OS_R_TMO 0x01
#define OS_R_EVT 0x02
#define OS_R_SEM 0x03
#define OS_R_MBX 0x04
#define OS_R_MUT 0x05
#define OS_R_OK 0x00
#define OS_R_NOK 0xff
//下面的定义为了节省空间,在资源多的CPU上可以定义长些
#define STK_SIZE_BIT U8 //堆栈数据长度
#define EVENT_BIT U8 //定义事件数据长度
#define WAIT_BIT U8 //定义等待标志数据长度
typedef struct
{
void ( * pTask )( void ); //函数地址 //void ( code * pTask )( void );
uint16 OSTCBPer; //函数运行间隔时间Period
uint16 OSTCBDly; //函数运行延时
uint8 OSTCBStat; //允许标志,0,空闲,>0 准备好
void* stk; //任务堆栈
STK_SIZE_BIT size; //任务堆栈大小
STK_SIZE_BIT stk_used; //任务堆栈已经使用数量
EVENT_BIT volatile events; //Event flags volatile (changed by ISRs)
//WAIT_BIT waits; //Wait flags
}OS_TCB;
#define tsk_lock() IrqT0_Unable() //任务切换锁定
#define tsk_unlock() IrqT0_Enable() //任务切换解锁
//任务堆栈初始化
//void OSCPUInit(void) SMALL;
//功能描述: 系统变量初始化
void OSInit(void) SMALL;
void os_sys_init( void (*task)(void) );
OS_TID os_tsk_create_user(
void (*task)(void), /* Task to create */
U8 prio, /* Task priority (1-254) */
void* stk, /* Pointer to the task's stack */
STK_SIZE_BIT size ) SMALL; /* Number of bytes in the stack */
//功能描述: 创建任务
uint8 OSTaskCreate(uint16 TaskAddr, uint8 TaskID) SMALL;
//功能描述: 创建任务后,堆栈初始化
//void OSTaskStkInit(uint16 TaskAddr, uint8 TaskID) SMALL;
void OSTaskStkInit(void (*TaskAddr)(void), uint8 TaskID) SMALL;
//功能描述: 系统时钟中断服务函数
void OSTickISR(void);
//功能描述: 中断退出处理函数,在此进行中断后的任务切换
void OSIntExit(void) SMALL;
//功能描述: 系统时钟处理函数,处理各个任务的延时
//任务延时减为0,就进入就绪状态
void OSTimeTick(void) SMALL;
//功能描述: 查找下一个优先级最高的就绪任务
//找到优先级最高的任务立即退出,没找到就绪的任务那么系统就将执行优先级最低
//的系统默认的任务
//系统将要执行的任务号:OSNextTaskID
void OSFindNextRunningTask(void) SMALL;
//功能描述:设置当前运行的任务下次运行时的快速切换标志
//输入:IRQ->是否是中断调用:1:是中断,0:不是中断
void SetTaskLaterFastSwap(uint8 IRQ);
//功能描述:判断将要运行的任务是否需要快速切换
//如果将要运行的任务不是被中断挂起的,就不用恢复所有寄存器
//返回:1:恢复所有寄存器,0:不用恢复所有寄存器
uint8 TestTaskFastSwap(void);
//功能描述: 任务主动放弃CPU环境保存函数
void OS_TASK_SW(void);
void OSTimeDly() SMALL;
/*********************************************************************************************************
** 函数名称: OSTaskSuspend
** 功能描述: 使指定任务休眠,但不进行任务切换
** 输 入: TaskID : 任务ID
** 输 出: 无
** 全局变量: OSWaitTick
********************************************************************************************************/
void OSTaskSuspend(uint8 TaskID) SMALL;
void OSTaskResume (uint8 TaskID) SMALL;
uint8 OSWait(uint8 typ, uint8 ticks) SMALL;
void os_dly_wait( U16 delay_time ) SMALL;
OS_RESULT os_evt_wait_or ( EVENT_BIT wait_flags, U16 timeout );
void os_evt_set ( EVENT_BIT event_flags, OS_TID TaskID );
void isr_evt_set ( EVENT_BIT event_flags, OS_TID TaskID );
void os_itv_wait (void);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -