可以參考下面的例子:
//通過信號量的方法發送數據void?usart1SendData(CPU_INT08U?ch)
{
OS_ERR?err;
CPU_INT08U?isTheFirstCh;
OSSemPend(&Usart1Sem,?0,?OS_OPT_PEND_BLOCKING,?NULL,?&err);//阻塞型等待串口發送資源
OSSemPend(&Usart1TxBufSem,?0,?OS_OPT_PEND_BLOCKING,?NULL,?&err);//阻塞型等待發送
isTheFirstCh?=?0;
if(pTxBufRead?==?pTxBufWrite){?//若讀指針等於寫指針,表明要寫入緩沖區的為當前第壹個數據
isTheFirstCh?=?1;?//置位第壹個數據標誌
}
*pTxBufWrite?=?ch;//向當前寫指針對應的地址寫入數據
if((pTxBufWrite++)?==?&Usart1TxBuf[USART1_TX_BUFFER_LEN?-?1]){?//若當前寫指針寫到緩沖區最後壹個地址,否則地址自增1
pTxBufWrite?=?Usart1TxBuf;?//寫指針更新為緩沖區第壹個地址,環形隊列
}
if(isTheFirstCh){?//寫入的是第壹個數據
USART_ITConfig(USART1,?USART_IT_TXE,?ENABLE);//開啟緩沖區發送空中斷,下壹步將會進入中斷處理數據
}
OSSemPost(&Usart1Sem,?OS_OPT_POST_1,?&err);
}