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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? commbgnd.c

?? 一些ucos的外圍接口原代碼,如鍵盤LCDLED
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*
*********************************************************************************************************
*                                     Embedded Systems Building Blocks
*                                  Complete and Ready-to-Use Modules in C
*
*                                    Asynchronous Serial Communications
*                                          Buffered Serial I/O
*                                     (Foreground/Background Systems)
*
*                            (c) Copyright 1999, Jean J. Labrosse, Weston, FL
*                                           All Rights Reserved
*
* Filename   : COMMBGND.C
* Programmer : Jean J. Labrosse
*
* Notes      : The functions (actually macros) OS_ENTER_CRITICAL() and OS_EXIT_CRITICAL() are used to
*              disable and enable interrupts, respectively.  If using the Borland C++ compiler V3.1,
*              all you need to do is to define these macros as follows:
*
*                   #define OS_ENTER_CRITICAL()  disable()
*                   #define OS_EXIT_CRITICAL()   enable()
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                               INCLUDES
*********************************************************************************************************
*/

#include "includes.h"

/*$PAGE*/
/*
*********************************************************************************************************
*                                               CONSTANTS
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                               DATA TYPES
*********************************************************************************************************
*/

typedef struct {
    INT16U  RingBufRxCtr;                   /* Number of characters in the Rx ring buffer              */
    INT8U  *RingBufRxInPtr;                 /* Pointer to where next character will be inserted        */
    INT8U  *RingBufRxOutPtr;                /* Pointer from where next character will be extracted     */
    INT8U   RingBufRx[COMM_RX_BUF_SIZE];    /* Ring buffer character storage (Rx)                      */
    INT16U  RingBufTxCtr;                   /* Number of characters in the Tx ring buffer              */
    INT8U  *RingBufTxInPtr;                 /* Pointer to where next character will be inserted        */
    INT8U  *RingBufTxOutPtr;                /* Pointer from where next character will be extracted     */
    INT8U   RingBufTx[COMM_TX_BUF_SIZE];    /* Ring buffer character storage (Tx)                      */
} COMM_RING_BUF;

/*
*********************************************************************************************************
*                                            GLOBAL VARIABLES
*********************************************************************************************************
*/

COMM_RING_BUF  Comm1Buf;
COMM_RING_BUF  Comm2Buf;

/*$PAGE*/
/*
*********************************************************************************************************
*                                    REMOVE CHARACTER FROM RING BUFFER
*
*
* Description : This function is called by your application to obtain a character from the communications
*               channel.
* Arguments   : 'ch'    is the COMM port channel number and can either be:
*                           COMM1
*                           COMM2
*               'err'   is a pointer to where an error code will be placed:
*                           *err is set to COMM_NO_ERR   if a character is available
*                           *err is set to COMM_RX_EMPTY if the Rx buffer is empty
*                           *err is set to COMM_BAD_CH   if you have specified an invalid channel
* Returns     : The character in the buffer (or NUL if the buffer is empty)
*********************************************************************************************************
*/

INT8U  CommGetChar (INT8U ch, INT8U *err)
{
    INT8U          c;
    COMM_RING_BUF *pbuf;


    switch (ch) {                                          /* Obtain pointer to communications channel */
        case COMM1:
             pbuf = &Comm1Buf;
             break;

        case COMM2:
             pbuf = &Comm2Buf;
             break;

        default:
             *err = COMM_BAD_CH;
             return (NUL);
    }
    OS_ENTER_CRITICAL();
    if (pbuf->RingBufRxCtr > 0) {                          /* See if buffer is empty                   */
        pbuf->RingBufRxCtr--;                              /* No, decrement character count            */
        c = *pbuf->RingBufRxOutPtr++;                      /* Get character from buffer                */
        if (pbuf->RingBufRxOutPtr == &pbuf->RingBufRx[COMM_RX_BUF_SIZE]) {     /* Wrap OUT pointer     */
            pbuf->RingBufRxOutPtr = &pbuf->RingBufRx[0];
        }
        OS_EXIT_CRITICAL();
        *err = COMM_NO_ERR;
        return (c);
    } else {
        OS_EXIT_CRITICAL();
        *err = COMM_RX_EMPTY;
        c    = NUL;                                        /* Buffer is empty, return NUL              */
        return (c);
    }
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                  GET TX CHARACTER FROM RING BUFFER
*
*
* Description : This function is called by the Tx ISR to extract the next character from the Tx buffer.
*               The function returns FALSE if the buffer is empty after the character is extracted from
*               the buffer.  This is done to signal the Tx ISR to disable interrupts because this is the
*               last character to send.
* Arguments   : 'ch'    is the COMM port channel number and can either be:
*                           COMM1
*                           COMM2
*               'err'   is a pointer to where an error code will be deposited:
*                           *err is set to COMM_NO_ERR         if at least one character was left in the
*                                                              buffer.
*                           *err is set to COMM_TX_EMPTY       if the Tx buffer is empty.
*                           *err is set to COMM_BAD_CH         if you have specified an incorrect channel
* Returns     : The next character in the Tx buffer or NUL if the buffer is empty.
*********************************************************************************************************
*/

INT8U  CommGetTxChar (INT8U ch, INT8U *err)
{
    INT8U          c;
    COMM_RING_BUF *pbuf;


    switch (ch) {                                          /* Obtain pointer to communications channel */
        case COMM1:
             pbuf = &Comm1Buf;
             break;

        case COMM2:
             pbuf = &Comm2Buf;
             break;

        default:
             *err = COMM_BAD_CH;
             return (NUL);
    }
    if (pbuf->RingBufTxCtr > 0) {                          /* See if buffer is empty                   */
        pbuf->RingBufTxCtr--;                              /* No, decrement character count            */
        c = *pbuf->RingBufTxOutPtr++;                      /* Get character from buffer                */
        if (pbuf->RingBufTxOutPtr == &pbuf->RingBufTx[COMM_TX_BUF_SIZE]) {     /* Wrap OUT pointer     */
            pbuf->RingBufTxOutPtr = &pbuf->RingBufTx[0];
        }
        *err = COMM_NO_ERR;
        return (c);                                        /* Characters are still available           */
    } else {
        *err = COMM_TX_EMPTY;
        return (NUL);                                      /* Buffer is empty                          */
    }
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                  INITIALIZE COMMUNICATIONS MODULE
*
*
* Description : This function is called by your application to initialize the communications module.  You
*               must call this function before calling any other functions.
* Arguments   : none
*********************************************************************************************************
*/

void  CommInit (void)
{
    COMM_RING_BUF *pbuf;


    pbuf                  = &Comm1Buf;                     /* Initialize the ring buffer for COMM1     */
    pbuf->RingBufRxCtr    = 0;
    pbuf->RingBufRxInPtr  = &pbuf->RingBufRx[0];
    pbuf->RingBufRxOutPtr = &pbuf->RingBufRx[0];
    pbuf->RingBufTxCtr    = 0;
    pbuf->RingBufTxInPtr  = &pbuf->RingBufTx[0];

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩黄色免费电影| 老司机午夜精品99久久| 精品伦理精品一区| 99这里只有精品| 毛片不卡一区二区| 有坂深雪av一区二区精品| 欧美精品一区男女天堂| 欧美日韩国产不卡| eeuss国产一区二区三区| 老司机免费视频一区二区| 亚洲免费视频中文字幕| 国产三区在线成人av| 欧美久久一二区| 91久久久免费一区二区| 国产91精品一区二区| 免费看精品久久片| 午夜欧美在线一二页| 亚洲欧美另类图片小说| 中文字幕精品三区| 久久久久国产精品免费免费搜索| 欧美美女激情18p| 91精品91久久久中77777| 国产91精品露脸国语对白| 久久99精品国产麻豆婷婷| 男人的天堂亚洲一区| 亚洲成av人片www| 亚洲午夜一区二区三区| 亚洲精品综合在线| 亚洲欧美日韩国产一区二区三区| 欧美激情一区二区在线| 国产性色一区二区| 久久久99免费| 中文字幕av免费专区久久| 国产色综合一区| 久久久美女毛片| xf在线a精品一区二区视频网站| 日韩一级精品视频在线观看| 91精品久久久久久久久99蜜臂| 欧美性感一类影片在线播放| 色老汉一区二区三区| 日本精品视频一区二区| 欧美亚洲一区二区在线| 欧美午夜一区二区| 欧美日韩一区二区不卡| 欧美无人高清视频在线观看| 欧美日韩一区三区| 制服丝袜中文字幕亚洲| 日韩无一区二区| 精品国产乱码久久久久久老虎| 日韩天堂在线观看| 久久精品亚洲国产奇米99| 国产欧美日韩在线看| 国产精品毛片久久久久久| 国产精品久久久久久亚洲伦| 亚洲视频在线一区二区| 一区二区三区在线免费视频| 亚洲成a天堂v人片| 青青草97国产精品免费观看无弹窗版 | 麻豆精品在线视频| 极品美女销魂一区二区三区免费| 国产精品一区二区果冻传媒| 高清成人免费视频| 一本大道久久a久久精二百| 欧美无乱码久久久免费午夜一区 | 国产精品一区久久久久| 不卡一区在线观看| 欧美性视频一区二区三区| 日韩亚洲欧美一区| 国产欧美一区二区在线| 一区二区三区影院| 久久97超碰国产精品超碰| 粉嫩13p一区二区三区| 一本色道a无线码一区v| 6080国产精品一区二区| 国产日韩欧美综合在线| 伊人开心综合网| 久久爱www久久做| av色综合久久天堂av综合| 欧美日韩一区二区三区高清| 久久众筹精品私拍模特| 一区二区三区**美女毛片| 久久国产日韩欧美精品| aaa欧美色吧激情视频| 欧美一二三在线| 亚洲欧洲另类国产综合| 久久精品999| 欧美主播一区二区三区美女| 欧美一二三区精品| 亚洲天堂精品在线观看| 蜜桃av噜噜一区| 色呦呦国产精品| 久久久久久久网| 亚洲综合一区二区三区| 国产成a人亚洲精| 欧美精品成人一区二区三区四区| 国产欧美综合在线观看第十页| 亚洲午夜一区二区| 成人av网站免费观看| 日韩精品一区二区三区中文精品| 亚洲欧美色综合| 国产精品性做久久久久久| 欧美日韩精品一区二区三区蜜桃| 亚洲国产成人自拍| 美国一区二区三区在线播放| 日本精品免费观看高清观看| 日本一区二区不卡视频| 蜜桃传媒麻豆第一区在线观看| 91色乱码一区二区三区| 国产亚洲一区二区在线观看| 视频一区中文字幕国产| 欧美在线观看视频在线| 中文字幕在线视频一区| 国产在线观看免费一区| 欧美一级欧美一级在线播放| 亚洲自拍都市欧美小说| 91猫先生在线| 综合中文字幕亚洲| 成人午夜激情在线| 国产欧美一区二区在线| 国产精品一区二区在线播放| 日韩免费高清视频| 日本亚洲一区二区| 欧美日韩一区二区三区不卡| 一区二区三区日韩欧美| 91视视频在线观看入口直接观看www | 88在线观看91蜜桃国自产| 亚洲三级久久久| 成人av午夜电影| 中文字幕成人在线观看| 高清国产午夜精品久久久久久| 久久综合九色综合欧美就去吻| 日产国产高清一区二区三区| 欧美日韩不卡视频| 亚洲小说欧美激情另类| 欧美伊人久久大香线蕉综合69| 亚洲欧美日韩国产另类专区 | 欧美日韩1区2区| 亚洲综合色在线| 欧美亚洲图片小说| 无吗不卡中文字幕| 欧美日韩成人综合天天影院 | 9人人澡人人爽人人精品| 国产精品国产三级国产有无不卡 | 日韩欧美成人激情| 奇米影视在线99精品| 日韩欧美综合一区| 韩国精品主播一区二区在线观看| 欧美精品一区二区三区四区| 国产精品88888| 国产精品视频线看| 色欧美88888久久久久久影院| 一区二区成人在线| 日韩一级欧美一级| 国产成人综合自拍| 一区二区在线观看不卡| 欧美色中文字幕| 久久91精品久久久久久秒播| 久久久久久久久久美女| 91亚洲大成网污www| 亚洲成人1区2区| 精品国产青草久久久久福利| 国产高清在线观看免费不卡| 亚洲欧美欧美一区二区三区| 欧美精品九九99久久| 紧缚捆绑精品一区二区| 国产精品视频九色porn| 91久久一区二区| 麻豆成人av在线| 国产精品不卡视频| 欧美乱妇15p| 国产成人鲁色资源国产91色综 | 国产精品2024| 亚洲欧美日韩系列| 日韩欧美视频一区| 99精品国产视频| 日韩不卡免费视频| 中文欧美字幕免费| 欧美日韩性生活| 成熟亚洲日本毛茸茸凸凹| 亚洲一区在线播放| 久久一留热品黄| 欧洲国产伦久久久久久久| 久久99深爱久久99精品| 自拍偷拍国产精品| 日韩三级电影网址| 欧美主播一区二区三区美女| 国产一区二区三区av电影| 亚洲激情图片qvod| 久久久噜噜噜久噜久久综合| 欧美在线一二三| 成人一区二区三区在线观看 | 99久久99久久精品国产片果冻| 亚洲福中文字幕伊人影院| 久久久www成人免费毛片麻豆 | 国产精品婷婷午夜在线观看| 欧美精品一卡二卡| 色欧美日韩亚洲| 成人动漫一区二区在线| 精品一区二区日韩| 性欧美大战久久久久久久久|