亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? os.h

?? Small RTOS 移植到AVR下用IAR編譯的
?? H
字號:
/*********************************************************************************************************
**                                        Small RTOS
**                                   The Real-Time Kernel
**                           (c) Copyright 2002-2003, chenmingji
**                                     All Rights Reserved
**                                         V1.50.0
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: OS.h
**創   建   人: 陳明計
**最后修改日期: 2005年6月10日
**描      述: Small RTOS C語言頭文件,定義一些宏和聲明一些函數和變量
**
**--------------歷史版本信息----------------------------------------------------------------------------
** 創建人: 陳明計
** 版  本: V1.50.0 內部測試版
** 日 期: 2005年6月10日
** 描 述: 基本完成全新的Small RTOS核
**
**--------------當前版本修訂------------------------------------------------------------------------------
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#ifndef __RT_OS_H
#define __RT_OS_H

    #ifdef __cplusplus
    extern "C" {
    #endif


#define  OS_VERSION    150                              /* 系統版本號   */

/*********************************************************************************************************
**                            定義函數返回值
********************************************************************************************************/
#define OS_NO_ERR                 0             /* 結果正確         */
#define OS_ERR_EVENT_TYPE         1             /* 錯誤事件類型     */
#define OS_ERR_PEND_ISR           2             /* 在IRS中等待事件  */
#define OS_ERR_POST_NULL_PTR      3             /* 發送消息指針為空 */
#define OS_ERR_PEVENT_NULL        4             /* 事件指針為空     */


#define OS_TASK_DEL_ISR          10             /* 在ISR中刪除任務  */
#define OS_PRIO_INVALID          11             /* 錯誤的任務優先級 */
#define OS_TASKID_INVALID        12             /* 錯誤的任務ID     */

#define OS_TIMEOUT               20             /* 超時             */

#define OS_MSG_EMPTY             30             /* 消息空           */
#define OS_MSG_SEND_ERR          31             /* 消息發送錯誤     */

#define OS_EVENT_DEL             40             /* 事件被刪除       */

#define OS_Q_FULL                50             /* 消息隊列滿       */

#define OS_SEM_OVF               60             /* 信號量滿         */
	
/*********************************************************************************************************
**                            定義其它
********************************************************************************************************/
#define BASE_FIFO               1           /* 等待事件模式為FIFO       */
#define BASE_PRIO               2           /* 等待事件模式為基于優先級 */

#if OS_MAX_TASKS < 255
typedef uint8  TASK_ID;
#define  OS_ID_SELF             0xff
#else
    #if OS_MAX_TASKS < 65535
typedef uint16  TASK_ID;
#define  OS_ID_SELF             0xffff
    #else
typedef uint32  TASK_ID;
#define  OS_ID_SELF             0xffffffff
    #endif
#endif


#define OS_STAT_SUSPEND     (1 << 0)    /* 任務掛起         */
#define OS_STAT_DLY         (1 << 1)    /* 等待超時         */
#define OS_STAT_EVENT       (1 << 2)    /* 等待事件         */
#define OS_STAT_MSG         (1 << 3)    /* 等待消息         */
#define OS_STAT_MSG_SENGED  (1 << 4)    /* 等待消息發送完畢 */
#define OS_STAT_MSG_BACK    (1 << 5)    /* 等待消息回應     */
#define OS_STAT_DEBUG       (1 << 6)    /* 正在調試狀態     */
#define OS_STAT_DEATH       (1 << 7)    /* 任務死亡         */

#define OS_INFO_RESUME      (1 << 0)    /* 任務已恢復       */
#define OS_INFO_DLY         (1 << 1)    /* 任務延時完成     */
#define OS_INFO_EVENT       (1 << 2)    /* 任務得到事件     */
#define OS_INFO_MSG         (1 << 3)    /* 任務得到消息     */
#define OS_INFO_MSG_SENGED  (1 << 4)    /* 任務發送消息完畢 */
#define OS_INFO_MSG_BACK    (1 << 5)    /* 任務得到消息反饋 */


#define OS_EVENT_SEM        0x01
#define OS_EVENT_Q          0x02

/*********************************************************************************************************
**                            定義數據結構
********************************************************************************************************/
typedef struct os_tcb
{
    OS_STK          *OSTCBStkPtr;                       /* 任務當前堆棧 */

    uint8           OSTCBStat;                          /* 任務狀態 */
    uint8           OSTCBPrio;                          /* 任務優先級 */
    uint16          OSTCBDly;                           /* 任務延時、超時時間 */
    TASK_ID         OSTCBId;                            /* 任務ID */
    uint8           OSTCBInfo;                          /* 任務優先級 */

    struct os_tcb   *TcbNext;                           /* 任務鏈表用 */
    struct os_tcb   *TcbPrev;                           /* 任務鏈表用 */

#if OS_MAX_EVENTS > 0
    struct os_tcb   *EventNext;                         /* 等待事件鏈表用 */
    struct os_tcb   *EventPrev;                         /* 等待事件鏈表用 */
#endif

#if EN_OS_MSG > 0
    void            *Msg;                               /* 給另一個任務發送的消息 */
    struct os_tcb   *MsgHard;                           /* 給自身消息的任務鏈表的表頭 */
    struct os_tcb   *MsgEnd;                            /* 給自身消息的任務鏈表的表尾 */
    struct os_tcb   *MsgNext;                           /* 給那個任務發送消息的所有任務組成的鏈表  */
    struct os_tcb   *MsgPrev;                           /* 給那個任務發送消息的所有任務組成的鏈表  */
#endif
} OS_TCB;


typedef struct os_tcb_prio                              /* 優先級控制塊 */
 {
    uint16      OSTCBDly;                               /* 此優先級延時節拍數 */
    uint16      OSTCBDlyReload;                         /* 此優先級延輪詢調度節拍數 */
    OS_TCB      *TcbNext;                               /* 此優先級就緒任務鏈表 */
} OS_TCB_PRIO;


#if OS_MAX_EVENTS > 0

struct _OS_EVENT;

typedef struct _OS_Q                                    /* 消息隊列 */
{
    void                **Out;                          /* 指向消息輸出位置         */
    void                **In;                           /* 指向消息輸入位置         */
    void                **End;                          /* 指向Buf的結束位置        */
    uint16              NData;                          /* 隊列中數據個數           */
    uint16              MaxData;                        /* 隊列中允許存儲的數據個數 */

    void                *Buf[1];                        /* 存儲數據的空間           */
} OS_Q;


typedef union
{
    uint16              Cnt;                            /* 信號量計數      */
    void                *OSQPtr;                        /* 消息指針        */
    struct _OS_EVENT    *EventNext;                     /* 空閑事件鏈表用  */
} EVENT_DATA;


typedef struct _OS_EVENT                                /* 事件控制塊 */
{
    uint8       OSEventType;                            /* 事件類型 */
    OS_TCB      *WaitingTcb;                            /* 等待此事件的任務鏈表 */
    /* 改為WaitingTcbHard */
    OS_TCB      *WaitingTcbEnd;                         /* 等待此事件的任務鏈表鏈尾 */
    EVENT_DATA  EventData;                              /* 事件指針 */
} OS_EVENT;

#endif

/*********************************************************************************************************
**                            OS_CORE.c
********************************************************************************************************/
#ifndef IN_OS_CORE

extern OS_TCB_PRIO  OSTCBPrioTbl[OS_LOWEST_PRIO +1];/* 優先級                   */
extern OS_TCB       OSTCBTbl[OS_MAX_TASKS + 1];     /* 任務控制塊               */
extern OS_TCB       *OSTCBCur;                      /* 當前任務控制塊           */
extern OS_TCB       *OSTCBHighRdy;                  /* 新任務控制塊             */
extern uint8        const OSMapTbl[];
extern uint8        OsEnterSum;                     /* 關中斷嵌套層次           */
extern uint8        OSIntNesting;                   /* 中斷嵌套層次             */
extern uint8        OSHighPrio;                     /* 就緒的任務的最高優先級   */

#if OS_TASK_STAT_EN > 0
extern						int8    	OSCPUUsage; 	
extern	__flash	const   	fp32		OSIdleCtrMax;
extern			volatile	fp32		OSIdleCtr;	/* 供調使用 統計CPU使用率	*/			
#endif

extern uint16 OSVersion(void);
extern uint8 OSInit(void);
extern uint8 OSFindNextRunningTask(void);
extern void  OSIntEnter(void);
extern uint8 OSIntExit(void);
extern uint8 OSSched(void);
extern uint8 OSTimeTick(void);
extern uint8 OSSetRoundTick(uint8 Prio, uint16 Ticks);
#if OS_TASK_STAT_EN > 0
extern void  OSCPUStat(void);
#endif

#endif

/*********************************************************************************************************
**                            OS_TIME.c
********************************************************************************************************/
#ifndef IN_OS_TIME

extern OS_TCB       *OSTCBTimeDly;                  /* 超時延時任務鏈表     */
extern uint16       OSTickCnt;                      /* 當前計數初值         */
extern uint16       OSTickThisCnt;                  /* 當前計數剩余值       */

extern uint8 OSTimeTick(void);
extern uint8 OS_TimeDly(uint16 ticks);
extern uint8 OSTimeDly(uint16 ticks);
extern uint8 OSTimeDlyResume(TASK_ID TaskID);
extern uint8 OS_TimeTick(void);
extern uint8 OS_TimeTickDel(OS_TCB *Tcb);

#endif
/*********************************************************************************************************
**                            OS_TASK.c
********************************************************************************************************/
#ifndef IN_OS_TASK

extern uint8		OSTaskStkSize;
extern uint8		OSTaskStkSizeHard;

extern uint8 _OS_TaskResume(OS_TCB *Tcb);
extern uint8 OS_TaskResume(TASK_ID TaskID);
extern uint8 _OS_TaskSuspend(OS_TCB *Tcb);
extern uint8 OSTaskCreate(void   (*Task)(void *Pd),
                          void    *Pdata,
                          OS_STK  *Ptos,
                          uint8    Prio,
                          TASK_ID  TaskId,
                          uint32   StkSize,
                          int      PSR,
                          uint8    TaskStat);
extern uint8 OSTaskDel(TASK_ID TaskID);
extern uint8 OSTaskResume(TASK_ID TaskID);
extern uint8 OSTaskSuspend(TASK_ID TaskID);
extern uint8 OSTaskChangePrio(TASK_ID TaskID, uint8 NewPrio);

#endif

/*********************************************************************************************************
**                            OS_MSG.c
********************************************************************************************************/
#ifndef IN_OS_MSG
extern void * OSMsgPend(uint8 Tick, TASK_ID *TaskId, uint8 *err);
extern void * OSMsgAccept(TASK_ID *TaskId, uint8 *err);
extern uint8 OSMsgPost(TASK_ID TaskId, void *Msg);
extern uint8  OSMsgPostFront(TASK_ID TaskId, void * Msg);
extern uint32 OSMsgNMsgs(TASK_ID TaskId);
extern void OSMsgFlush (TASK_ID TaskId);
extern uint8 OSMsgDel (TASK_ID TaskId);
extern uint8 OSMsgSended (uint16 Tick);
extern void * OSMsgBackPend (uint16 Tick, uint8 *err);
extern void * OSMsgBackAccept (uint8 *err);
extern uint8 OSMsgBackPost (TASK_ID TaskId, void *Msg);
#endif

/*********************************************************************************************************
**                            OS_EVENT.c
********************************************************************************************************/

#ifndef IN_OS_EVENT
extern uint8 OSEventinit(void);
extern OS_EVENT * OSEventNew (void);
extern uint8 OSEventResume(OS_EVENT *pEvent);
extern uint8 OSEventFree (OS_EVENT *pEvent);
extern uint8 OSEventWait (OS_EVENT *pEvent, uint8 Tick);
#endif

/*********************************************************************************************************
**                            OS_SEM.c
********************************************************************************************************/

#ifndef IN_OS_SEM
extern OS_EVENT * OSSemCreate(uint16 Data);
extern uint8 OSSemPend(OS_EVENT * pEvent, uint16 Tick);
extern uint16 OSSemAccept(OS_EVENT * pEvent);
extern uint8 OSSemPost(OS_EVENT * pEvent);
extern uint8 OSSemQuery(OS_EVENT * pEvent, uint16 *Cnt);
extern uint8 OSSemDel(OS_EVENT * pEvent);
#endif


/*********************************************************************************************************
**                            OS_Q.c
********************************************************************************************************/

#ifndef IN_OS_Q
extern OS_EVENT * OSQCreate(void *Buf, uint8 SizeOfBuf);
extern void * OSQPend(OS_EVENT * pEvent, uint16 Tick, uint8 *err);
extern void * OSQAccept(OS_EVENT * pEvent);
extern uint8 OSQPost(OS_EVENT * pEvent, void *Msg);
extern uint8 OSQPostFront(OS_EVENT * pEvent, void *Msg);
extern uint16 OSQNMsgs(OS_EVENT * pEvent);
extern uint16 OSQSize(OS_EVENT * pEvent);
extern void OSQFlush (OS_EVENT * pEvent);

#endif

/*********************************************************************************************************
**                            OS_CPU_C.c
********************************************************************************************************/
#ifndef IN_OS_CPU_C
extern OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, uint16 PSR);
#endif

    #ifdef __cplusplus
    }
    #endif

#endif
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美福利电影网| 中文字幕一区二区在线播放| 国产精品免费视频一区| 欧美撒尿777hd撒尿| 大尺度一区二区| 亚洲国产一区二区三区| 久久久99精品免费观看| 欧美一区欧美二区| 欧美色爱综合网| 99国产麻豆精品| 国产成人免费在线| 国产一区在线看| 国产在线国偷精品产拍免费yy | 日本欧美肥老太交大片| 一区二区久久久久久| 国产一区二区看久久| 久久99精品久久久久久久久久久久| 偷拍日韩校园综合在线| 亚洲一区二区三区中文字幕| 樱桃国产成人精品视频| 一区二区在线观看免费| 亚洲精选免费视频| 亚洲午夜免费视频| 97se亚洲国产综合自在线不卡| 成人免费观看av| 欧美激情综合网| 日韩毛片精品高清免费| 亚洲综合色网站| 色88888久久久久久影院按摩| 欧美日韩免费在线视频| 精品国产三级电影在线观看| 国产日韩欧美在线一区| 亚洲色图20p| 久久精品国产亚洲5555| 成人av高清在线| 91精品国产色综合久久| 国产精品蜜臀av| 日韩精品电影在线观看| 国产91丝袜在线播放九色| 欧美中文字幕一二三区视频| 精品少妇一区二区三区日产乱码| 国产清纯白嫩初高生在线观看91 | 美女视频一区在线观看| av亚洲产国偷v产偷v自拍| 日韩欧美你懂的| 一区二区三区精品| 国产美女av一区二区三区| 色www精品视频在线观看| 精品国产不卡一区二区三区| 一区二区三区四区五区视频在线观看 | 日本系列欧美系列| 97国产精品videossex| 精品国产免费人成电影在线观看四季| 亚洲天堂av一区| 福利一区福利二区| 久久久久国产精品厨房| 久久国产精品免费| 欧美老女人在线| 亚洲国产美女搞黄色| 欧洲生活片亚洲生活在线观看| 国产欧美视频一区二区三区| 国产真实精品久久二三区| 777欧美精品| 日本欧美久久久久免费播放网| 欧美伊人久久久久久久久影院| 亚洲精品国产第一综合99久久| 国v精品久久久网| 国产日韩欧美综合一区| 成人app网站| 一区二区三区四区在线播放 | 成人性色生活片| 蜜臀a∨国产成人精品| 欧美成人三级在线| 国产一区美女在线| 国产精品无遮挡| 91蜜桃在线观看| 香蕉乱码成人久久天堂爱免费| 欧美日本在线一区| 蜜桃av一区二区三区| 久久久精品欧美丰满| 91免费在线播放| 日韩二区在线观看| 久久精品免视看| 欧美影视一区在线| 国产一本一道久久香蕉| 国产精品久久久久久久久快鸭| 91久久免费观看| 精品影视av免费| 亚洲欧美国产77777| 精品国产乱码91久久久久久网站| 国产成人免费在线| 视频一区二区欧美| 中文字幕一区二区三区视频| 亚洲欧洲精品天堂一级 | 日韩三级伦理片妻子的秘密按摩| 国产精品一区2区| 午夜电影网一区| **性色生活片久久毛片| 久久久五月婷婷| 欧美精品久久99久久在免费线| 国产ts人妖一区二区| 午夜在线成人av| 成人免费在线播放视频| 国产无人区一区二区三区| 欧美日韩亚洲综合一区| 91无套直看片红桃| 国产精品资源在线| 国内成人精品2018免费看| 午夜成人免费视频| 亚洲视频在线一区| 国产欧美日韩在线| 久久久美女艺术照精彩视频福利播放| 欧美日韩三级一区| 在线免费一区三区| 欧美在线免费观看亚洲| 91极品美女在线| 欧美曰成人黄网| 欧美中文字幕一区二区三区| 在线免费视频一区二区| 日本道色综合久久| 欧美日韩国产大片| 91精品国产综合久久久久| 欧美精品久久99| 精品国产第一区二区三区观看体验| 日韩欧美国产一区二区在线播放 | 欧洲国内综合视频| 欧美午夜精品一区二区蜜桃| 欧美影院一区二区三区| 日本午夜精品一区二区三区电影| 国产高清在线观看免费不卡| 日韩不卡手机在线v区| 麻豆精品国产91久久久久久| 久久精品国产999大香线蕉| 国内精品伊人久久久久av一坑| 国产成人综合亚洲网站| 99久久婷婷国产综合精品电影 | 国产在线播放一区三区四| 黄网站免费久久| 在线观看亚洲一区| 精品国产一区二区精华| 亚洲蜜臀av乱码久久精品| 日本一区中文字幕 | 日韩欧美国产午夜精品| 国产三级一区二区| 亚洲综合久久久久| 国产成人精品免费网站| 欧美老年两性高潮| 精品在线观看视频| 欧美日韩美女一区二区| 国产亚洲成年网址在线观看| 亚洲激情自拍偷拍| 国产一区二区女| 欧美曰成人黄网| 日韩码欧中文字| 国产一区二区三区免费看| 欧美视频在线一区| 亚洲情趣在线观看| 成人免费精品视频| 欧美激情一区二区三区在线| 精品亚洲成a人在线观看| 欧美日韩在线免费视频| 亚洲女人的天堂| 91亚洲精品久久久蜜桃网站 | 亚洲午夜成aⅴ人片| 99国产一区二区三精品乱码| 中文字幕av一区二区三区| 精品午夜久久福利影院| 日韩免费一区二区| 青青草成人在线观看| 欧美欧美欧美欧美首页| 婷婷丁香激情综合| 欧美精品乱人伦久久久久久| 亚洲成av人影院| 欧美不卡123| 九九**精品视频免费播放| 精品日本一线二线三线不卡| 久草精品在线观看| 国产亚洲成av人在线观看导航| 国产福利电影一区二区三区| 国产欧美日产一区| 91在线视频播放地址| 樱花草国产18久久久久| 欧美综合天天夜夜久久| 热久久一区二区| 久久蜜桃av一区精品变态类天堂 | 欧美一级电影网站| 国产精品一区二区三区四区| 国产欧美一区二区精品忘忧草 | 国产精品一区二区免费不卡| 中国色在线观看另类| 欧美中文字幕一区二区三区| 精品影院一区二区久久久| 国产精品午夜电影| 日韩欧美你懂的| 91丝袜高跟美女视频| 日本不卡视频在线观看| 国产精品久久国产精麻豆99网站| 欧美日本韩国一区二区三区视频| 国产一区二区伦理片| 五月天久久比比资源色|