μC/OS―II下中斷服務(wù)程序和外設驅動(dòng)的開(kāi)發(fā)
環(huán)狀緩沖區中指向被取出的下一字節的指針。
本文引用地址:http://dyxdggzs.com/article/201609/304155.htmSerialGetehar()用來(lái)獲取接收到的數據,如果緩沖區已空時(shí)將任務(wù)掛起,接收到字節時(shí),任務(wù)將被喚醒,同時(shí)從串行口接收字節。 SerialPutRxChar()用來(lái)將接收的字節放到緩沖區中,如果接收緩沖區已滿(mǎn),則該字節被丟棄。當字節插入到緩沖區中,SerialPutRxChar()通知數據接收信號量,使之將數據己到的消息傳達給所有等待的任務(wù)。為防止掛起應用任務(wù),可以通過(guò)調用 SceiallsEmPty()去發(fā)現環(huán)狀隊列中是否有字節。
當需要發(fā)送數據給串行端口時(shí),SerialPurChar()等待信號量在初始化發(fā)送信號量時(shí)應該初始為緩沖區的大小。因此,當緩沖區中沒(méi)有更多空間時(shí),SerialPutChar()就掛起任務(wù),只要UART再次發(fā)送字節,掛起任務(wù)就將恢復。SerialGctChar()被中斷服務(wù)程序調用,如果發(fā)送緩沖區至少還有一個(gè)字節,Seri-a1GetChar()就返回一個(gè)從緩沖區發(fā)送的字節。如果緩沖區己空,則SerialGetChar()返回 Null,這將使調用停止進(jìn)一步的發(fā)送中斷,一直到有數據發(fā)送為止。
4 異步串行通信的接口函數
應用任務(wù)可以通過(guò)如下的幾個(gè)函數來(lái)控制和訪(fǎng)問(wèn)UART:SerialCfgPort()、SerialGetChar()、SerialInit()、SerialIsEmpty()、SerialIsFull()和SerialPutChar()。
SerialCfgPort()用于建立串行端口的特征,在為指定端口調用其他服務(wù)前,必須先調用該函數,包括確定波特率、比特數、奇偶校驗和停止位等。
SerialGetChar()使應用程序從接收數據的環(huán)狀緩沖區中取出數據。
SerialInit()用于初始化整個(gè)串口軟件模塊,且必須在該模塊提供的其他任何服務(wù)前調用。SeriallInit()將環(huán)狀緩沖區計數器的字節數清零,并初始化每個(gè)環(huán)狀緩沖區的IN和OUT指針,指向數據存儲區的開(kāi)始處。數據接收信號量初始化為0,表示在環(huán)狀緩沖區無(wú)數據。用傳送緩沖區大小初始化數據傳送信號量,表示緩沖區已空。
SerialIsEmpty()允許應用程序確定是否有字節從串口接收進(jìn)來(lái)。本函數允許在無(wú)數據時(shí)避免將任務(wù)掛起。
SerialIsFull()允許應用程序確定傳送環(huán)狀緩沖區的狀態(tài),本函數可以在緩沖區已滿(mǎn)時(shí)避免將任務(wù)掛起。
SerialPutChar()允許應用程序向一個(gè)串行端口發(fā)送數據。
結 語(yǔ)
該串口通信模塊充分利用了實(shí)時(shí)內核的任務(wù)調度功能和信號量機制,系統軟件模塊化,可讀性增強,便于修改和移植,其設計思路和方法可以很好的應用在多種情況下的測控系統中,系統的擴展方便,具有一定的借鑒作用。該串口通信模塊已作為某鐵路供水遠程控制終端的一部分,運行穩定,提高了整個(gè)系統的運行效率和實(shí)時(shí)性。
評論