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

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

?? commrtos.c

?? 基于uCOS-II的串口驅動(用Keil C)
?? C
字號:
/*
*********************************************************************************************************
*                               基于uC/OS-II的串口驅動及應用程序接口函數
*                                             版權所有
*
* 文件名 : COMMRTOS.C
* 作者   : 陳是知 csz-mail@126.com 北京中軟 2005。3。11
*********************************************************************************************************
*/


#include "includes.h"

INT8U FirstCharFlag=0x01;  //注意:此為串口發送第一個字符的標志,必須定義。

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;


COMM_RING_BUF  CommBuf;


void  CommBufInit (void) reentrant
{
    COMM_RING_BUF *pbuf;

    pbuf                  = &CommBuf;                     /* 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);
	   
}



INT8U  CommPutChar (INT8U c, INT16U to) reentrant
{
    INT8U          oserr;
    COMM_RING_BUF  *pbuf;
	extern INT8U FirstCharFlag;
    pbuf=&CommBuf;
    OSSemPend(pbuf->RingBufTxSem, to, &oserr);             /* Wait for space in Tx buffer              */
    if (oserr == OS_TIMEOUT) {
        return (COMM_TX_TIMEOUT);                          /* Timed out, return error code             */
    }
    OS_ENTER_CRITICAL();
    pbuf->RingBufTxCtr++;                                  /* No, increment character count            */
    *pbuf->RingBufTxInPtr++ = c;                           /* Put character into buffer                */
    if (pbuf->RingBufTxInPtr == &pbuf->RingBufTx[COMM_TX_BUF_SIZE]) {     /* Wrap IN pointer           */
        pbuf->RingBufTxInPtr = &pbuf->RingBufTx[0];
    }
    if (pbuf->RingBufTxCtr == 1) {                         /* See if this is the first character       */
      if(FirstCharFlag==0x01)
      
       TI=1;                                               /* Yes, Enable Tx interrupts                */
      
    }
    OS_EXIT_CRITICAL();
    return (COMM_NO_ERR);
}

void  CommPutRxChar (INT8U c) reentrant
{
    COMM_RING_BUF *pbuf;
	pbuf=&CommBuf;

    if (pbuf->RingBufRxCtr < COMM_RX_BUF_SIZE) {           /* See if buffer is full                    */
        pbuf->RingBufRxCtr++;                              /* No, increment character count            */
        *pbuf->RingBufRxInPtr++ = c;                       /* Put character into buffer                */
        if (pbuf->RingBufRxInPtr == &pbuf->RingBufRx[COMM_RX_BUF_SIZE]) { /* Wrap IN pointer           */
            pbuf->RingBufRxInPtr = &pbuf->RingBufRx[0];
        }
        OSSemPost(pbuf->RingBufRxSem);                     /* Indicate that character was received     */
    }
}

INT8U  CommGetChar (INT16U to, INT8U *err) reentrant
{
    INT8U          c;
    INT8U          oserr;
    COMM_RING_BUF *pbuf;
    pbuf=&CommBuf;
    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);
    }
}

INT8U  CommGetTxChar (INT8U *err) reentrant
{ 
    INT8U          c;
    COMM_RING_BUF *pbuf;
    pbuf=&CommBuf;

    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                          */
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产三级国产普通话蜜臀| 天天影视色香欲综合网老头| 亚洲激情图片小说视频| 日韩va亚洲va欧美va久久| 国产·精品毛片| 欧美一区二区三级| 亚洲乱码国产乱码精品精98午夜 | 欧美亚洲精品一区| 国产调教视频一区| 免费人成在线不卡| 欧美日韩综合一区| 最新不卡av在线| 成人午夜大片免费观看| 日韩欧美亚洲国产精品字幕久久久| 亚洲精品国产精华液| 高清日韩电视剧大全免费| 91精品国产综合久久久久久漫画| 亚洲日本韩国一区| 99在线视频精品| 国产婷婷一区二区| 国精品**一区二区三区在线蜜桃| 日韩免费一区二区| 日本欧美加勒比视频| 欧美另类z0zxhd电影| 亚洲成人动漫在线观看| 日本韩国欧美国产| 亚洲午夜影视影院在线观看| 色综合久久精品| 亚洲激情自拍偷拍| 在线观看成人小视频| 一区二区三区久久久| 色综合久久久网| 亚洲柠檬福利资源导航| 91丨九色porny丨蝌蚪| 亚洲视频图片小说| 日本韩国欧美一区| 亚洲制服丝袜在线| 欧美欧美午夜aⅴ在线观看| 亚洲一区免费观看| 9191成人精品久久| 免费国产亚洲视频| 久久久青草青青国产亚洲免观| 国产另类ts人妖一区二区| 久久天堂av综合合色蜜桃网| 东方aⅴ免费观看久久av| 国产精品你懂的| 色爱区综合激月婷婷| 午夜激情一区二区| 精品裸体舞一区二区三区| 黄网站免费久久| 亚洲欧洲精品天堂一级| 欧美性xxxxxx少妇| 久久国产乱子精品免费女| 久久网站热最新地址| 97成人超碰视| 首页综合国产亚洲丝袜| 精品国产乱子伦一区| 丰满亚洲少妇av| 亚洲综合在线五月| 337p日本欧洲亚洲大胆色噜噜| 国产成人av网站| 一区二区三区在线视频免费观看| 欧美二区在线观看| 国产91丝袜在线18| 亚洲午夜日本在线观看| 精品免费一区二区三区| 97超碰欧美中文字幕| 捆绑调教一区二区三区| 国产精品家庭影院| 91精品国产91热久久久做人人| 国产成人亚洲综合色影视 | 2023国产精品| 91豆麻精品91久久久久久| 久久精品99国产精品日本| 中文字幕在线观看不卡| 欧美一区二区三区系列电影| 成人黄色国产精品网站大全在线免费观看 | 五月婷婷综合网| 国产人成亚洲第一网站在线播放| 色琪琪一区二区三区亚洲区| 久久99国产乱子伦精品免费| 亚洲欧美激情在线| 亚洲精品一区二区精华| 欧美视频你懂的| 9人人澡人人爽人人精品| 日韩电影免费一区| 亚洲最新视频在线播放| 国产欧美精品一区二区色综合朱莉| 欧美日韩免费观看一区二区三区| 国产成人av资源| 蜜桃一区二区三区在线| 亚洲自拍偷拍综合| 亚洲免费在线电影| 亚洲国产精品精华液ab| 精品乱码亚洲一区二区不卡| 欧美日韩一区二区在线观看| 色综合天天天天做夜夜夜夜做| 国产美女av一区二区三区| 日韩中文字幕91| 亚洲一区二区三区四区的| 国产精品传媒在线| 欧美国产一区二区| 久久久精品国产99久久精品芒果| 日韩一区二区三区四区五区六区| 欧美猛男男办公室激情| 欧美在线免费观看亚洲| 91美女蜜桃在线| av在线不卡观看免费观看| 国产91精品欧美| 国产91丝袜在线播放| 国产精品一区专区| 国产一区二区三区免费播放| 精品在线免费观看| 久久99国产精品免费| 日本中文字幕一区二区视频| 午夜国产精品影院在线观看| 亚洲成人综合在线| 亚洲成人动漫av| 视频在线观看一区二区三区| 石原莉奈在线亚洲二区| 日韩1区2区3区| 狠狠色伊人亚洲综合成人| 狠狠狠色丁香婷婷综合激情 | 亚洲成人www| 天天影视色香欲综合网老头| 免费人成在线不卡| 国产尤物一区二区在线| 国产不卡免费视频| 91视频国产观看| 欧美美女网站色| 欧美成人一区二区| 亚洲国产成人私人影院tom| 中文字幕一区三区| 亚洲影视资源网| 日本亚洲视频在线| 国产一区欧美日韩| 9色porny自拍视频一区二区| 日本伦理一区二区| 日韩写真欧美这视频| 久久久99精品免费观看不卡| 成人免费在线观看入口| 亚洲成人动漫一区| 国产一本一道久久香蕉| 色婷婷久久久亚洲一区二区三区| 精品视频在线免费看| 精品国产污污免费网站入口| 国产亚洲午夜高清国产拍精品| 国产精品热久久久久夜色精品三区| 亚洲一区二区三区视频在线| 蜜乳av一区二区三区| 成人激情小说乱人伦| 精品视频在线免费看| 久久综合狠狠综合久久综合88 | 成人免费高清视频| 欧美揉bbbbb揉bbbbb| 久久久久久黄色| 亚洲成人av福利| 国产999精品久久| 欧美一区永久视频免费观看| 国产精品毛片高清在线完整版| 午夜久久久久久电影| 国产suv精品一区二区三区| 欧美色窝79yyyycom| 国产日韩欧美精品在线| 无吗不卡中文字幕| 成人av电影在线播放| 日韩精品一区二区三区三区免费| 自拍偷拍国产亚洲| 国产在线精品免费| 欧美日韩视频第一区| 综合电影一区二区三区| 极品美女销魂一区二区三区| 欧美日韩一区视频| 亚洲视频一区二区在线观看| 国产一区二区三区黄视频| 欧美男男青年gay1069videost| 中文字幕一区二区三区蜜月| 国精产品一区一区三区mba桃花 | 国产91精品精华液一区二区三区 | 日韩欧美在线网站| 一二三四社区欧美黄| 99久久99久久综合| 国产婷婷一区二区| 国内精品久久久久影院色| 91精品蜜臀在线一区尤物| 亚洲与欧洲av电影| 日本韩国精品在线| 最新国产精品久久精品| 成人性生交大片免费看中文| 精品88久久久久88久久久 | 亚洲大尺度视频在线观看| 一本久久a久久精品亚洲 | 欧美精品一区视频| 久久国产精品色| 精品福利在线导航| 精品一区二区三区日韩| 精品捆绑美女sm三区| 久久国产成人午夜av影院| 欧美一区二区三区在| 欧美a级理论片|