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

📄 os_core.h.bak

📁 本RTOS参考 usOS-II, ARM-RTX
💻 BAK
字号:
#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;



//任务堆栈初始化
//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 );

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -