日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收

發布時間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

串口發送部分代碼:

//通過信號量的方法發送數據
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]){ //若當前寫指針寫到緩沖區最后一個地址,否則地址自增1pTxBufWrite = Usart1TxBuf; //寫指針更新為緩沖區第一個地址,環形隊列
    }if(isTheFirstCh){ //寫入的是第一個數據USART_ITConfig(USART1, USART_IT_TXE, ENABLE);//開啟緩沖區發送空中斷,下一步將會進入中斷處理數據
    }OSSemPost(&Usart1Sem, OS_OPT_POST_1, &err);
}

串口接收部分代碼:

//串口1中斷處理程序
void USART1_IRQHandler(void)                    //串口1中斷服務程序
{OS_ERR err; OSIntEnter();    //通知UCOS進入中斷//發送緩沖區空中斷if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)  {USART_SendData(USART1, *pTxBufRead);//向串口發送緩沖區寫入一個字節if((pTxBufRead++) == &Usart1TxBuf[USART1_TX_BUFFER_LEN - 1]){ //讀到最后一個字節pTxBufRead = Usart1TxBuf;  //移動讀指針到第首地址
        }       if(pTxBufRead == pTxBufWrite){ //若讀寫指針相等,表明本次緩沖區數據已經讀完USART_ITConfig(USART1, USART_IT_TXE, DISABLE);//關閉中斷
        }OSSemPost(&Usart1TxBufSem, OS_OPT_POST_1, &err); //釋放緩沖區信號量
    }   //串口接收到數據中斷if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){*pRxBufWrite = USART_ReceiveData(USART1); //讀取一個字節到緩沖區OSTaskQPost(&Usart1RxTaskTCB, pRxBufWrite, 1, OS_OPT_POST_FIFO, &err);   //發送該字節所在緩沖區的地址到消息隊列,等待任務處理if((pRxBufWrite++) == &Usart1RxBuf[USART1_RX_BUFFER_LEN - 1]){ //若當前寫指針寫到緩沖區最后一個地址pRxBufWrite = Usart1RxBuf; //寫指針更新為緩沖區第一個地址,環形隊列
        }}OSIntExit();    //通知UCOS退出中斷                                     
}

例程:

http://www.openedv.com/forum.php?mod=attachment&aid=Njg0MnxmMzFkMzdmN3wxNTQ1MDQ0NjE5fDB8MzM2MTE%3D

轉載于:https://www.cnblogs.com/jiangzhaowei/p/10133234.html

總結

以上是生活随笔為你收集整理的ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。