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

📄 os_api.h

📁 Rabbit 32Bit RTOS源代码
💻 H
字号:
/*********************************************************************
*                  Copyright (c) 2011-2012,李士伟
*                    All rights reserved.
*文 件 名:os_api.h
*描    述:系统API
*当前版本:V1.00
*作    者:李士伟
*创建日期:2011.10.15
**********************************************************************/
#ifndef __OS_API_H__
#define __OS_API_H__

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __TYPEDEF_H__
#define __TYPEDEF_H__
typedef  unsigned char       BOOLEAN;
typedef  unsigned char       boolean;
typedef  unsigned char       INT8U;
typedef  signed   char       INT8S;
typedef  unsigned short      INT16U;
typedef  signed   short      INT16S;
typedef  unsigned int        INT32U;
typedef  signed   int        INT32S;
typedef  float               FP32;
typedef  double              FP64;
typedef  INT32U              OS_STK;   /* 定义栈字类型 */

#define  TRUE                1
#define  false               0
#define  true                1
#define  false               0
#ifndef  NULL
    #define  NULL           (0)
#endif
#endif


#ifndef __FLAG_H__
#define __FLAG_H__

#define OS_ERR                0
#define OS_NO_ERR             1

#define OS_NO_MORE_TCB        3
#define OS_NO_MORE_MEM        4
#define OS_TASK_SELF_ID       0

#define OS_BASE_PRIO          0
#define OS_BASE_BROADCAST     1

#define OS_NO_SEM             0
#define OS_GET_SEM            1

#define OS_OVERTIME           2

#define OS_MSGBOX_INVALID     0
#define OS_MSGBOX_FULL        1
#define OS_MSGBOX_SAVE        2
#define OS_MSGBOX_SEND        3

#define OS_MSGQ_INVALID       0
#define OS_MSGQ_FULL          1
#define OS_MSGQ_SAVE          2
#define OS_MSGQ_SEND          3

#define OS_NO_EVENT           0
#define OS_SET_EVENT          1
#define OS_EVENT_NOT_CAPTURE  2
#define OS_EVENT_SAVE         3
#define OS_EVENT_SEND         4

#define OS_MUTEX_NO_SIG       0
#define OS_MUTEX_SIG          1

#define OS_TICKS_PER_SECOND   50

#endif

#ifndef __KDS_H__
#define __KDS_H__

/*********************************************************************
*结构体名:struct os_tcb  (OS_TCB)
*描    述:任务控制块结构体
**********************************************************************/
typedef struct os_tcb
{
    OS_STK         *StkPtr;        /* 指向栈顶                          */
    OS_STK         *StkBase;       /* 指向栈基址,释放任务栈时使用的指针 */
    
    struct os_tcb  *Next;          /* TCB双向登记链表指针               */
    struct os_tcb  *Prev;  
    
    /* 运行或等待队列 */       
    struct os_tcb **QHead;         /* TCB队列头指针的指针               */
    struct os_tcb  *QNext;         /* TCB队列双向链表指针               */
    struct os_tcb  *QPrev;
    
    INT32U          Delay;         /* 延时节拍                          */
    INT32U          Prio;          /* 任务优先级                        */
    INT32U          TaskID;        /* 任务ID                            */
    INT32U          State;         /* 任务状态                          */
    INT32U          Event;         /* 发生的事件类型                    */
    void           *MsgPtr;        /* 消息指针                          */
    
}OS_TCB;

/*********************************************************************
*结构体名:struct os_timer  (OS_TIMER)
*描    述:定时器结构体
**********************************************************************/
typedef struct os_timer
{
    INT32U           State;          /* 状态 1,暂停;0,运行 */
    INT32U           Counter;        /* 定时器计数器         */
    void           (*Action)(void);  /* 定时动作函数         */
    INT32U           Jiffies;        /* 定时间隙             */
    struct os_timer *Next;           /* 下一个定时器指针     */
    
}OS_TIMER;

/*********************************************************************
*结构体名:struct os_sem  (OS_SEM)
*描    述:信号量结构体
**********************************************************************/
typedef struct os_sem
{
    INT32U  SemCnt;    /* 信号量值         */
    OS_TCB *WaitQ;     /* 等待信号量队列   */

}OS_SEM;

/*********************************************************************
*结构体名:struct os_msg  (OS_MSG)
*描    述:消息邮箱结构体
**********************************************************************/
typedef struct os_msg
{
    void   *MsgPtr;    /* 消息指针     */
    OS_TCB *WaitQ;     /* 等待消息队列 */
    
}OS_MSGBOX;

/*********************************************************************
*结构体名:struct os_event  (OS_EVENT)
*描    述:事件结构体,主要用于设备控制中反馈发生事件类型
*          默认Event == 0 表示没有事件发生
*          用大于0的无符号数表示事件类型
*          系统需严格地将各种不同事件编号,编号与事件是一一对应关系
**********************************************************************/
typedef struct os_event
{
     INT32U  Event;      /* 发生的事件类型 */
     OS_TCB *WaitQ;      /* 等待事件队列   */

}OS_EVENT;

/*********************************************************************
*结构体名:struct os_mutex  (OS_MUTEX)
*描    述:互斥结构体
**********************************************************************/
typedef struct os_mutex
{
    INT32U  Signal;
    OS_TCB *WaitQ;
    
}OS_MUTEX;

/*********************************************************************
*结构体名:struct os_msgq  (OS_MSGQ)
*描    述:消息队列结构体
**********************************************************************/
typedef struct os_msgq
{
    INT32U   QCount;  /* 消息数 */
    void   **QOut;
    void   **QIn;
    void   **QEnd;
    void   **QStart;
    INT32U   QSize;
    OS_TCB  *WaitQ;

}OS_MSGQ;

#endif

#ifndef __MEMORY_H__
#define __MEMORY_H__
/*********************************************************************
*结构体名:struct osmeminf  (OSMEMInf)
*描    述:内存信息结构体
**********************************************************************/
typedef struct osmeminf
{
    INT32U  Usage;      /* 内存使用率           */
    INT32U  TotalSize;  /* 内存总大小           */
    INT32U  FreeSize;   /* 空闲内存大小         */
    INT32U  FreeBlks;   /* 空闲内存块数量       */
    INT32U  UsingBlks;  /* 分配使用的内存块数量 */

}OSMEMInf;
#endif


extern INT32U API_GetOSVerision(void);

extern INT32U API_CreateArmTask(void (*task)(void *pd),void *pdata,
                              INT32U stk_size, INT32U prio);

extern INT32U API_CreateThumbTask(void (*task)(void *pd),void *pdata,
                              INT32U stk_size, INT32U prio);

extern void     API_SwapPrio(INT32U taskID);
extern INT32U   API_FindHighestPrio(void);
extern void     API_DeleteTask(INT32U prio); 
extern INT32U   API_GetTaskID(void);
extern void     API_SuspendTask(INT32U taskID);
extern void     API_ResumeTask(INT32U taskID);

extern void     API_TimeDly(INT32U ticks);
extern void     API_TimeDlyHMSM(INT32U h, INT32U m, INT32U s, INT32U ms);
extern void     API_ResumeDly(INT32U taskID);
extern INT32U   API_GetTicks(void);
extern OS_TIMER  *API_AddTimer(void (*action)(void), INT32U jiffies);
extern void     API_DeleteTimer(OS_TIMER *timer);
extern void     API_ChangeTimerJiffies(OS_TIMER *timer, INT32U jiffies);
extern void     API_ChangeTimerAction(OS_TIMER *timer, void (*action)(void));
extern void     API_StartTimer(OS_TIMER *timer);
extern void     API_PauseTimer(OS_TIMER *timer);
extern INT32U   API_GetCPUUsage(void);

extern void    *malloc(INT32U size);
extern void     free(void *ptr);
extern void     API_GetMemInf(OSMEMInf *pMemInf);

extern void     API_InitSem(OS_SEM *pSem, INT32U SemCnt);
extern void     API_SemPost(OS_SEM *pSem, INT32U AddSem);
extern INT32U   API_SemPend(OS_SEM *pSem, INT32U ticks, INT32U *err);
extern INT32U   API_SemAccept(OS_SEM *pSem);

extern void     API_InitMsgBox(OS_MSGBOX *msgbox, void *msg);
extern void    *API_MsgBoxPend(OS_MSGBOX *msgbox, INT32U timeout, INT32U *err);
extern void    *API_MsgBoxAccept(OS_MSGBOX *msgbox);
extern INT32U   API_MsgBoxPost(OS_MSGBOX *msgbox, void *msg, INT32U method);

extern void     API_InitMutex(OS_MUTEX *pMutex, INT32U sig);
extern INT32U   API_MutexPend(OS_MUTEX *pMutex, INT32U timeout, INT32U *err);
extern void     API_MutexPost(OS_MUTEX *pMutex);
extern INT32U   API_MutexAccept(OS_MUTEX *pMutex);

extern void     API_InitEvent(OS_EVENT *pevent, INT32U event_type);
extern INT32U   API_WaitEvent(OS_EVENT *pevent, INT32U timeout, INT32U *err);
extern INT32U   API_OccurEvent(OS_EVENT *pevent, INT32U event, INT32U method);
extern INT32U   API_AcceptEvent(OS_EVENT *pevent);

extern OS_MSGQ *API_CreateMsgQ(INT32U q_size);
extern INT32U   API_DeleteMsgQ(OS_MSGQ *pq);
extern void    *API_MsgQPend(OS_MSGQ *pq, INT32U timeout, INT32U *err);
extern void    *API_MsgQAccept(OS_MSGQ *pq);
extern INT32U   API_MsgQPost(OS_MSGQ *pq, void *msg, INT32U method);
extern INT32U   API_MsgQPostFront(OS_MSGQ *pq, void *msg, INT32U method);

#ifdef __cplusplus
}
#endif

#endif

⌨️ 快捷键说明

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