ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收
生活随笔
收集整理的這篇文章主要介紹了
ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
串口發(fā)送部分代碼:
//通過信號(hào)量的方法發(fā)送數(shù)據(jù) void usart1SendData(CPU_INT08U ch) {OS_ERR err;CPU_INT08U isTheFirstCh;OSSemPend(&Usart1Sem, 0, OS_OPT_PEND_BLOCKING, NULL, &err);//阻塞型等待串口發(fā)送資源OSSemPend(&Usart1TxBufSem, 0, OS_OPT_PEND_BLOCKING, NULL, &err);//阻塞型等待發(fā)送isTheFirstCh = 0;if(pTxBufRead == pTxBufWrite){ //若讀指針等于寫指針,表明要寫入緩沖區(qū)的為當(dāng)前第一個(gè)數(shù)據(jù)isTheFirstCh = 1; //置位第一個(gè)數(shù)據(jù)標(biāo)志 }*pTxBufWrite = ch;//向當(dāng)前寫指針對(duì)應(yīng)的地址寫入數(shù)據(jù)if((pTxBufWrite++) == &Usart1TxBuf[USART1_TX_BUFFER_LEN - 1]){ //若當(dāng)前寫指針寫到緩沖區(qū)最后一個(gè)地址,否則地址自增1pTxBufWrite = Usart1TxBuf; //寫指針更新為緩沖區(qū)第一個(gè)地址,環(huán)形隊(duì)列 }if(isTheFirstCh){ //寫入的是第一個(gè)數(shù)據(jù)USART_ITConfig(USART1, USART_IT_TXE, ENABLE);//開啟緩沖區(qū)發(fā)送空中斷,下一步將會(huì)進(jìn)入中斷處理數(shù)據(jù) }OSSemPost(&Usart1Sem, OS_OPT_POST_1, &err); }
串口接收部分代碼:
//串口1中斷處理程序 void USART1_IRQHandler(void) //串口1中斷服務(wù)程序 {OS_ERR err; OSIntEnter(); //通知UCOS進(jìn)入中斷//發(fā)送緩沖區(qū)空中斷if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET) {USART_SendData(USART1, *pTxBufRead);//向串口發(fā)送緩沖區(qū)寫入一個(gè)字節(jié)if((pTxBufRead++) == &Usart1TxBuf[USART1_TX_BUFFER_LEN - 1]){ //讀到最后一個(gè)字節(jié)pTxBufRead = Usart1TxBuf; //移動(dòng)讀指針到第首地址 } if(pTxBufRead == pTxBufWrite){ //若讀寫指針相等,表明本次緩沖區(qū)數(shù)據(jù)已經(jīng)讀完USART_ITConfig(USART1, USART_IT_TXE, DISABLE);//關(guān)閉中斷 }OSSemPost(&Usart1TxBufSem, OS_OPT_POST_1, &err); //釋放緩沖區(qū)信號(hào)量 } //串口接收到數(shù)據(jù)中斷if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){*pRxBufWrite = USART_ReceiveData(USART1); //讀取一個(gè)字節(jié)到緩沖區(qū)OSTaskQPost(&Usart1RxTaskTCB, pRxBufWrite, 1, OS_OPT_POST_FIFO, &err); //發(fā)送該字節(jié)所在緩沖區(qū)的地址到消息隊(duì)列,等待任務(wù)處理if((pRxBufWrite++) == &Usart1RxBuf[USART1_RX_BUFFER_LEN - 1]){ //若當(dāng)前寫指針寫到緩沖區(qū)最后一個(gè)地址pRxBufWrite = Usart1RxBuf; //寫指針更新為緩沖區(qū)第一個(gè)地址,環(huán)形隊(duì)列 }}OSIntExit(); //通知UCOS退出中斷 }
例程:
http://www.openedv.com/forum.php?mod=attachment&aid=Njg0MnxmMzFkMzdmN3wxNTQ1MDQ0NjE5fDB8MzM2MTE%3D
轉(zhuǎn)載于:https://www.cnblogs.com/jiangzhaowei/p/10133234.html
總結(jié)
以上是生活随笔為你收集整理的ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人的脑电波如果超级强,真的有可能影响他人
- 下一篇: 我国航天技术事业蒸蒸日上,我国的能力和实