📄 os_api.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 + -