⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commrtos.c

📁 ucosii的源代码希望能给予学习嵌入式系统的朋友一定的帮助
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
*********************************************************************************************************
*                                     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
* Translated by : Won-Ho, Sung
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                               牢农风靛
*********************************************************************************************************
*/

#include "c:\\IC96\\Work\\ucos_ii\\includes.h"
#include "CommRtos.h"
/*$PAGE*/
/*
*********************************************************************************************************
*                                                 惑荐
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                              单捞磐 鸥涝
*********************************************************************************************************
*/

typedef struct {
    INT16U     RingBufRxCtr;                /* Rx 傅 滚欺俊 历厘等 单捞磐 荐                           */
    OS_EVENT  *RingBufRxSem;                /* 荐脚 技付器绢狼 器牢磐                                  */
    INT8U     *RingBufRxInPtr;              /* 促澜 单捞磐甫 历厘且 镑阑 啊府虐绰 器牢磐               */ 
    INT8U     *RingBufRxOutPtr;             /* 促澜俊 佬绢哎 单捞磐甫 啊府虐绰 器牢磐                  */ 
    INT8U      RingBufRx[COMM_RX_BUF_SIZE]; /* 荐脚侩 傅 滚欺 历厘康开(Rx)                             */ 

    INT16U     RingBufTxCtr;                /* Tx 傅 滚欺俊 历厘等 单捞磐 荐                           */
    OS_EVENT  *RingBufTxSem;                /* 价脚 技付器绢狼 器牢磐                                  */
    INT8U     *RingBufTxInPtr;              /* 促澜 单捞磐甫 历厘且 镑阑 啊府虐绰 器牢磐               */
    INT8U     *RingBufTxOutPtr;             /* 促澜俊 佬绢哎 单捞磐甫 啊府虐绰 器牢磐                  */
    INT8U      RingBufTx[COMM_TX_BUF_SIZE]; /* 价脚侩 傅 滚欺 历厘康开(Tx)                             */

} COMM_RING_BUF;

/*
*********************************************************************************************************
*                                              傈开函荐
*********************************************************************************************************
*/

COMM_RING_BUF  ComBuf;
COMM_RING_BUF  *pbuf;

void RxIntHandler(void)
{
    INT8U c;

    c = sbuf;                                              /* Process received character               */

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

void TxIntHandler(void)
{
    INT8U c, err;
    
    c = CommGetTxChar(&err);                               /* Get next character to send.               */
    if (err != COMM_TX_EMPTY) {                            /* Do we have anymore characters to send ?   */
        sbuf = c;                                          /* Yes, Send character                       */
    }
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                          傅 滚欺 单捞磐 佬扁
*
*
* 汲疙        : 览侩橇肺弊伐篮 烹脚 盲澄肺何磐 单捞磐甫 佬绢郴扁 困秦 捞 窃荐甫 龋免茄促.
*               捞 窃荐绰 烹脚盲澄俊 单捞磐啊 荐脚登芭唱 鸥烙酒眶捞 父丰瞪 锭 鳖瘤 措扁茄促.
*
* 傈崔牢磊    : 'ch'    COMM 器飘 盲澄 锅龋. 促澜苞 鞍篮 蔼阑 爱绰促:
*                           COMM1
*                           COMM2
*               'to'    单捞磐啊 荐脚登扁甫 扁促府绰 鸥烙酒眶阑 努钒 平 窜困肺 瘤沥茄促.
*                       捞 蔼阑 0栏肺 瘤沥窍搁 窃荐绰 单捞磐啊 荐脚瞪 锭 鳖瘤 公茄沥 措扁茄促.
*
*               'err'   俊矾内靛啊 历厘瞪 函荐甫 啊府虐绰 器牢磐. 促澜苞 鞍篮 蔼捞 汲沥等促:
*                           COMM_NO_ERR : 滚欺俊辑 单捞磐甫 佬绢 辰 版快
*                           COMM_RX_TIMEOUT : 鸥烙酒眶捞 父丰等 版快
*                           COMM_BAD_CH : 公瓤 盲澄阑 瘤沥茄 版快
* 府畔蔼      : 滚欺俊辑 佬绢辰 单捞磐(鸥烙酒眶捞 父丰等 版快绰 NUL阑 府畔茄促)
*********************************************************************************************************
*/

INT8U  CommGetChar (INT16U to, INT8U *err)
{
    INT8U          c;
    INT8U          oserr;


    OSSemPend(pbuf->RingBufRxSem, to, &oserr);             /* 单捞磐啊 荐脚登扁甫 扁促赴促             */
    if (oserr == OS_TIMEOUT) {                             /* 鸥烙酒眶捞 父丰登菌绰啊?                 */
        *err = COMM_RX_TIMEOUT;                            /* 抗, 俊矾内靛甫 府畔茄促                  */
        return (NUL);
    } else {
        OS_ENTER_CRITICAL();
        pbuf->RingBufRxCtr--;                              /* 酒聪坷, 单捞磐 墨款磐甫 皑家矫挪促       */
        c = *pbuf->RingBufRxOutPtr++;                      /* 滚欺俊辑 单捞磐甫 佬绢辰促               */
        if (pbuf->RingBufRxOutPtr == &pbuf->RingBufRx[COMM_RX_BUF_SIZE]) {     /* 器牢磐 版拌 贸府     */
            pbuf->RingBufRxOutPtr = &pbuf->RingBufRx[0];
        }
        OS_EXIT_CRITICAL();
        *err = COMM_NO_ERR;
        return (c);
    }
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                       价脚 傅 滚欺 单捞磐 佬扁
*
*
* 汲疙        : 价脚 ISR篮 滚欺肺何磐 促澜 价脚 单捞磐甫 佬绢 郴扁 困秦辑 捞 窃荐甫 龋免茄促.
*               捞 窃荐绰 滚欺俊辑 单捞磐甫 佬绢辰 饶 滚欺啊 后促搁 FALSE甫 府畔茄促.
*               蝶扼辑 价脚 ISR篮 捞 窃荐啊 FALSE甫 府畔窍搁 滚欺啊 厚绢乐绰 巴阑 狼固窍骨肺
*               价脚 牢磐反飘甫 厚劝己拳 茄促.
* 傈崔牢磊    : 'ch'    COMM 器飘 盲澄 锅龋. 促澜苞 鞍篮 蔼阑 爱绰促:
*                           COMM1
*                           COMM2
*               'err'   俊矾内靛啊 历厘瞪 函荐甫 啊府虐绰 器牢磐:
*               'err'   俊矾内靛啊 历厘瞪 函荐甫 啊府虐绰 器牢磐:
*                           COMM_NO_ERR : 窍唱 捞惑狼 单捞磐啊 滚欺俊 粮犁窍绰 版快
*                           COMM_TX_EMPTY : 滚欺啊 厚绢 乐绰 版快
*                           COMM_BAD_CH : 公瓤 盲澄阑 瘤沥茄 版快
* 府畔蔼      : 价脚滚欺俊辑 佬绢辰 单捞磐. 滚欺啊 后 版快绰 NUL阑 府畔茄促.
*********************************************************************************************************
*/

INT8U  CommGetTxChar (INT8U *err)
{
    INT8U          c;

    if (pbuf->RingBufTxCtr > 0) {                          /* 滚欺俊 单捞磐啊 乐绰啊?                  */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -