亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

嵌入式UART串口處理函數(shù)設(shè)計(jì):從原理到實(shí)戰(zhàn)的幀解析與緩沖區(qū)管理

嵌入式UART串口處理函數(shù)設(shè)計(jì):從原理到實(shí)戰(zhàn)的幀解析與緩沖區(qū)管理 1. 從“做題”到“實(shí)戰(zhàn)”理解UART處理函數(shù)的核心價(jià)值在嵌入式開(kāi)發(fā)這條路上我見(jiàn)過(guò)太多初學(xué)者也包括當(dāng)年的我自己在面對(duì)UART串口通信時(shí)總感覺(jué)隔著一層紗。教材和例程里void Uart_Proc(void)這樣的函數(shù)名頻繁出現(xiàn)它像一個(gè)黑盒子我們只知道調(diào)用它卻不知道它內(nèi)部如何運(yùn)轉(zhuǎn)更別提在遇到“題目”或?qū)嶋H問(wèn)題時(shí)如何靈活地修改和駕馭它。今天我想拋開(kāi)那些枯燥的理論羅列結(jié)合我踩過(guò)的坑和積累的經(jīng)驗(yàn)來(lái)聊聊這個(gè)看似簡(jiǎn)單的函數(shù)背后一個(gè)合格的嵌入式工程師應(yīng)該如何思考、如何設(shè)計(jì)以及如何讓它真正成為項(xiàng)目中的得力助手。這不僅僅是“做題”更是從“會(huì)調(diào)用”到“懂原理”再到“能設(shè)計(jì)”的關(guān)鍵一步。UART作為嵌入式世界最古老也最經(jīng)典的通信接口之一其重要性不言而喻。無(wú)論是打印調(diào)試信息、連接傳感器模塊還是進(jìn)行設(shè)備間通信都離不開(kāi)它。而Uart_Proc串口處理函數(shù)通常是整個(gè)串口驅(qū)動(dòng)與應(yīng)用層交互的核心樞紐。它負(fù)責(zé)從硬件接收緩沖區(qū)RX Buffer中取出數(shù)據(jù)進(jìn)行必要的解析如判斷幀頭、幀尾、校驗(yàn)和然后將有效數(shù)據(jù)傳遞給上層應(yīng)用同時(shí)也可能負(fù)責(zé)將應(yīng)用層要發(fā)送的數(shù)據(jù)組織成幀放入發(fā)送緩沖區(qū)TX Buffer。理解并寫(xiě)好這個(gè)函數(shù)意味著你掌握了串口通信從物理層到應(yīng)用層數(shù)據(jù)流轉(zhuǎn)的關(guān)鍵鑰匙。2. 剖析Uart_Proc的典型骨架與設(shè)計(jì)哲學(xué)一個(gè)健壯的Uart_Proc函數(shù)絕不僅僅是簡(jiǎn)單地從緩沖區(qū)讀幾個(gè)字節(jié)。它的設(shè)計(jì)體現(xiàn)了一個(gè)開(kāi)發(fā)者對(duì)系統(tǒng)實(shí)時(shí)性、可靠性以及代碼可維護(hù)性的綜合考量。我們先來(lái)看一個(gè)最基礎(chǔ)、但也最經(jīng)典的實(shí)現(xiàn)框架這個(gè)框架是我在多個(gè)項(xiàng)目中反復(fù)驗(yàn)證和優(yōu)化后的結(jié)晶。/** * brief 串口數(shù)據(jù)處理核心函數(shù)需在main loop中周期性調(diào)用 * param None * retval None */ void Uart_Proc(void) { uint8_t rx_byte 0; static uint8_t rx_buffer[UART_RX_BUF_SIZE] {0}; static uint16_t rx_index 0; static uint32_t last_rx_tick 0; // 用于超時(shí)判斷 // 步驟1輪詢讀取硬件接收緩沖區(qū) while(UART_GetRxFlag() (rx_index UART_RX_BUF_SIZE)) { rx_byte UART_ReadByte(); // 從硬件寄存器讀取一個(gè)字節(jié) rx_buffer[rx_index] rx_byte; last_rx_tick Get_SystemTick(); // 更新最后一次接收到字節(jié)的時(shí)間戳 // 可選簡(jiǎn)單回顯用于調(diào)試 // UART_SendByte(rx_byte); } // 步驟2判斷一幀數(shù)據(jù)是否接收完成 // 策略A基于特定結(jié)束符如換行符‘\n’ if(rx_index 0 rx_buffer[rx_index - 1] \n) { rx_buffer[rx_index] \0; // 添加字符串結(jié)束符方便處理 // 調(diào)用應(yīng)用層協(xié)議解析函數(shù) App_Protocol_Parse(rx_buffer, rx_index); rx_index 0; // 重置索引準(zhǔn)備接收下一幀 } // 策略B基于超時(shí)機(jī)制更通用適用于不定長(zhǎng)數(shù)據(jù) else if(rx_index 0 (Get_SystemTick() - last_rx_tick UART_FRAME_TIMEOUT)) { // 超時(shí)時(shí)間內(nèi)沒(méi)有新數(shù)據(jù)認(rèn)為一幀結(jié)束 App_Protocol_Parse(rx_buffer, rx_index); rx_index 0; } // 策略C基于長(zhǎng)度或復(fù)雜協(xié)議頭如Modbus // 通常在App_Protocol_Parse內(nèi)部實(shí)現(xiàn) // 步驟3處理應(yīng)用層發(fā)送請(qǐng)求非阻塞方式 if(app_tx_flag) // 應(yīng)用層設(shè)置發(fā)送標(biāo)志 { UART_SendData(app_tx_buffer, app_tx_len); app_tx_flag 0; // 清除標(biāo)志 } }這個(gè)框架包含了三個(gè)核心環(huán)節(jié)數(shù)據(jù)讀取、幀結(jié)束判斷和數(shù)據(jù)發(fā)送觸發(fā)。其中幀結(jié)束判斷是靈魂所在也是“做題”時(shí)最容易出錯(cuò)的點(diǎn)。上面給出了兩種最常用的策略結(jié)束符和超時(shí)在實(shí)際項(xiàng)目中它們常常結(jié)合使用。注意這里使用了static關(guān)鍵字修飾緩沖區(qū)變量和索引。這是關(guān)鍵static保證了這些變量的值在函數(shù)調(diào)用之間得以保持相當(dāng)于為這個(gè)UART通道分配了“私有”的存儲(chǔ)空間。如果沒(méi)有static每次調(diào)用函數(shù)緩沖區(qū)都會(huì)被重新初始化之前接收的數(shù)據(jù)就全丟了。為什么設(shè)計(jì)成需要在主循環(huán)中輪詢調(diào)用而不是用中斷直接處理這是一個(gè)經(jīng)典的架構(gòu)選擇問(wèn)題。中斷服務(wù)程序ISR要求執(zhí)行時(shí)間盡可能短通常只適合做最底層的“搬磚”工作把硬件寄存器里的數(shù)據(jù)快速讀到內(nèi)存緩沖區(qū)RX Buffer或者從內(nèi)存緩沖區(qū)TX Buffer寫(xiě)到硬件寄存器。而協(xié)議解析、數(shù)據(jù)校驗(yàn)、業(yè)務(wù)邏輯處理這些耗時(shí)且可能復(fù)雜的操作應(yīng)該放到主循環(huán)的Uart_Proc中。這種“中斷輪詢”的架構(gòu)既保證了數(shù)據(jù)接收的實(shí)時(shí)性不丟字節(jié)又避免了在中斷中處理復(fù)雜邏輯導(dǎo)致系統(tǒng)響應(yīng)變慢或產(chǎn)生不可預(yù)知的問(wèn)題。3. 幀結(jié)束判斷從“知道”到“精通”的三種策略詳解“一幀數(shù)據(jù)什么時(shí)候結(jié)束”這是UART編程的核心問(wèn)題因?yàn)閁ART本身是字節(jié)流沒(méi)有內(nèi)置的幀概念。處理不好就會(huì)發(fā)生幀粘連兩幀被當(dāng)成一幀或幀斷裂一幀被拆成多幀。下面我結(jié)合實(shí)例深入剖析三種主流策略的適用場(chǎng)景和避坑要點(diǎn)。3.1 策略一定界符Delimiter法這是最簡(jiǎn)單直觀的方法適用于文本協(xié)議或命令交互比如AT指令以\r\n結(jié)束、NMEA-0183GPS數(shù)據(jù)以\n結(jié)束、簡(jiǎn)單的調(diào)試命令等。實(shí)現(xiàn)與陷阱// 假設(shè)我們接收“LED_ON\n”和“LED_OFF\n”兩條命令 if(rx_index 0 rx_buffer[rx_index - 1] \n) { // 找到結(jié)束符 // 陷阱1如果數(shù)據(jù)本身包含‘\n’怎么辦比如要發(fā)送一段包含換行的文本。 // 陷阱2如果幀起始也有特定字符如‘$’需要結(jié)合判斷。 // 更健壯的做法同時(shí)判斷回車(chē)換行 “\r\n” if(rx_index 1 rx_buffer[rx_index-2] \r rx_buffer[rx_index-1] \n) { rx_buffer[rx_index - 2] \0; // 去掉\r\n保留純數(shù)據(jù) Process_Command((char*)rx_buffer); } rx_index 0; }心得使用定界符法一定要和協(xié)議制定方確認(rèn)數(shù)據(jù)內(nèi)容是否會(huì)“轉(zhuǎn)義”Escape定界符。例如在JSON字符串中換行符會(huì)被表示為\n而不是真正的0x0A字節(jié)。如果協(xié)議沒(méi)有轉(zhuǎn)義機(jī)制那么定界符法就存在天然缺陷。3.2 策略二超時(shí)Timeout法這是處理不定長(zhǎng)二進(jìn)制數(shù)據(jù)的黃金法則。其原理是兩個(gè)字節(jié)之間的間隔時(shí)間超過(guò)某個(gè)閾值就認(rèn)為一幀結(jié)束。這個(gè)閾值UART_FRAME_TIMEOUT的設(shè)定是門(mén)藝術(shù)。如何計(jì)算超時(shí)閾值這不是隨便填個(gè)100ms就行。它必須大于一個(gè)字節(jié)的傳輸時(shí)間但遠(yuǎn)小于兩幀之間的實(shí)際間隔。字節(jié)傳輸時(shí)間T_byte (1 / Baudrate) * (1 DataBits StopBits ParityBit) * 1000 ms。 例如在9600波特率、8數(shù)據(jù)位、1停止位、無(wú)校驗(yàn)下T_byte (1/9600) * 10 * 1000 ≈ 1.04ms。經(jīng)驗(yàn)值通常設(shè)置為3 * T_byte到5 * T_byte。對(duì)于9600波特率可以設(shè)為3-5ms。對(duì)于115200波特率則約為0.26ms ~ 0.43ms。系統(tǒng)影響Get_SystemTick()的精度直接影響超時(shí)判斷。如果使用簡(jiǎn)單的循環(huán)計(jì)數(shù)作為tick在低功耗或任務(wù)繁忙時(shí)可能不準(zhǔn)推薦使用硬件定時(shí)器產(chǎn)生精確的毫秒級(jí)tick。避坑指南坑1閾值太小。在MCU忙于處理其他高優(yōu)先級(jí)任務(wù)如另一個(gè)中斷時(shí)可能無(wú)法及時(shí)響應(yīng)串口中斷導(dǎo)致字節(jié)間隔被拉長(zhǎng)從而引發(fā)意外的超時(shí)斷幀。解決方案是適當(dāng)增大超時(shí)閾值或提高串口中斷優(yōu)先級(jí)???閾值太大。會(huì)導(dǎo)致系統(tǒng)響應(yīng)變慢。一幀數(shù)據(jù)發(fā)完后需要等待一個(gè)超時(shí)周期才能被處理降低了實(shí)時(shí)性。終極方案超時(shí)定界符雙重判斷。對(duì)于文本協(xié)議可以先判斷定界符如果收到定界符立即處理同時(shí)設(shè)置一個(gè)較長(zhǎng)的保護(hù)性超時(shí)如100ms防止因丟失定界符導(dǎo)致緩沖區(qū)永不釋放。3.3 策略三長(zhǎng)度字段Length Field法這是最嚴(yán)謹(jǐn)、最高效的方法廣泛應(yīng)用于自定義二進(jìn)制協(xié)議或標(biāo)準(zhǔn)協(xié)議如Modbus。協(xié)議格式通常為[幀頭][長(zhǎng)度][數(shù)據(jù)][校驗(yàn)]。實(shí)現(xiàn)示例// 在Uart_Proc或?qū)iT(mén)的解析狀態(tài)機(jī)中 typedef enum { STATE_HEADER, STATE_LENGTH, STATE_DATA, STATE_CHECK } uart_parse_state_t; static uart_parse_state_t state STATE_HEADER; static uint8_t pkg_length 0; static uint8_t pkg_data[256]; static uint8_t data_index 0; void Uart_Parse_StateMachine(uint8_t byte) { switch(state) { case STATE_HEADER: if(byte 0xAA) { // 假設(shè)幀頭是0xAA state STATE_LENGTH; data_index 0; } break; case STATE_LENGTH: pkg_length byte; // 第二個(gè)字節(jié)是數(shù)據(jù)域長(zhǎng)度 if(pkg_length sizeof(pkg_data)) { // 長(zhǎng)度異常復(fù)位狀態(tài)機(jī)防止緩沖區(qū)溢出 state STATE_HEADER; } else { state STATE_DATA; } break; case STATE_DATA: pkg_data[data_index] byte; if(data_index pkg_length) { state STATE_CHECK; } break; case STATE_CHECK: // 計(jì)算并校驗(yàn)CRC if(Verify_CRC(pkg_data, pkg_length, byte)) { // 校驗(yàn)通過(guò)提交給應(yīng)用層 App_Handle_Package(pkg_data, pkg_length); } state STATE_HEADER; // 無(wú)論對(duì)錯(cuò)回到開(kāi)始 break; } } // 在Uart_Proc中每收到一個(gè)字節(jié)就調(diào)用一次狀態(tài)機(jī) // Uart_Parse_StateMachine(rx_byte);經(jīng)驗(yàn)之談狀態(tài)機(jī)是處理復(fù)雜協(xié)議的不二法門(mén)。它的優(yōu)勢(shì)在于邏輯清晰能夠優(yōu)雅地處理幀不完整、數(shù)據(jù)錯(cuò)誤等異常情況。在“做題”或面試中能寫(xiě)出清晰的狀態(tài)機(jī)解析代碼絕對(duì)是加分項(xiàng)。務(wù)必注意狀態(tài)機(jī)的復(fù)位條件在幀頭錯(cuò)誤、長(zhǎng)度非法、校驗(yàn)失敗等情況下必須能回到初始狀態(tài)避免“卡死”。4. 數(shù)據(jù)緩沖區(qū)的管理與優(yōu)化實(shí)戰(zhàn)緩沖區(qū)是Uart_Proc的“心臟”。管理不善輕則數(shù)據(jù)錯(cuò)亂重則內(nèi)存越界導(dǎo)致系統(tǒng)崩潰。我們深入聊聊緩沖區(qū)的設(shè)計(jì)。4.1 環(huán)形緩沖區(qū)Ring Buffer/Circular Buffer的引入前面例子用的線性緩沖區(qū)索引的方式在簡(jiǎn)單場(chǎng)景下沒(méi)問(wèn)題。但當(dāng)數(shù)據(jù)吞吐量大或者接收和解析速度不匹配時(shí)問(wèn)題就來(lái)了如果一幀數(shù)據(jù)還沒(méi)處理完新一幀的數(shù)據(jù)又來(lái)了就會(huì)覆蓋舊數(shù)據(jù)。環(huán)形緩沖區(qū)是解決這個(gè)問(wèn)題的標(biāo)準(zhǔn)答案。環(huán)形緩沖區(qū)的核心思想把一塊線性內(nèi)存的首尾相連邏輯上形成一個(gè)環(huán)。用兩個(gè)指針或索引head寫(xiě)指針和tail讀指針來(lái)管理。head指向下一個(gè)可寫(xiě)入的位置。tail指向下一個(gè)可讀取的位置。緩沖區(qū)空head tail緩沖區(qū)滿(head 1) % BUFFER_SIZE tail犧牲一個(gè)存儲(chǔ)單元的判斷法在UART中斷和主循環(huán)中的分工// 全局定義環(huán)形緩沖區(qū) #define UART_RX_RING_BUFFER_SIZE 256 uint8_t uart_rx_ring_buf[UART_RX_RING_BUFFER_SIZE]; volatile uint16_t rx_ring_head 0; // 寫(xiě)索引在中斷中修改 volatile uint16_t rx_ring_tail 0; // 讀索引在主循環(huán)中修改 // 在UART接收中斷服務(wù)程序中 void USART1_IRQHandler(void) { if(USART_GetITStatus(USART1, USART_IT_RXNE)) { uint8_t data USART_ReceiveData(USART1); uint16_t next_head (rx_ring_head 1) % UART_RX_RING_BUFFER_SIZE; if(next_head ! rx_ring_tail) { // 判斷是否滿 uart_rx_ring_buf[rx_ring_head] data; rx_ring_head next_head; } else { // 緩沖區(qū)已滿可以設(shè)置錯(cuò)誤標(biāo)志或丟棄最舊數(shù)據(jù)謹(jǐn)慎 // buffer_overflow_flag 1; } } } // 在Uart_Proc主循環(huán)函數(shù)中 void Uart_Proc(void) { while(rx_ring_tail ! rx_ring_head) { // 緩沖區(qū)不為空 uint8_t rx_byte uart_rx_ring_buf[rx_ring_tail]; rx_ring_tail (rx_ring_tail 1) % UART_RX_RING_BUFFER_SIZE; // 將rx_byte送入之前提到的狀態(tài)機(jī)進(jìn)行解析 Uart_Parse_StateMachine(rx_byte); } // ... 其他處理 }關(guān)鍵點(diǎn)head和tail索引在中斷和主循環(huán)中被分別修改因此它們必須聲明為volatile防止編譯器優(yōu)化導(dǎo)致數(shù)據(jù)不一致。同時(shí)緩沖區(qū)大小的設(shè)置需要權(quán)衡太小容易溢出太大浪費(fèi)內(nèi)存。一般根據(jù)波特率、數(shù)據(jù)包最大長(zhǎng)度和系統(tǒng)處理能力來(lái)估算。例如115200波特率下每秒最多可接收約11520字節(jié)如果處理函數(shù)最壞情況100ms執(zhí)行一次那么緩沖區(qū)至少需要1152字節(jié)再留些余量2048字節(jié)可能是個(gè)安全的選擇。4.2 雙緩沖與乒乓緩沖對(duì)于數(shù)據(jù)量極大、實(shí)時(shí)性要求極高的場(chǎng)景如高速數(shù)據(jù)采集還有更高級(jí)的策略。雙緩沖Double Buffering準(zhǔn)備兩個(gè)緩沖區(qū)A和B。中斷向A寫(xiě)數(shù)據(jù)寫(xiě)滿后切換指針讓中斷向B寫(xiě)同時(shí)通知主循環(huán)處理A中的數(shù)據(jù)。這完全消除了讀寫(xiě)競(jìng)爭(zhēng)。乒乓緩沖Ping-Pong Buffer可以看作是雙緩沖的推廣使用多個(gè)緩沖區(qū)組成一個(gè)隊(duì)列實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者的完全解耦。這些高級(jí)技巧在單片機(jī)裸機(jī)編程中不常用但在帶RTOS的系統(tǒng)或Linux等復(fù)雜環(huán)境中是處理高速數(shù)據(jù)流的利器。對(duì)于大多數(shù)“做題”和中小型項(xiàng)目環(huán)形緩沖區(qū)已經(jīng)足夠強(qiáng)大和優(yōu)雅。5. 錯(cuò)誤處理與健壯性設(shè)計(jì)讓代碼更“抗造”一個(gè)只能處理理想數(shù)據(jù)的Uart_Proc是不合格的。工業(yè)環(huán)境復(fù)雜干擾多必須考慮各種異常。5.1 硬件錯(cuò)誤處理在STM32等MCU的HAL庫(kù)或LL庫(kù)中串口狀態(tài)寄存器SR/ISR會(huì)指示各種錯(cuò)誤溢出錯(cuò)誤ORECPU或DMA沒(méi)來(lái)得及讀取RDR寄存器新數(shù)據(jù)又來(lái)了覆蓋了舊數(shù)據(jù)。解決方案在初始化時(shí)使能錯(cuò)誤中斷在錯(cuò)誤中斷中讀取SR寄存器清除錯(cuò)誤標(biāo)志并重置接收流程。同時(shí)檢查你的Uart_Proc或DMA配置是否處理得太慢。噪聲錯(cuò)誤NE、幀錯(cuò)誤FE、校驗(yàn)錯(cuò)誤PE通常由物理線路干擾、波特率不匹配或奇偶校驗(yàn)設(shè)置錯(cuò)誤引起。處理策略在錯(cuò)誤中斷中記錄錯(cuò)誤類型用于調(diào)試丟棄當(dāng)前錯(cuò)誤字節(jié)并可能需要讓協(xié)議層發(fā)起重傳。void USART1_IRQHandler(void) { // 處理接收數(shù)據(jù) if(__HAL_UART_GET_FLAG(huart1, UART_FLAG_RXNE)) { // ... 讀取數(shù)據(jù)到緩沖區(qū) } // **處理硬件錯(cuò)誤** if(__HAL_UART_GET_FLAG(huart1, UART_FLAG_ORE) || __HAL_UART_GET_FLAG(huart1, UART_FLAG_FE) || __HAL_UART_GET_FLAG(huart1, UART_FLAG_PE)) { // 1. 讀取SR寄存器以清除錯(cuò)誤標(biāo)志HAL庫(kù)中通常調(diào)用__HAL_UART_CLEAR_FLAG __HAL_UART_CLEAR_FLAG(huart1, UART_CLEAR_OREF | UART_CLEAR_FEF | UART_CLEAR_PEF); // 2. 可選讀取數(shù)據(jù)寄存器DR以清空它避免后續(xù)正常數(shù)據(jù)被卡住 volatile uint8_t temp huart1.Instance-DR; // 3. 設(shè)置軟件錯(cuò)誤標(biāo)志供主循環(huán)查詢和處理 uart_hw_error_flag 1; // 4. 對(duì)于嚴(yán)重錯(cuò)誤可以考慮重置接收狀態(tài)機(jī)和緩沖區(qū) Reset_Uart_Receive_State(); } }5.2 軟件邏輯容錯(cuò)緩沖區(qū)溢出防護(hù)前面環(huán)形緩沖區(qū)已實(shí)現(xiàn)。務(wù)必在緩沖區(qū)滿時(shí)做出合理決策是丟棄最舊數(shù)據(jù)、丟棄最新數(shù)據(jù)還是設(shè)置錯(cuò)誤標(biāo)志讓系統(tǒng)進(jìn)入安全狀態(tài)這取決于你的應(yīng)用場(chǎng)景。協(xié)議解析異常在狀態(tài)機(jī)解析中對(duì)每個(gè)狀態(tài)都要定義超時(shí)復(fù)位。如果長(zhǎng)時(shí)間停留在某個(gè)非終態(tài)比如收到了幀頭但一直等不到長(zhǎng)度字節(jié)一定要能自動(dòng)復(fù)位避免“死鎖”。數(shù)據(jù)校驗(yàn)CRC校驗(yàn)是二進(jìn)制協(xié)議的標(biāo)配。即使是文本協(xié)議也可以增加一個(gè)簡(jiǎn)單的累加和校驗(yàn)Checksum。校驗(yàn)失敗的數(shù)據(jù)包必須丟棄并可通過(guò)串口打印警告或統(tǒng)計(jì)錯(cuò)誤率。心跳與超時(shí)重連對(duì)于重要的通信鏈路可以在應(yīng)用層實(shí)現(xiàn)心跳包機(jī)制。如果長(zhǎng)時(shí)間如3秒收不到任何數(shù)據(jù)或心跳回復(fù)可以判斷為鏈路斷開(kāi)并嘗試重新初始化串口或通知用戶。6. 從阻塞到非阻塞發(fā)送過(guò)程的優(yōu)化很多初學(xué)者只關(guān)注接收忽略了發(fā)送。一個(gè)低效的發(fā)送過(guò)程同樣會(huì)拖垮系統(tǒng)。阻塞式發(fā)送反面教材void UART_SendString(char *str) { while(*str) { while(!UART_GetTxEmptyFlag()); // 死等直到發(fā)送緩沖區(qū)空 UART_SendByte(*str); } }這段代碼在UART_SendString函數(shù)內(nèi)死循環(huán)直到所有字節(jié)發(fā)送完畢。在此期間CPU無(wú)法執(zhí)行其他任務(wù)系統(tǒng)響應(yīng)性極差。非阻塞式發(fā)送推薦做法思路同樣是利用緩沖區(qū)中斷或DMA。應(yīng)用層只需將待發(fā)送數(shù)據(jù)拷貝到發(fā)送緩沖區(qū)并啟動(dòng)發(fā)送。剩下的由中斷自動(dòng)完成。// 發(fā)送環(huán)形緩沖區(qū) uint8_t uart_tx_ring_buf[TX_BUF_SIZE]; uint16_t tx_head 0; // 應(yīng)用層寫(xiě)指針 volatile uint16_t tx_tail 0; // 中斷讀指針 volatile uint8_t tx_busy 0; // 發(fā)送器忙標(biāo)志 // 應(yīng)用層調(diào)用此函數(shù)來(lái)發(fā)送數(shù)據(jù)非阻塞 int UART_Async_Send(uint8_t *data, uint16_t len) { uint16_t i; // 先檢查緩沖區(qū)剩余空間是否足夠 if(GetTxBufFreeSize() len) return -1; // 空間不足返回錯(cuò)誤 // 將數(shù)據(jù)拷貝到發(fā)送緩沖區(qū) for(i 0; i len; i) { uart_tx_ring_buf[tx_head] data[i]; tx_head (tx_head 1) % TX_BUF_SIZE; } // 如果發(fā)送器空閑則啟動(dòng)它 if(!tx_busy) { tx_busy 1; // 開(kāi)啟發(fā)送緩沖區(qū)空中斷TXE UART_EnableTXEInterrupt(); // 注意第一次需要手動(dòng)觸發(fā)中斷或者直接寫(xiě)一個(gè)字節(jié)到DR寄存器來(lái)啟動(dòng)發(fā)送鏈 UART_SendFirstByteFromBuffer(); } return 0; // 成功提交發(fā)送任務(wù) } // 在發(fā)送中斷服務(wù)程序中 void USARTx_TX_IRQHandler(void) { if(UART_GetITStatus(TXE)) { // 發(fā)送緩沖區(qū)空 if(tx_tail ! tx_head) { // 還有數(shù)據(jù)要發(fā) UART_SendByte(uart_tx_ring_buf[tx_tail]); tx_tail (tx_tail 1) % TX_BUF_SIZE; } else { // 所有數(shù)據(jù)發(fā)送完畢關(guān)閉TXE中斷避免持續(xù)進(jìn)入中斷 UART_DisableTXEInterrupt(); tx_busy 0; // 標(biāo)記發(fā)送器空閑 // 可選觸發(fā)一個(gè)“發(fā)送完成”回調(diào)函數(shù)通知應(yīng)用層 if(tx_complete_cb) tx_complete_cb(); } } }這樣UART_Async_Send函數(shù)幾乎可以立即返回CPU的時(shí)間被釋放出來(lái)處理其他任務(wù)。整個(gè)發(fā)送過(guò)程在后臺(tái)由中斷驅(qū)動(dòng)完成效率極高。7. 調(diào)試技巧與問(wèn)題定位當(dāng)通信不正常時(shí)即使代碼寫(xiě)得再完美在實(shí)際硬件上跑也可能遇到各種問(wèn)題。分享幾個(gè)我常用的調(diào)試“組合拳”硬件第一首先用示波器或邏輯分析儀抓取TX/RX引腳上的波形。這是最權(quán)威的證據(jù)。檢查波特率是否正確測(cè)量一個(gè)位的時(shí)間電平是否匹配TTL是3.3V/5VRS232是正負(fù)電壓波形是否干凈有無(wú)毛刺、振鈴軟件打印法如果硬件沒(méi)問(wèn)題就在Uart_Proc的關(guān)鍵節(jié)點(diǎn)插入調(diào)試信息通過(guò)另一個(gè)串口或LED、LCD打印出來(lái)。打印每次進(jìn)入中斷收到的字節(jié)十六進(jìn)制。打印環(huán)形緩沖區(qū)的head和tail指針觀察是否正常增長(zhǎng)和消費(fèi)。打印狀態(tài)機(jī)的當(dāng)前狀態(tài)。邊界條件測(cè)試快速連續(xù)發(fā)送測(cè)試緩沖區(qū)溢出處理。發(fā)送錯(cuò)誤數(shù)據(jù)包測(cè)試協(xié)議解析的容錯(cuò)性。長(zhǎng)時(shí)間靜默后發(fā)送測(cè)試超時(shí)機(jī)制是否生效。電源抖動(dòng)測(cè)試在通信過(guò)程中模擬電源干擾看系統(tǒng)能否自恢復(fù)。使用專業(yè)工具串口調(diào)試助手不僅是收發(fā)數(shù)據(jù)。高級(jí)助手如SecureCRT、MobaXterm或開(kāi)源的CuteCom可以發(fā)送二進(jìn)制文件、顯示十六進(jìn)制、進(jìn)行流量統(tǒng)計(jì)非常有用。虛擬串口軟件如com0com可以在同一臺(tái)電腦上虛擬出兩個(gè)互連的串口方便在沒(méi)有硬件的情況下測(cè)試收發(fā)邏輯。寫(xiě)一個(gè)穩(wěn)定可靠的Uart_Proc遠(yuǎn)不止是實(shí)現(xiàn)功能那么簡(jiǎn)單。它涉及到中斷與輪詢的平衡、緩沖區(qū)管理、狀態(tài)機(jī)設(shè)計(jì)、錯(cuò)誤處理、性能優(yōu)化等多個(gè)層面。每一次“做題”或項(xiàng)目實(shí)踐都是對(duì)這些概念的深化。希望我這些從無(wú)數(shù)調(diào)試夜晚中總結(jié)出的經(jīng)驗(yàn)?zāi)軒湍闵僮咝澛氛嬲裊ART這個(gè)基礎(chǔ)工具用得得心應(yīng)手。記住好的通信代碼是“靜默”的——它平時(shí)默默無(wú)聞地工作但在各種異常情況下總能優(yōu)雅地處理不給系統(tǒng)添亂這才是我們追求的目標(biāo)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲偷拍欧美激情| 91色堂| 成人黄页| 91伊人久久在线| 免费观看啪视频| 麻豆天美传媒毛片| 一区二区三区色综合| 中国女人内射6XXXXX| 超碰在线在公开超碰在线在公开| 亚洲欧美精品91| 国产日韩精品人妻久久久久色欲网站| 情色大香蕉| 国产精品。| 天天躁日日躁AAAXX| 精品国产乱码久久久久久蜜臀| 亚洲精品欧洲精品| 国产乱弄免费在线视频。| 亚洲中文日韩欧美大香蕉视频| 好爽免费视频| 亚洲精品国产拍免费91在线| 日韩色女精品| 国产AV线| 99re在线精品78| 精品一区96| www.久久久久| 国产超碰| 欧美 亚洲 制服 精品| 无码国产精品久久久久| 日韩精品一区二区日韩| www久久国产精品| 夜夜嗨一区二区| 国产小炒后入式| 九九香蕉网| 欧美亚洲尤物久久| 国产日韩欧美亚洲精品95| 好色综合| 日韩在线国产字幕| 夜夜欢天天干| 啊啊啊慢点| 大香蕉在线视频重口味毛片在线| 国产超碰在线| 国产a级午夜毛片| 无码日韩人妻av一| 不卡啪啪视频| 婷婷丁香五月激情啪啪| 欧美刺激色黄片免费看| 日小BB小视频| 亚洲国产av中文字幕久久| 校园春色亚洲| 又粗又长又爽在线观看| 在线不卡视频| 男人的天堂在线有码| 开心激情站| 99热啪啪| 亚洲情色电影网| 日本一级一级一级一级| 久久激情综合| 久久久96精品| 色色青青久久| 少妇久久| 欧美日韩性爱操大逼| 日韩av不卡在线看| 亚洲最大无码中文字幕网站| 五月婷婷综合网| 欧美色图亚洲色图成人在在线| 激情综合五月| 久久有码| 欧美综合亚洲| 中国AV美女| 国模私拍一区二区三区神乳| 老熟妇一区二区三区…| 中文字幕在线观看丝袜| av天天在线观看| 欧美亚男人的天堂| 香蕉大久久久| 成人免费性爱视视| 99色| 少妇天堂网络| 欧洲综合色图| 欧美亚洲天堂| 免费超碰97在线观看| 97国产成人精品免费视频| 久久久久久国产精品| 97色97好| 91日韩网站| 懂色Av| 国产成人欧美一区二区三区的国产| 女人 A一级| 青青青草原| 一个国产在线综合网站| 围产精品一区二区三区视频播放| 国产美女自拍AV| 亚洲成人性爱网站在线播放| 日韩欧美亚洲一区二区三区影院| 3571色综合一区二区二区| 日韩伦理视频| 丝袜 中出 制服 人妻 美腿 中文字幕| 中文视频在线观看| 日韩欧美字幕亚洲一区二区| 日韩午夜国产| 天天综合中文字幕 91| 精…码一二三区| 久久社区一区二区三区| 另类综合另类| 婷婷人妻激情| 18禁超污无遮挡无码免费网| 欧美78| 亚洲熟女av中文字幕| 日韩中文字幕人妻视频| 亚洲少妇色| 久艹视频在线| 日韩色欲久久一二三四区| 乱人伦 国语对白:视频直接看| 裸体美女久久久| 蜜乳AV免费观看| 丰满的三级少妇欧美久久久| 夜草欧美| 天天做日日做| 欧美熟妇操操视频| 人人妻人人爽 97人人看碰人免费公开视频| 国产18精品亚洲精品| 东北女人的毛片| 亚州欧美色图| 97视频网站在线观看| 大香蕉手机在线| 色噜噜精品一区二区三| 久久超碰av在线| se01国产在线视频| 色狠狠一区二区三区香蕉| 国产精品无套内谢| 天堂网 主播 亚洲| 成人三一级一片aaa| 91夜夜蜜桃臀1区2区3区| 天天看天天日天天操| 97人人夜夜精品视频| 最新欧美色网| yiqicaoav| 亚洲熟妇乱女区二区三区| 另类小说欧美激情校园春色| 东京热男人的天堂网| 国产视频大全| aⅴ日韩成人电影av在线免费看av大全 | 69精品在线| 人人喜人人妻| 欧洲特黄毛片免费看欧洲毛片| 97人人干| 一级二级三级黑人无码| 欧美aⅴ99久久黑人专区| 日韩av性爱在线播放| 91视频观看网站| se吧提供国产乱老熟视频胖女人| 色制服丝袜夫妻av一区| 最新国产精品久久精品| 日日97| 日本精品一区三区| 一级人妻性爱视频| 五十路熟女,国产欧美精品区一区二区三区| 翔田千里一区二区三区奶水| 人妻精品一区一区三区蜜桃91| 欧亚性爱视频免费看| 伊人午夜福利视频| 日韩 人妻 精品| 亚洲,日韩,欧美,成人播放| 亚洲区限制级| 天天爱天天韩国日本牛牛牛牛| 日韩亚洲欧美中文字幕| 中国黄色特级精品一区二区三区片| 男人的天堂2019AV| 日韩熟女操逼| 九九九九AV| 台湾大香蕉99热| 日本色色色视频| 91熟女丨老女人| 日韩精品人妻中文字幕久久久| 色综合av男人天堂| 亚洲AV麻豆Aⅴ无码电影一| 果冻传媒一区二区三区| 少妇蜜汁| 欧美很很操视频| 老熟女乱伦片| 78精品在线| 青青草五月天| 宅男午夜在线视频| a在线观看| 又粗又长又爽在线观看| 91伊人| 熟女久久久| 午夜福利久久久噜久噜久久综合 | 风骚少妇视频中文字幕| 欧美日韩资源在线| 婷色五月| 欧美疯狂做爰xxxx| 在线色导航| a片 xxxx受爽视频| 97频视在线| 日日干夜夜干| 久久99精品视频| 国产亚洲精品无码三区| 国产白丝精品在线观看| 亚洲av资源| 999九九九九国产动| 色91综合网| 蜜桃久久综合视频| 少妇第一页| 91天堂网| 成人久久久| 久久大香蕉97| 日韩情色一区二区| 欧洲综合色| 嗯嗯啊啊的视频| 色五月69夫妻| 久久久婷婷| 精品99999久久久久久| 午夜福利成人免费视频| www.久久99| www.99在线| 尤物一级在线免费观看| 国产一区二区在线播放量| 99久久久无码国产精品性啊聊| 欧美草草高清日韩视频| 亚州性色| 亚洲熟女人妻中文字幕一区二区| 国产精品白丝www| 涩亚洲欧洲| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 中文字幕天天天天天| 久久伊人五月天| 日美免费黄片| 欧美刺激色黄片免费看| 日韩高潮一区| 91女网站| 97爱b| 亚洲Av噜噜一区二区三区妖精| 久久久久久性爱视频| av操操不卡| 久久日本熟女精品一区| 老熟女综合网| 婷婷色综合欧美日韩| 日本成熟少妇A∨网站| 偷拍偷窥与盗摄视频专区| 2024黄色视频| 精品国产丝袜一区二区三区乱码 | 日韩av三四区| 亚洲成?V人片在线观看福利| 婷婷激情五月| 91操操操操| 亚州综合色| 精品国产一区探花在线观看| 91影库| 26uuu欧美| 大香蕉520| 国产农村一一级特黄毛片| 欧美性色综合网| 大香蕉免| 免费97视频| 国产一区在线免费播放| 久夜视频| 桃花色综合影院| 超碰97人人cao| 在线免费观看日韩一区| 91狠狠综合久久| 天天综合网久久ww| 91老妇女| 乱伦Av网| 麻豆婷婷成人一二三| 欧美综合色综合| 香蕉欧美| 强免费黄色网址| 成人情色一区二区| 成人AV在线网站| 综合伊人激情| 偷窥自拍亚洲色图| 97色操| 五月婷网站| 水澄无码AV| 国产女人9999| 中文字幕美女91| 懂色AV蜜臀无码精品APP | 神马久久久久久久久| 久久伊人最新网址视频| 99热这里只有精品地址| 亚洲城人男人的天堂| 亚洲91射| 91免费看一区二区三区| 99激情视频| 天堂涩涩| 特级特黄一级毛片免费| 国产乱弄免费在线视频。| 600国产精品视频| 去干网最新版| 久久熟女久| 国产午夜福利专区综合| 国产精品高潮久久AV| 蜜桃久久综合视频| 1000部熟女视频在线观看| 欧美性爱十八禁| 超碰人妻中文在线| 亚洲天堂五月天国产| 日韩AV一起草| 99这里只有精品| 黄色一区二区秘书性感| 伊人操操| 婷婷中文网| 亚州色国| 亚洲AV成人无码一区二区三区在线观看 | 欧美亚洲天天| 99日精品欧美国产| 淫穴高潮色图| 青青操青娱乐| 免费观看日本操逼视频| 国产精品国产自产拍高清AV| 亚洲第一无码播放立川理惠| 牛牛久久国产精品视频一二三| 久久夜夜| 国产农村妇女精品一| 青娱乐淫乱1314| 九九热超碰97亚洲最新香蕉| 欧美特大AA级黄片| 一二三四视频在线社区中文字幕| 日韩中文字幕人妻视频| 精品乱码在线观看| 欧美一级做a爰片免费视频| 超碰综合97在线| 色爱国产| 精品超碰中文在线| 一个国产在线综合网站| 嗯~啊~快点 死我视频| 中字乱伦AV| 国产美脚女优尤物在线观看| 摸奶性爱视频网站在线免费播放| 人妻啊啊人妻啊| 91精品网站| 嗯嗯啊操我| 极品综合| 国产精品一区二区亚洲人成毛片 | 超碰在线在公开超碰在线在公开| 久操com| 超碰视97中文| 久久天天性久久伊人| 综合亚洲网| 9九九九九视频在线观看| 天天综合官网| 精品国产久久乱码| 九九色色| 91精品无码人妻系列| 久久精品99久久久久久| 人妻少妇精品一区二区三区| 91看黄片| 亚洲欧洲日韩中文字幕一区| 久草成人福利导航| 人人摸人人添人人操| 狠狠入| 偷拍自拍在线视频观看| 91久久久老司机| 三级激情网站| 大肥女高潮bbwbbwhd视频| 国产热av| 97视频620| 国产三级多多影院2022国产AA一级毛片无码 | 操操啪| 一区二区三区美女超清| 夜夜无码| 深夜激情 | 五月丁香综合激情| 偷拍 精品另类 凸凹了四区| 无码操逼网| 久久久97| 成人性生活高清视频在线播放| 九九热精彩视频| 日韩色欲久久一二三四区| 久久激情婷婷| 青青草在线视频播放器| 久久久婷| 97玖玖人妻| 久草视频分类在线| 欧美日韩国产中文精品字幕自在自线| 曰韩中文人妻视频| 人妻激情视频| 91高清欧美| 成人精品水蜜桃久久久久久久| 97 超碰 人人做 人人爱| 99性爱视频| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 精品人妻一区二区三区四区石在线| 超碰吊日色| 99少妇| 色香综合| 99久久亚洲精品无码毛片潘甜甜 | 欧美日日夜夜| 97网址97| 欧美天天影院| 天天网综合| 综合另类| 干日本人少妇午夜寂寞影院| 噜噜噜无码AV一级一级久久影院 | 亚洲97精品| 国产操逼网站亚洲一级黄色| 日韩黄色av中文字幕| 三级特黄60分钟播放| 八人操人人摸人人看| 亚洲欧美中文一区二区三| 日本视频一区二区三区| 人妻精品一区二区在线| 狠狠久久亚洲欧美专区| 日韩/97| 久草精品一区| 欧美色图91| 边做饭边操逼逼| 黄色片一区二区三区四区五区| 亚洲第一黄色av网站| 国产激情片在线观看| 狼人久草| 欧美精品91| 综合色久欲| 欧美牲| 美国aaaaa一级黄片| 日欧操屄视频| a人欧美综合天堂麻豆| 熟女露脸激情自拍视频| 色色毛片| 国模吧 一区二区三区| 女人天堂AV五区在线| 嫩草影院永久在线制服丝袜| 人妻丝袜一区二区三区在线| 18啪啪手机免费性爱| 亚洲欧洲综合视频在线| 91丝袜激情在线| 日本熟妇自慰性高潮一区二区三区| 好吊色综合| 少妇xx精品| 射 色综合| 色悠久久久av| 中文日本免费高清| 伊人大香蕉在线| 国产AV线| 性爱免费视频成人| 九九久久久久久爱| 亚洲黄色| 色香色欲天天综合网天天来吧| 岛国小电影| 日韩久射综合| 91久久婷婷| 蜜乳av一区二区三区四区不卡| 91另类| 中日高清无码操逼视频| 九九九九精品一区| 1人人看人人摸人人操| 另类图片五月| 日韩三级av片| 丝袜美腿操av| 激情久久久| 九月婷婷| 日日妻色网| 国产精品视频麻豆入口| 国产精品懂色tv影视免费观看| 九九热精品视频六| 欧美日韩性爱操大逼| 超硑97精品| 99久久久无码国产精品性啊聊| 97精品97| 激情熟女12P| 91超级碰碰碰| 人人妻人人色一区二区三区| 日韩午夜精品一区二区三区电影| 91中文精品日韩欧美在线| 97在线观看免费视频| 超碰99在线观看| 久欲AV| 操高情无码| 97视频900| 久久精品国产99精品亚洲蜜...| 色狠狠综合噜一二三区| 国产呦精品系列在线观看| 无码丰满熟妇一区二区浪潮AV| 精品一二三区久久AAA片| 九九久久精品| 成人电影一区| 人澡逼| 亚洲欧洲国产综合av| 秋霞免费AV| 狠狠2050在线观看| 中文字幕乱偷人妻久久艾草网| 人人妻人人爽 97人人看碰人免费公开视频 | wwwcaobibi| 96精品久久| 欧亚 另类 久| 婷婷色影院| 九九九九国产| 久久男人网| 国产精品婬乱一级毛片彝族| 亚洲成人在线资源| 狠狠干狠狠干| 小视频国产| 国产精品片| 午夜精品久久久久久久99热影院| 亚乱色| 深喉吞精| 99 国产丝袜在线| 性爱av在线免费观看| 天天影视亚洲| 老鸭窝黄色视频网站| 人人扣人人操| 亚洲精品免费中文字幕| 在线视频免费播放一区| 1024亚洲中文字幕久在线看片你懂的 | 欧美爆乳精品一区二区| 97超碰9| 人人干人人搞人人摸| 嗯嗯啊啊日韩精品| 国产91美女高潮| 国产最新小视频在线播放下载| 超碰久久精品| 亚洲欲色9532548967一区| 自拍偷拍草一草| 99久在线精品99re8| 91n美女视频| 欧美精品久久久久久久久88| 一起草三级AV电影在线观看 | 蜜桃传媒视频第一区入口在线看| 丝袜内射| 伊人久久婷婷| 国产精品干干干| 国产熟女精品一区二区| 一级免费精品| 最新av在线| 2011国产精品| 婷婷视频网| 超碰成人公开| 欧美色www亚洲国产阿娇要播| 欧美人妻一区二区| 97国产色图 | 国产精品天堂| 日本精品加勒比海一区| 91女优在线观看| 亚洲五区熟女| 久久九九一区二区三区成人| 婷婷久草一区二区三区| 乱色视频中文字幕| 亚洲乱码国产乱码精网站| 亚洲国产成人精品999| 美女国产一区二区久久| 人妻素股| 日韩熟女乱伦中出| 久久av一级av少妇av高潮| 日韩人妻有码免费视频| 天天日天天插| 精品美女少妇一区二区| 高跟丝袜AV专区国产| 在线中文字幕极品av| 成人av影院在线观看| 97视频免费播放| 午夜操一视频一区| 岛国天天午夜影院传媒网| 亚洲.欧美.丝袜.中文.综合| 亚洲 欧美综合| 自拍内地三级在线观看| 亚洲色图殴美色图激情乱伦| 超碰97资源大奶| 六月丁香网| 激情在线青青操| 综合网少妇| 91制服丝袜| 亚洲高清欧美总合| 丰满人妻区一区二区三| 中文字幕丰满人妻日本| jizz啪啪| 久久久久久久亚洲Av无码| 97欧美性爱| 亚洲无码一区二区三区三州| 亚洲综合九九| caorenqi shipin| 9久久9综合| 亚洲三级网址久久最新| 色九九九综合| 88在线一区二区三区| 插插综合网天天影视网| 色臀AV| 天天激清| 亚洲精品无码久久AV| 日韩av一级黄片| 久热超碰| 久久人妻熟女一区二区 | 91美女视频| 国产精品4p在线观看| 国产免a费看黄片在线| 成人性爱电影一区二区| 天美麻豆精品视频99| 亚洲91网。| 97草草| 一级一性爱免费视频| 精品国产一区二区三区香蕉欧美| 日韩在线观看中文字幕视频| 久jiu久神马影院| 久久超碰98| 黄色成年| 国产AV激情无码久久无码| 欧美色女人| 婷婷激情一区二区三区俺也去| 国产综合色精品在线观看| 国语人妻精彩刺激| 手机在线播放国产福利| 色噜噜人妻av中文字幕| 国产黄色剧情影片麻豆免费播放| 亚洲欧洲综合成人av一区| 亚洲日韩精品在线播放| 欧美亚洲丝袜美女电影| 日本久久久久久久久久| 黄片qw| 色区久久| 久久久内射良家| 97国产精品| 高清国产av无码| 99re99视频在线免费观看| 日韩有码专区| 91精品丝袜在线观看| 男生女生啊啊啊啊| 国产女大学生AV| 综合色色网| 大香蕉之青青草原| 亚欧毛片基地国产毛片基地| 亚洲天堂男人在线| 亚洲图片视频小说| 中文字幕一区电影在线观看| 亚洲日韩av一区二区三区百合| 亚洲图片 欧美电影| 插穴性爱视频在线观看| 中文乱码99| 欧美色乱| 男人天堂久久精品| 农村少妇久久久久久久| 午夜理论片在线观看免费| 人人澡人人弄| 国产一区二区三区白丝| 欧美美女啪啪视频| 国产精品九九九| 日韩AV片| 女优大全 - 91n| 色婷婷导航| 四虎免费在线播放| 人妻人人操| 毛片99-全集电影手机免费观看完整-B029AV | 青青草精品| 久草综合网| 国产情侣自拍在线播放| 欧美在线干| 日韩人妻 中文字幕| 性爱欧美五月| 91人妻中文| 中文字幕视频免费| 国语精品内射在线观看| 在线情色电影 91大| 色婷婷激一区二区三区| 欧美在线中M| 91精品啪在线观看国产城中村| 欧洲亚洲综合| 婷婷综合激情| 国产精品视屏| 亚洲欧美爆| 福利操逼| 91n.欧美| 欧美性特| 日韩欧洲操屄视频| 级品肉射| 婷婷五月综合在线| 日韩少妇无码| 99re69| 中国少妇XXXX做受| 欧美色图亚洲色,麻豆| 可以免费观看的AV| 日语五十路和六十路亚洲国产精品| 亚洲AV乱码专区国产噜噜亚洲| 另类小说综合网| 后入日本1234| 欧美色偷拍| 另类小说综合网| 青久久| 超碰97爽| 国产AV激情无码久久无码| 欧美综合1性辶| 日本免费一区二| 国产91乱伦| 久久久久久加勒比| 亚州久久9| 色色色欧美| 国语对白露脸XXXXXX| 香蕉色网| 亚洲国产精品久久久久婷婷青年| 无码天天操| 91久久久久久久久18| 狠综合网| 97久久精品亚洲| 免费精品中文字幕| 亚洲欧美小说| 99色在线| 91jk色拍| 精品区9| 无码在线亚洲| 欧美日韩国产一区二区小黄片大全| av草草在线电影| 熟妇人妻一区二区| 五月综合久久| 中文字幕一区电影在线观看| 粉嫩av在线| 国产熟码AV| 97超碰免费人人性爱| 伊人AAA| 无码免费精品高清| 操逼日批| 成年无码动漫av片无尽在线| 欧美肥臀在线| 中文字幕久久亚州无码| 日本女厕偷拍| 成人夜夜爽| 色婷婷导航| 天堂中文日本在线观看| 综合影院永久入口国产| 色97干| 国产91丝袜 在线播放| 97超碰这里只有精品| 亚洲伊人久久精品狠狠在线| 激情五月天色播| 五月天婷精品激情| 国产亚洲女v在线观看| 99久久无码| 思思热一热婷婷热一热| japan日本高清乱xxxx| 熟女激情综合网| 久久精品人妻一区| 91人妻在线视频| 激情欧美97| 久久精品国产97欧美精品亚洲 | 国产精品青草综合久久| 日韩激情啪啪| 7777欧美成是人在线观看| 亚洲精品三区在线观看| 嗯啊视频免费在线观看| 美女视频尤物网在线看| 日韩黄色av中文字幕| se吧提供91精品国产91久久久久久| 日韩97P| 午夜爽爽爽| 久久久久国产精品久久久| 中文久久久| 欧美色图亚洲激情| 99久久99久久免费精品蜜臀| 91处女在线观看| 放黄片放3级黄片没穿衣服| 国产精品熟女一区二区三区| 国产激情视频一区区三区| 色网色网色网色网色网色| 欧美色就是色| 免费观看网黄| 日韩亚洲中文有码视频| 欧美亚洲日本视频久久久| 亚洲免费人妻在| 亚洲国产欧美中文永久| 日日干日日| 极品粉嫩一区二区| 人人超碰在线观看黄| 欧美激色| 日韩精品啪啪啪| 中国人高清www色视频免费| 欧美日韩插逼视频| 免费看国产曰批40分钟怎么下载| 国产偷拍自拍在线视频| 一区二区激情国产熟女 | 色九久| 永久电影三级在线观看| 亚洲最大成人a毛毛片| 欧美视频中文字幕区| 日韩在线视频1234| 免费网站观看www在线观| 呻吟 欧美 日本 中出| 啊啊啊啊啊啊在线| 夜夜操美女| 91free福利| 91 丝袜在线| 99热线麻豆| 美女天天干| 欧美性爱一级操| 日韩AV电影网站| 一区二区国产视频在线观看| 蜜屁av| 九九热久久99精品re| 无码国产精品午夜不卡(| a男人的天堂| 91蜜桃传媒精品久久久一区二区| 天天日天天操天天射河南省| 免费作爱一级视频| 性色avv| 少好三P| 在线观看不卡一区二区三区| 国产高清无码一区二区三区四区皇冠| 岛国小电影| 亚洲在线观看| 操逼天美3区| 亚州色交| 97爱爱官网| 高清国产性猛交xxxx乱大交| 精品少妇一区二区三区免费观看| 久久久久久久久久久久欧美日| 国产女人视频三四五区| 日韩性爱播放| 欧美熟妇亚洲版| 久久AV无码AV| 亚洲无码色| 91美女高潮| 少妇无码av专区线| 丝袜内射| 欧美综合91| 久操热线| 久久久九九| 欧美成人AⅤ大片在线观看| 综合色图,成人综合网| 午夜福利一区二区三区四区五区色婷婷| 51国产午夜精品视频| 懂色综合久久久| 色区97| 色婷亚洲五月在线观看| 亚洲国产中文字幕| 欧美激情性爱视频网站| 青青草吊丝| 国产精品ww久久| 国产日本熟女顶级一区二区三区视频 | 中文字幕三四区| 少妇超碰在线| 亚洲欧美洲综合| 天天综合精品| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 亚洲一区二区精品福利| 91国产在线精品| 人妻少妇被猛烈进入中| 性色av一区二区| 亚洲一区二区三区不卡国产欧美| 日欧美色| 国产精品露脸在线观看| 东北老女人的激情视频| 午夜操逼不卡| 足交视频老司机| 国产 无码 一区二区| 久操影视| 亚洲综合色婷婷| 国产黄色在线播放观看| 久久精品老司| 91人妻精华帖| 熟妇高潮二区三区| 免费A V在线| 97资源亚洲| 亚洲情色91| 国产女人极品高潮毛片| 99热精品在线| av片在线观看免费播放| 国产伦精品一区二区三区在线观| 久久成人国产精品| gogogo免费高清看中国国语| 无码抄逼网| 97操| 翔田千里无码一区| 99精品热| 亚洲 国产 精品一区| 欧美日韩亚洲少妇寂寞影院正在播放 | 久久久久国产精品喷潮免费观看臀 | 国产精品精品系列在线观看| 亚洲第91页| 在线观看黄色电话| 91天堂| 一区二区精品更新提醒| 久久国产热视频97电影| 风间由美日韩欧美久久| 久久发布国产伦子伦精品| 欧美成人A√在线一区二区| 麻豆人妻偷人精品无码视频| 伊人99热| 天天操人人操狠狠插| 久久成人东京热人妻| 宅男91视频在线播放| 国产精品一级特黄aaa大片在线观看 | 国产精品盗摄 偷窥盗摄| 狠狠操狠狠燥| 国产偷人伦激情在线观看| 91热热色| 少妇一区二区三区高速| 五月丁香综合| 亚洲啪啪啪啪视香蕉| 午夜毛片亚洲精品片国产久久久| 熟妇操花| 九九人人操| 色欲久久综合| 久久久国产av美女私房| 91熟女视频网| 亚洲永久AV无码精品秋霞| 欧美黄色片AAAAA| 少妇厨房愉情理伦片bd在线观看| 精品大全99999| 免费人人搞97| 五月天婷婷欧美三区| 日韩一性一交一A片俄罗斯| 中文久久久| 无码人妻毛片丰满熟妇精品区| 青青草原综合久久大伊人精品| 亚洲无码一区二区三区三州| 国产精品久久久久久久AV大片| 亚洲精品国产拍免费91在线| 欧美国产有色电影| 男人的天堂成人的社区| 99视频只有精品| 午夜偷拍久久熟女| 综合av社区| 激情五月天中文字幕色| 久午视频| 97 国产精品| 99热大香蕉伊在线| 亚洲天堂人人妻| 欧美少妇一区二区三区| 天天日天天爽| 97福利视频| 综合自拍| 国产精品久久伊人| 日本午夜操逼| 中文字幕一区电影在线观看| 亚洲一区日韩精品| 中文字幕丰满人妻日本| 高清孕妇孕交 交| www男人天堂| 国产日韩美女小穴视频网站不卡| 欧美洲精品一级| 久久国产999| 亚洲日韩东京热一区| 欧美亚洲厕所精品偷拍91| 91夜夜蜜桃臀1区2区3区| 日日干日日操五月天伦理视频| 日韩三级久久久| 天天透伊人| 欧美日韩国产中文超碰| 97视频在线免费看| 欧美精品另类人妖xxxx| 1956日韩精品| 天天日日日射| 久久国产对白激情浪潮| av亚洲天堂资源网站| 一区二区三区四区久久视1| 中文字幕88av在线| 人妻丝袜一区二区三区在线| 亚洲色图 91| 久久久日本电影| 老熟女91| 久久国产AⅤ| 国产AV色黄看到爽| 亚洲成人一区二区精品| 亚洲成人久久美女| 亚洲激情综合| 亚洲。日韩。欧美| 91操碰| www.久久最新地址| 国产吹潮女在线观看| 爱欲AV| 国产又大又粗又长视频在线| 人妻天天操天天爽视频免费| 99色综合| 亚洲第一页色| 激情文学欧美| 久久精品国产亚洲AV无码做| 人妻天天夜夜爽一区二区| 欧美色偷拍| 国产农村妇女精品1区二区| 绑缚麻绳人妻寝取完整版| 综合九九| 91久久婷婷| se吧提供91精品国产91久久久久久 | 国产v亚洲v日韩v欧美v片另类| A级国产欧美激情在线| 精品人妻一区二区视频| 成人精品在线| 一区二区三区男女操逼黄色小电影| 久久久性爱视频| 人妻少妇精品无码专区二区密桃| 国产97在线 | 亚洲| 精品视频免费在线一区| 久久久国产三级黄色片| 9热9热综合网| 欧美综合色| 欧美性爱日韩高清| 探花精品视频| 亚洲免费97免费| 无码粉嫩白虎一线天b区| 久久久久久久久久va| 97色色婷婷| 国产25页| 欧美综合另类| 亚洲AV无码黄色强奸| 成 人 影视 一区 二区 三区 四区| 中文字幕精品久久久久人妻红杏ⅰ| 97综合激情| 神马久久久久久伦理片| 伊人久久88国产女| 伊人96在线| 亚洲人体视频在线观看| 超碰人人草| 久神马| 欧美Ⅴ性爱| 婷婷午夜| 99福利社| 91香蕉视频在线观看免费| 草草影院在线视频| 青青草原成人| 亚洲国产婷婷在线播放| 97免费在线视频在线观看| 91天天美女| 久久首页| 亚洲欧美另类少妇精品| 欧美姓爱综合网| 欧美人人AAA| 激情视频一二三| 不卡中文字幕aⅴ在线| 人妻久久久久久| 日韩精彩视频| 黄色电影观看久久9| 亚洲高清视频在线观看| 白丝AV| 69超碰综合| 国产精品乱码久久久| 99人人干| 97在线播放| 久久男女激情视频网站| 欧美传媒一区| 萌白酱自拍视频| 麻豆国产成人精品| 第四色奇米影视777| 熟女突然公开看18禁影片| 殴洲老熟女| 国产午夜精品理论片一二三区区| 日韩精品免费高清视频在线| 国产热av| 99热97| 欧美日韩性爱视屏免费看了| 久久专区| 男人天堂免费| 乱理日韩中文| 亚洲区限制级| 色黄污美女啪啪啪免费网站| 伊人久久大香蕉线AV五月天| AVE乱伦| 91天美传媒在线| 黄片直播三级黄片两女一男| 中文字幕在线观看网址| 香蕉色网| 一区二区你上我| 男女猛烈无遮掩视频免费软件| 土豪酒店各种姿势玩弄极品幼稚| 黄色在线网站| 亚洲青青草| 超碰免费人人| 欧美日韩中文亚洲v在线综合| 少好三P| 999九九精品| 亚洲人成在线放东京热| 长长久久免费视频| 久草午夜| 黑丝日韩av丝袜av| 国产东北女人在线视频| 久久久成人免费av电影| AV综合中文字幕干| 超碰97护士| 97精品第3页| 精品一区二区人妖| 大香蕉伊人75| 婷婷伊人一区| 色天使亚洲综合在线观看| 久久久久久久久国产| av一区二区三区 中文| 天天噜| 亚洲色丰满少妇高潮| 牛黄色久午久| 亚洲精品久久久久毛片A片拉屎 | 国产精品交换一区二区| 色哟哟 日韩精品| 亚洲超碰综合网| 日日爽夜夜爽| 一本色道久久天天射天天干| 日本高清加勒比| 99蜜桃臀久久久欧美精品网站| 黄片色区软件| 99精品九九九九九九| 天堂麻豆天美| 狠狠操综合| 在线中文字幕| 超碰在线日韩一区| 亚州色图狠狠干| 久久草大香蕉| 国产日韩在线播放av| 中文字幕免费在线观看| 欧美熟妇乱码在线一区| 蜜桃无码AV一区二区| 久久亚洲AV无码白度| 欧美黑人91| 99国产精品在线观看| 亚洲精品成人激情在线| 一级性爱视频免费在线| 色婷婷日韩精品一区二区三区| 狠狠操一区二区| 激情丁香五月婷婷| 在线一道啪| 乱性AV| 超碰色图| 国产蜜臀在线| 自拍视频大全亚洲专媒视频/一区二区三区| 精品黑人一区二区| 亚洲精品白浆高清久久久久久| 国产搭汕a级片| 性爱AV天堂| 久久这里精品国产99丫e6| 中日高清无码操逼视频| 精品少妇人妻av久久免费| 国产精品久久久啊| 国产伊人精品在线| 欧洲精品欧洲精品| 超碰在线人妻不卡| 久久五月份| 日本中文字幕在线电影| 色黄色美女大长腿午夜视频| 中国一级αV| 日本综合色图| 国内一级精品| 亚洲日本大香蕉1| 加勒比av官网在线| 操死我了嗯嗯嗯| 亚洲乱色视频一区、二区在线| 亚洲人人操| 欧美精品91| 国产探花精品在线| 97在线免费观看| 熟妇熟女一区二区三区| 97超级久久| 舔人妻中文免费视频| 97伦乱| 欧美,亚洲,日韩,v,天堂,手机在线观看| 99热导航| 天天综合香 ld视频| 少妇同性| 伊人成人情色综合| 亚州再线| 北京美女一区二区| 黑丝日韩av丝袜av| 男人久久精品| 欧美78| 校园春色亚洲无码| 中文字幕诱惑制服人妻丝袜美丝袜美| 九九自拍伦理| 啊啊啊啊啊啊啊在线| 欧美激色| 密臀国产在线| 99精品无码| 一本色道熟妇| 亚洲图片激情小说| 欧美人体性爱互联网第一页婷婷日本| 丝袜亚洲综合| 国产精品久久久久久高清无码免费看| TS人妖另类精品视频系列| 国产极品粉嫩馒头一线天av| 伊人网青青|