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

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

?? commrtos.c

?? uC_OS_II_外圍接口程序源代碼.rar
?? 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 
*                                                 (RTOS)
*
*                            (c) Copyright 1999, Jean J. Labrosse, Weston, FL
*                                           All Rights Reserved
*
* Filename   : COMMRTOS.C
* Programmer : Jean J. Labrosse
*********************************************************************************************************
*/

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

#include "includes.h"

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

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

typedef struct {
    INT16U     RingBufRxCtr;                /* Number of characters in the Rx ring buffer              */
    OS_EVENT  *RingBufRxSem;                /* Pointer to Rx semaphore                                 */
    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              */
    OS_EVENT  *RingBufTxSem;                /* Pointer to Tx semaphore                                 */
    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.  The function will wait for a character to be received on the serial channel or
*               until the function times out.
* Arguments   : 'ch'    is the COMM port channel number and can either be:
*                           COMM1
*                           COMM2
*               'to'    is the amount of time (in clock ticks) that the calling function is willing to
*                       wait for a character to arrive.  If you specify a timeout of 0, the function will
*                       wait forever for a character to arrive.
*               'err'   is a pointer to where an error code will be placed:
*                           *err is set to COMM_NO_ERR     if a character has been received
*                           *err is set to COMM_RX_TIMEOUT if a timeout occurred
*                           *err is set to COMM_BAD_CH     if you specify an invalid channel number
* Returns     : The character in the buffer (or NUL if a timeout occurred)
*********************************************************************************************************
*/

INT8U  CommGetChar (INT8U ch, INT16U to, INT8U *err)
{
    INT8U          c;
    INT8U          oserr;
    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);
    }
    OSSemPend(pbuf->RingBufRxSem, to, &oserr);             /* Wait for character to arrive             */
    if (oserr == OS_TIMEOUT) {                             /* See if characters received within timeout*/
        *err = COMM_RX_TIMEOUT;                            /* No, return error code                    */
        return (NUL);
    } else {
        OS_ENTER_CRITICAL();
        pbuf->RingBufRxCtr--;                              /* Yes, 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);
    }
}

/*$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 available
*                                                              from 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];
        }
        OSSemPost(pbuf->RingBufTxSem);                     /* Indicate that character will be sent     */
        *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->RingBufRxSem    = OSSemCreate(0);
    pbuf->RingBufTxCtr    = 0;
    pbuf->RingBufTxInPtr  = &pbuf->RingBufTx[0];
    pbuf->RingBufTxOutPtr = &pbuf->RingBufTx[0];
    pbuf->RingBufTxSem    = OSSemCreate(COMM_TX_BUF_SIZE);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区欧美精品| 亚洲精品成人a在线观看| 色婷婷国产精品久久包臀| 日日摸夜夜添夜夜添国产精品 | 中文字幕一区二区视频| 51精品久久久久久久蜜臀| 粉嫩高潮美女一区二区三区| 秋霞影院一区二区| 亚洲视频在线观看三级| 久久久久99精品一区| 欧美一区二区在线免费观看| 色爱区综合激月婷婷| 成人av在线资源| 久久99精品久久久久久| 日韩福利电影在线| 亚洲综合色婷婷| 中文字幕在线一区免费| 2014亚洲片线观看视频免费| 欧美精选在线播放| 欧美亚洲综合另类| 91九色02白丝porn| 99久久er热在这里只有精品66| 国内精品国产三级国产a久久 | 精品亚洲成av人在线观看| 亚洲国产一区二区在线播放| 亚洲欧美色一区| 国产精品久久久久久久久搜平片| 久久在线观看免费| 日韩欧美一级精品久久| 91精品国产色综合久久ai换脸| 欧美影院午夜播放| 在线看日韩精品电影| 色国产综合视频| 色素色在线综合| 99久久免费国产| voyeur盗摄精品| 成年人网站91| 色老汉av一区二区三区| 在线免费精品视频| 欧美色欧美亚洲另类二区| 在线视频你懂得一区二区三区| 色噜噜狠狠一区二区三区果冻| 在线免费观看日韩欧美| 欧美亚洲日本一区| 欧美日韩在线一区二区| 欧美日韩极品在线观看一区| 91麻豆精品国产91久久久久| 欧美丰满高潮xxxx喷水动漫| 制服丝袜国产精品| 26uuu亚洲| 中文字幕的久久| 中文字幕色av一区二区三区| 亚洲欧美日韩久久精品| 亚洲va国产天堂va久久en| 五月婷婷久久综合| 日本成人在线电影网| 久88久久88久久久| 成人免费的视频| 色综合婷婷久久| 欧美乱妇23p| 久久在线免费观看| 亚洲欧洲日韩一区二区三区| 一区二区三区四区在线播放| 性久久久久久久久久久久| 久久99深爱久久99精品| 丁香婷婷综合网| 91年精品国产| 欧美三级韩国三级日本三斤 | 久久久噜噜噜久久中文字幕色伊伊| 欧美一二三四在线| 国产日韩欧美综合在线| 亚洲欧美日韩中文播放| 日韩电影在线一区二区三区| 极品尤物av久久免费看| 91在线视频网址| 91精品国产一区二区三区 | 日韩精品五月天| 国产乱码精品一区二区三| 色综合色综合色综合| 欧美一区二区三区在线视频| 国产精品国产三级国产a | 日韩福利视频导航| 成人激情av网| 日韩三级伦理片妻子的秘密按摩| 久久精品亚洲国产奇米99| 一区二区三区在线观看欧美| 精品一区二区三区免费播放| 91首页免费视频| 久久影院视频免费| 亚洲成人av中文| 成人动漫av在线| 欧美成人精品3d动漫h| 国产精品不卡视频| 久久99精品久久久久久久久久久久| aaa欧美日韩| 欧美成人免费网站| 亚洲va韩国va欧美va| 成人午夜免费视频| 日韩女优毛片在线| 亚洲图片自拍偷拍| 波多野结衣中文字幕一区二区三区| 538在线一区二区精品国产| 中文字幕一区二区视频| 久久精品国产一区二区| 欧美亚洲一区二区在线观看| 欧美激情一区二区三区四区| 美腿丝袜亚洲综合| 欧美日韩久久久一区| 国产精品久久久久国产精品日日| 激情综合网最新| 日韩午夜电影在线观看| 亚洲自拍偷拍图区| 91美女片黄在线观看91美女| 日本一区二区三级电影在线观看| 麻豆精品一二三| 欧美美女黄视频| 亚洲国产日日夜夜| 色偷偷88欧美精品久久久| 国产色一区二区| 久草中文综合在线| 日韩精品一区二区三区视频播放 | 免费在线观看一区二区三区| 色狠狠桃花综合| 亚洲欧美国产毛片在线| 成人av网站免费| 中文字幕乱码一区二区免费| 国产精品自拍一区| 精品国产一区二区三区四区四 | 日韩欧美高清dvd碟片| 午夜精品久久久久久久99樱桃 | 97成人超碰视| 国产精品人成在线观看免费| 国产精品一二三| 久久亚洲精华国产精华液| 狠狠色综合日日| 精品国产乱码久久久久久夜甘婷婷 | 久色婷婷小香蕉久久| 欧美一区二区高清| 蜜桃久久av一区| 欧美电影免费观看高清完整版在线| 日韩国产欧美视频| 日韩一级高清毛片| 精品午夜久久福利影院 | 最新中文字幕一区二区三区| 不卡视频一二三四| 亚洲视频一区在线| 欧美日韩免费观看一区二区三区 | 日韩高清不卡一区二区| 日韩视频免费观看高清完整版 | 欧美三级欧美一级| 日韩精品欧美成人高清一区二区| 欧美一级一区二区| 极品销魂美女一区二区三区| 国产亚洲人成网站| 99re视频这里只有精品| 亚洲精品videosex极品| 欧美日韩在线播放三区| 三级不卡在线观看| 久久色.com| 色香蕉成人二区免费| 三级欧美在线一区| 久久久综合九色合综国产精品| 成人午夜又粗又硬又大| 伊人性伊人情综合网| 7777女厕盗摄久久久| 九一九一国产精品| 亚洲女子a中天字幕| 亚洲色图.com| 欧美性色黄大片| 国产一区二区三区四| 亚洲三级小视频| 7777精品伊人久久久大香线蕉最新版 | 欧美探花视频资源| 九九国产精品视频| 国产精品久久久爽爽爽麻豆色哟哟| 色婷婷综合久色| 蜜乳av一区二区三区| 中文字幕佐山爱一区二区免费| 欧美理论片在线| 岛国精品在线播放| 日日嗨av一区二区三区四区| 国产日韩精品一区二区浪潮av| 91成人免费在线视频| 狠狠久久亚洲欧美| 日韩美女啊v在线免费观看| 91精品国产综合久久福利| 成人国产精品免费观看| 日韩电影一区二区三区四区| 国产精品蜜臀在线观看| 欧美理论在线播放| 91丝袜国产在线播放| 玖玖九九国产精品| 亚洲成人自拍网| 国产精品国产三级国产普通话三级 | 国产精品区一区二区三区| 欧美一区二区视频在线观看2020| 国产91丝袜在线播放| 免费一级片91| 亚洲国产乱码最新视频| 最新中文字幕一区二区三区|