日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

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
返回資訊列表
一中国女人毛片水真多| 国产精品91ai| 婷婷伊人| 91高潮喷水美女| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 在线亚洲精品久久久| 欧洲精品久久| 免费的黄片有限公司| 91丨九色丨熟女高潮| 日本啊啊啊啊啊视频| 3PAV乱伦视频| 人妻AV在线| 欧美激情内射| 精品一区96| 任我爽在线视频免费观看| 日本免费人成视频播放120秒| 六月激情网| 久久久精品,3| 少妇一区二区三区在线观看| 亚洲暴力强奸AV| 日韩av情韩国爱禁区av一区二区| 九热视频| 俄罗斯及免费在线看| 自拍盗摄一区| 中文自拍欧美影视| 日韩有码 一区二区三区| 欧洲综合视频| 欧美成熟性爱精品| 亚洲 日本 不卡| 亚洲综合另类欧美久久久| 久久av成人无码免费| 97视频www| 无码9区| 色操逼网| 无码外流操逼视频| 欧美色图欧美| 欧洲精品区| 日韩精品国产精品五码一区二区| 国产大学生口爆吞精合集| 四方色播| 99草精| 日韩美女高潮喷水视频| 亚洲欧美成人在线| 97日韩欧美亚洲| 午夜精品久久久久久久99| 九九拍拍精品视频在线播放| 日产狠狠干| 日韩激情小说一区二区| 伊人久久国产免费观看视频| 九九九九九九九精品视频| 高清无码一区二区三区| juliaann欧美丝袜办公室| 天天舔天天日天天射| 一区二区三区四区五区高清无码永久视频| 97香蕉碰碰人妻国产欧美| 欧美性天天| 亚洲性天堂| 最新AV在线| 久久中久文96| 欧美亚洲在线| 色图四区| 韩国免费播放一级毛片| 久久久久久久强迫| 国产精品国产自产高清AV | 欧美黄色片AAAAA| av在线播放国产一区| 又粗又长又大国产不卡| 91无码西班牙视频在线| 欧美色www亚洲国产阿娇要播| 中文字幕三四区| 人妻精品一区二区| 尤物网站91| 91无码西班牙视频在线| 中文字幕第9页萱萱影音先锋| 东京热男人的天堂| 激情文学亚洲| 国产后入| 中文字幕一区电影在线观看| 成在线人在线观看视频| 国产中文字幕曰本毛片| 91久久久亚洲| 五月亭亭六月丁香| 日本护士高潮| 韩国一级做A片免费的| 中文字幕 码精品视频网站| 欧美不卡在线一区二区| 91视频精品| 亚洲男人久久综合天堂| 美国黄片aaa| 26uuu性物| 26uuu国产免费观看| 先锋精品av色鲁| 亚州久久9| 老司机午夜精品福利视频一区二区 | 天天综合~91| 怡红院久久老司机| AV和黑人在线播放| 亚洲精品日韩国产欧美| 亚精品无码毛片一区二区三区| 天天内射| 男人女人18禁片免费看网站| 丁香五月天啪啪| 欧美综合97www| 欧洲精品二区| 一区二区三区激情在线观看| 嗯嗯啊好大| 天天天肏屄肏屄肏屄欧美欧美| 无码高清操逼网址| 刺激性视频黄页| 加勒比aⅴ| 玖玖玖玖精品国产剧情| 色哟哟-国产专区| 亚洲中文字幕精品一区| 老司机深夜18禁污污网站| 伊人久久88国产女| 97视频在线观看网站| 久久国产逼| 99综合| 一区二区亚州激情久婷婷欧美| 久九九九九九九九热| 首页亚洲国产高跟丝袜诱惑视频| 久插不卡| 亚洲成人激情小说视频| 青娱乐蜜桃臀AV色婷| 久久精品国产亚洲AV高级北京| 丝袜视频一区二区在线播放国产中文 | 骚人妻少妇视频| 爽 好舒服 无码刺激久久| 四虎影视 亚洲无码| 激情六月婷婷| 一级黄色视频网| 欧美日韩一二三| 嗯~啊~快点 死我视频| 欧美丝袜中文字幕07在线| 欧洲免费一区二| 国产成人无码a| 亚洲干B| 色情亚洲日本成人| 眼镜人妻101.com| 国产精品9999| 亚洲青青草| 无码少妇精品一区二区60岁老人| 激情婷婷五月天| 99热精品青草在线 | 亚洲电影91| 激情婷婷丁香网| 国模无码一区二区三区在线| 色婷婷综合网站| 国产激情在线| A级国产欧美激情在线| 绑缚麻绳人妻寝取完整版| 国产精品熟女丝袜一区二区| 亚洲影视第一页| 日韩性爱播放| 大香蕉在线视频重口味毛片在线| 国产精品蜜乳AV| 9久久精品| 色大师网站www永久网站视频| 强奸抽插av| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 黄色大片免费在线| 91真人天天在线| 熟女精品va中文字幕| 综合亚洲网| 九九黄色网| 大香蕉草草| 欧美极品女人的天堂| 久久性爱精品一区| 999综合色| WWW啪啪的com| 日韩小电影| 久9久9精品| 国产亚洲中文不卡二区| 91少妇人妻| 一区二区日韩欧美久久| 爽极品影院| 人妻少妇久久| 久久伊人青青草| 日本有码影片下载| 日日夜夜狠狠| 丁香婷婷久久 | 九九黄色网| 日韩亚洲美州欧洲综三区一品在线| 92人人操人人| 蜜臀久久99精品久久久久久成人小说 | 色九区| 最新日产中文在线麻豆| 免费a级毛片av无码久久精品中文字幕| 99久久亚洲精品无码毛片潘甜甜 | 日夜伊人网| 蜜臀久久99精品久久久久久-DVD| 亚洲天堂久久久久久粉红视频| 电家庭影院午夜69久久夜色精品国产69乱| 台湾佬中文娱乐网久久久久久久久久com | 久久岛国| 天天欧美| 午夜操逼不卡| 日韩偷拍一区二区三区| 国产无码精品高清| 国产树林里野战在线看| 97中文天堂| 老鸭窝日丰县女人| 久久久穴999| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 亚洲精品三区在线观看| A级毛片在线看免费| 强奸抽插av| 精品v日韩欧美国产| V A在线| 精品中文日韩字幕视频| 97超碰久久色| 91黑丝在线| 国产熟女免费观看久久| 国产午夜视频| 91天天综合网| 狼人久草| 欧美综合亚洲| 日本综合久久| 99热日| 91视频伊人| 日本九九九九| 国产尤物在线三区| 黑人操一区二区| 2025亚洲男人天堂| 亚洲天堂男人天堂网| 日本丝袜人妻内射| 激情丁香五月| 久艹日日日| 操逼网站视频漫画国产| 人人喜人人妻| 370p日韩欧美亚洲精品| 欧美72网页| 亚州综合色图| 中文字幕免费在线观看| 97久久精品不卡| 99色骚| 26uuu久久| 狠狠干2020| 超碰4A| 国产精品久久久久久无码红治院| 九热大香蕉| 午夜美女福利视频| 97久久资源| 日本天天干天天操一区| 亚洲天堂 视频你懂的| 加勒比东京热五月天天堂网| 国产成人免费观看在线视频| 国产成人精品午夜福利| 亚洲无码一二三区| 亚洲综合草草| 日韩成人电影AV| 午夜亚洲| 男人的天堂不卡一区二区| 蜜臀Av一区二区三区| 欧亚在线视频| 亚洲丝袜在线观看| 97香焦色区| 国产女人视频三四五区| 中文字幕制服欧美久久一区| 岛国免费视频在线| 91 亚洲情侣偷拍 久久| 国产激情av女片自拍| 91老妇女| 亚洲国产精品久久久久久久久久| 神马久久午夜| 91麻豆天美传媒HD| 精品中文字幕第一页| 日韩欧美中文字| 鸡巴插逼视频| 亚洲天堂少妇| 久久精品视频久久久| 内射夫妻三片| 亚洲欧洲无码一区夜| 午夜无码精品免费看性色| 蜜臀av网址| 中文字幕在线高清男人的天堂| 天天欧美| 好好的日:com久久九九| 97AV在线免费观看| 999九九九九国产动| 91爱看| 91超碰在线播放| 久久久亚洲精品电影免费看| 亚洲熟女乱综合一区二区三区| 欧美韩国你懂得在线| 日韩性爱高清免费视频| 亚洲五码一区二区三区| 国产二区三区免费视频| 欧美日韩性爱视屏免费看了| 久久综合乱子伦国产免费| 国产在线观看一区二区三区| 久久久久久久久久黄色网| 人人操人人操人人操人人操人人操人人人11.CM| 五月天激情综合网| 欧美日韩国产三级黄色| 超碰久久.com| 99xav| 成人网站 免费观看| 欧色网址| 神马久久久久久久久久久久| av九九| 精品国产91内射久久| 亚洲色综网| 少妇无码太爽| 99久久e免费热视| 亚洲AV色图| 99色婷婷中文字幕乱色| 亚洲 日韩 欧美 国产综合体| 天堂v无码免费视频| 人妻熟女一区二区| 18一区二区三区| 自拍偷拍 日韩无码| 日韩小电影| 爱爱久久| 一本大道综合伊人精品热热| 成人 日韩欧美一区| 日本 色 导航| 乱伦强奸区日韩| 亚欧操逼片在线观看| 亚洲乱色视频一区、二区在线| 国产精品久久久三级无码| 国产精品高潮久久久无码| 99久久9| 熟女中出视频| 狠狠中文字幕| www.久久99| 色伊人91| 偷拍亚洲熟女视频播放| 国产深夜福利| 亚洲日韩av一区二区三区百合| 妇女性内射冈站HDWWWCOM| 91狠狠综合久久久久久| 91内射| 国产精品一区二区黄片| 精品视频一区二区| 国产亚洲精品av一区| 天天摸,夜夜摸| 伦在线97| 嗯嗯,好大,好爽,好骚| 久久久久久久国产| 99婷婷一区二区| 国产自产91区13区| www.婷婷| 97色婷婷| 99在线观看| 人人操人人操草草| 欧美黄片欧美黄片xxx| 欧美片第一页| 久久男人的天堂国产| 欧美日韩在线小说| 大香蕉97久久| 蜜乳AV免费观看| 99热aaa| 香蕉欧美| 亚洲欧美在线综合| 久久这里只| 亚洲色图欧美色图另类图片| 亚洲熟女av中文字幕| 91女网站| 久久9精品视频| 激情综合五月婷婷| 99热这里只有精品9| 在线观看日韩av不卡| 日韩欧美亚洲一区二区三区影院| 国产女人操逼视频| av凤凰久久久| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 亚洲黑丝在线| 日韩亚洲美女一区久久| 91色五月俺来也| 欧洲射精91| 精品v1区| 新97国产超碰| 国产精品久久久久久久免牛肉蒲团| 极品AV网站在线观看| 欧美天堂亚洲电影院一区在线播放| 久草男人天堂| 超碰97人人乐| 啊啊啊好舒服视频| 家庭乱伦麻豆| 亚洲国产精品9999在线观看| 伊人影院综合是一个与深夜成人在线 | 午夜影美女日鸡鸡天天视频国产| 99久久综合网| 精品夜夜澡人妻无码| 动漫片子网站3黄| 9999亚洲电影| 9I1性色影院| 天天做天天爱| 日韩欧美大力操| 欧美视频一区二区在线| 亚洲国男人的天堂| 东北黄色电影| 精品久久久一本一道| 久久久久久久久久9| 欧美一区二区男人天堂| 蜜臀一区二区三区在线| 日本免费一级AAA大片器| 欧美日韩97在线| 香蕉精品二区二区| 午夜国产综合视频在线观看| 黄片www.| 91超碰人人| 久久九精品| 好涩综合| 亚洲精品啪视频| 伊人成人中文字幕久久网| 红桃视频高潮| 欧美第五页| 欧美五十路熟| 日韩熟妇二区| 精品二999| 久久久久九九九九| 333kkkk·亚洲com久久| 天天干天天日天天射黄色大片| 手机av亚洲丝袜美腿日韩第一页二页| 亚洲色图A| 18禁免费视频| 九一屌逼| 96国产精品| 91视频观看网站| 东京成人一区| Aa东京男人的天堂| 美女天天干| av国产无码| 自拍盗摄一区| 茄子社区国产精品| a亚洲欧美色欲| 亚洲欧美色图小说| 黑丝少妇| 麻豆精品天美| 欧美性爱18观看| 91麻豆va国产精品| 乱子伦一区二区三区国产精品| 人人妻人人玩人人澡人人爽| 六月丁香五月婷婷| 久久久久国产精品人妻aⅴ天堂| 国产狂喷潮在线精品| 发朗少妇买婬全视频中文| 亚洲涩图欧美| 国产探花精品在线| 人妻黑丝袜电影| 国产v片在线免费观看| 国产少妇肉丝在线观看| 日韩欧视频| 乱伦日本色图AⅤ| 韩国女主播青草在线| 91美女网站| 五月婷婷色| 色欲久久99精品久久| 岛国黄| 丝袜综合| 91丨九色丨国产丨人妻在线| 天天干2019| 欧美综合另类| 性吧在线视频| 综合色久欲| 另类 日韩 熟女| 色网1| 久久黄色性爱视频| 999综合色| 熟女这里只有精品6| 美女大乳久久久久久久女人18| 男人天堂站| 日韩十八禁| 国内三级自拍小视频在线观看 | 国产成人无码网站在线视频| 后入人妻无码| 91色综合| 午夜情侣自拍网站| 这里只有97精品| 国产超碰人人操| 日本黄色天堂| 乱伦熟女区| 亚洲资源网| 国产情侣自拍在线播放| 久9久9久9久9久9久9| 大伊香蕉在线视频免费| 九九九九亚洲| 国产精品老熟女一区二区| 久久久久久久人妻丝袜| 中文字幕视频2区| 欧美另类丝袜熟女| 精品91摸| 国产a片操逼| 岛国999| 逼逼逼逼操操操操操操操操操午夜剧场 | 日韩乱码av| 亚洲一区中文精品| 激情视频一二三| 操高情无码| 少妇熟女视频一区二区三区 | ?亚洲伊人伊成久久人综合网| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 久久久少妇| 亚洲少妇诱惑| 亚洲av综合色| 久操视频这里只有精品| 嗯嗯啊啊操死我| 日韩av不卡在线看| 欧洲站一级二级三级h| 99热伊人| 日韩AV无码网站| 伦理弟一页| 久久美女福利是上海美女| 国产精品日日摸天天碰| 久久久久久久久久久97| 中国国产精品一区视频| 精品人妻15区| 九月AV| 欧美在线播放aaaa| 亚洲无码精品AV久久久| 久久9精品网站| 很很干很很操| 一区二区三区视频国产免费| 国产91美女视频| 大香蕉天天看妹子| 老熟妇一区二区三区…| 亚洲成人贴图| 蜜桃久久久久久久久久久久| 国产小黄片在线免费观看| 欧美性性性| 日本天堂网| 久久久久久久久成人av解说| 午夜欧美J进J出白浆流出久久久| 韩三级a视频在线观看 | 凹凸久久人人| 伊人性在线视频| 国产乱婷婷精品二区三区| 男同专区一区二区三区在线| 诱惑人妻欧美一区在线播放| 操逼操逼逼操操逼91 | 中国大陆国产高清AⅤ毛片| 97在线公开视频| 97精品久久久久久久| 国产亚洲精品自在线亚洲情侣| 亚洲春色一区二区三区| 精品超碰色| 吉田爱美AV在线| 色色色热| 凹凸视频特色日本特黄| 中文字幕亚洲热播人妻| 久99久视频| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 色妇综合网| 国产一线二线三线av| 亚洲吊色| 一区=区三区视频| 日韩人妻丝袜美腿中文| 国产区日韩区在线观看| 干干干天天| 国产一级高清免费观看| 亚洲丰满很很操| 丰满少妇一区二区三区四区观看| 欧美日韩婷婷中文| www色婷婷| 中日韩久久久免费看| 诱惑人妻欧美一区在线播放| 久久发布国产伦子伦精品| 99久久婷婷国产综合| 亚洲一级性爱视频免费看| 久久永久无码人妻视频| 久久久久白虎| 78m啪啪啪| 超碰在线97国产| 97色涩| 亚洲 se图 欧美电影| 激情自拍 校园春色| 亚洲AV无码乱码在线观看性色| 2018天天干在线视频| 亚洲高清综合网| 亚洲图片小说欧洲| 97jingpin| 国产精品久久久久久夜夜夜夜| 色诱中文字幕| 成人网欧美风情| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 国产激情综合五月久久| 欧美黄片视频在线观看免费| 亚洲图片偷拍视频区| 国产视频不卡在线观看| 亚洲色图亚洲无码强奸乱伦| 亚洲精品人妻吞精av| 婷婷色播婷婷| 伊人AAA| 天天综合91在线| 玖玖综合.com| 色5月婷婷| 97久久久| 吻戏激情性巴克| 六六久久日韩不卡| 亚洲城人男人的天堂| 久久一留热品黄| 91夜夜蜜桃臀1区2区3区| 97人人爱人人做人人乐| 熟女探花啪啪| 国产成人亚洲精品无码最新在线| 人妻偷拍一区二区三区| 家庭乱伦国产精品| 91人妻做a观看视频| 中日韩久久久| 91日本在线观看| 污啪啪啪视频| 欧美性,亚州色| 99精品丰满人妻| 曰韩香蕉97| 少妇九九九九| 亚洲丨在线| 亚洲无码com| 性爱免费视频成人| www.99在线| 亚洲美女精品| 中文字幕视频免费| 久久久青青草| 熟女这里只有精品6| 3P乱轮视频| 大香蕉丝袜一级片| 第二页中文字幕| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 人人操人人插人人摸人人干| 亚洲一区二区精品福利| a久久| 国产精品久久久蜜臀| 长久操视频| 久久色网| 超97在线精品视频| 天天爽天天| 情色五月天久久久| 亚洲一区中文字幕一区| 丰满搜索结果 -第18页- 久久高清无码| 岛国不卡超碰护士AV在线播放| 清纯唯美第一页| 九九碰九九爱97超碰| 1024午夜激情男人的天堂| 超碰97人妻免费在线| 国模限制级电影| 综合欧美亚洲| 欧美性色综合网| 2020久久免费视频| 久久精品天美| 高清无码一区二区三区| 国产精品不卡一区二区三区| 亚洲国产麻豆一区二区三区| 日日嗷| 亚欧国产无码精品在线| 色婷婷一区二区三区久久午夜成人不| 久久久久成人亚洲国产| 97操碰| 亚洲AV小说| 97欧美视频| 97国产亚洲中文在线| 日本三级一区二区 在线| 日韩人人精品| 俞拍久久国应视频| 人妻密肉在线观看| 天天艹天天日| 91N综合网| 色婷婷成人| 欧美十八禁视频| 校园春色宗合网| 日本午夜操逼| 96久久久久| 精品久久久久久久久久久久| 自拍偷拍 日韩无码| 国产午夜精品一区二区三区牛牛| 亚洲成人网站在线观看| 欧 美 自 拍 偷 拍| 熟妇一区,二区,三区。| 91色艳| 久久久久久亚洲中文| 亚洲在线综合| 欧美97视频| 熟妇在线视频一区二区| 亚洲国产ⅴ高清在线观看| 超碰欧美COM| 97超碰国产精品| 欧美极度丰满熟妇hd| 国产又黄又爽| 清纯唯美综合亚洲| 大香蕉欧美国产日韩高潮| japan日本高清乱xxxx| 精品综合久久久久久五月天| 99久在线精品99re8| 蜜臀99999| 嗯~啊~快点 死我视频| 99操| 少妇滛荡视频| 浪人综合网| 国产操逼视频在线观看| 97碰| 国产精品白领在线观看| 午夜传煤十二区精品| 久草久日| 超碰免费欧美7| 日韩啪啪啪视频| 99热在线不卡| 成人熟女视频一区二区三区| 欧亚综合一卡二卡中文字幕| 婷婷伊人綜合中文字幕| 人人操肉肉| 亚洲色图欧美色图日韩色图| 黄片免费视频2019| 亚洲精品一区二区精品| 一区二区三区美女超清| 为用户提供免费看黄网址在线观看| 中文字幕精品探花视频| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 久久久久久亚洲中文| 中文字幕久热视频在线| 91丨九色丨国产丨人妻在线 | 男女性扦B| 91热色| 亚洲欧美碰碰| 人人弄人人摸| 另类亚洲一区二区三区| 太久视频| 五月婷婷综合网| 好湿好紧好爽 视频| 97超碰色屌| 9久9久| 波多野42部激情无码喷潮| 影视综合无码少妇| 一区二区娱乐网站| 日韩99神马视频播放片在线播放| 日韩中文字幕2020| 久久久啊啊啊| 久久大| 免费A V在线播放| 麻豆天美国美国产AV| 国产免费大片| 亚洲性高潮| 国产精品人妻熟女aⅴ| 99色在线视频| 好看的久久不射无码影视影院| 91亚洲欧美激情| 无码精品人妻一区二区三区妖精| 看看小穴| 国产日韩欧美亚洲精品95 | 99xav| 亚洲乱码精品一区二区| 国产超碰国产97| 婷婷啪啪| 欧美天天插| 欧美成人亚洲精品| 97超碰jingpin| 天天流夜夜操| 色色99| 天天干美少妇一区| 欧亚洲精品有视频| 97资源超碰| 日本三级久| 欧美激情亚洲色图| 亚洲三级网址久久最新| 97网色| 无码 黑人一区二区三区| 99久久精品国产高潮| 人人操天天爽| 99综合自拍| 97日韩欧美| 激情五月天社区| 78久久久| 成人一二| 日韩精品中文字幕二区| 天美一二三在线观看Av| 七月丁香婷婷| 久久精品国产亚洲AV成人直播| 人妻在线中出视频| 一起草视频在线| 精品亚洲国产成人AV制服丝袜 | 另类亚洲图色| 鸥美中出| 亚洲91极品| 国产成人91一区二区三区| 欧美日韩另类在线播放| 夜夜操一区二区| 天天色播亚洲综合网站| 久草电影网| 麻豆AV一区二区| 亚洲黄色| wwwss在线观看| 日日嗷| 久久精视频美日韩在线视频| 久久久久久久久久久久欧美日| 日韩熟女三十乱伦| 欧美精品91| 人妻中文字幕精品无码| 亚洲宗合网| 人妻精品一区二区在线| 加勒比少妇AV婷婷六月天超碰超碰| 特污精品女优骚货黄色视频在线免费观看| 亚洲激情在线| 久久久久久久久久久久97| 熟女六十路| 男人天堂电影院| 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 色97欧美| 久日91在线| 日韩97超碰中文字幕| 国产网红精品| 欧洲性爱无码区| 99热国产| 欲香欲色天天天综合和网| 人人乐大香蕉| 情趣丝袜无码操逼视频| 99re这里只有| 亚洲性综合| 裸模AV女优| 婷婷久久网| 色色福利| 国产精品人妻熟女aⅴ| 国产传媒日韩| 竹菊一区二区三区AV线| 91新在线欧美| 国产91美女高潮| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 91成人在线免费视频| 性一级黄色录像片网站导航| 午夜天堂精品久久| 亚洲91少妇| 日本一本道A级黄色毛片试看60分钟| 日曰骚久久精品| 日韩欧美被操黄免费观看| 久久久久久久一级黄色打同平台| 无码少妇精品一区二区60岁老人| 国产亚洲女v在线观看| 久久久久久裸体| 蜜臀久久久| 亚洲色啪| 99re这里只有精品2| 天天天乱色综合全| 综合久欧洲| 熟妇最新先锋一二三区| 色婷网| 欧美精品日韩一区二区| 色综合网1| 91啪啪| oumeisetu综合| 久操B网| 69人妻精品一区二区绯色| 亚洲精品亚洲人成人网| 国模精品一区二区三区苹果色戒 | 欧美第五页| 欧美综合自拍亚洲综合图| 综合网少妇| 99爱爱| 国产日本顶级一区二区三区| 大香蕉中文201| 91超碰在线| 亚洲成人一区二区精品| AAA久久| 久久精品亚洲婷婷| sss视频华人在线| 天天操天天日青青草超碰av| 啊啊啊好大好深| 美女天天干| 久久久久亚洲Aⅴ无码| 亚洲欧美精品91| 中文字幕天天操| 久伊人网78| 91成人高清在线观看| 911粉嫩人妻| 在线黄页看毛片| 91精品婷婷国产综合久久竹菊| 欧美国产有色电影| 国产精品一区二区密臀| 亚洲激情综合另类男同| www色色com| 国产精品久久久九九九| 亚洲久久久久| 4399成人黄A片| 久欲AV| 天天躁日日躁AAAAXXXX国产| 日本免费一区二区不卡| 美欧色综合| 久久久精品国产亚洲AV无码| 情色五月天久久久| 久久久久白虎| 精品黑人一区二区| 欧美情色男人的天堂| 99re这里只有精品9| 日韩av在线免费网站| 99热在线不卡| 97干在线视频| 国产激情久久久| 天天天操天天天爱| 巨爆乳一区二区爆乳区| 色婷婷狠狠| 熟女少妇一区二区三区| 91人妻尻屄视频| 99久久9| 亚洲另类天堂| 97精彩视频网站| 五月婷亚洲精品天堂| 曰韩无码777| 久久精品99久久久久久| 亚洲AV噜噜狠狠网址蜜桃动漫| 欧美中文字幕一区| 欧美日韩另类在线| ss久久| 日日干天天干夜夜爽| 亚欧精品久久久久久久久久久| 九九九久久久W精品| 狠狠综合| 亚洲欧洲激情卡通另类文学四射小说网站 | 夜夜综合| 九色在线熟女国产黑人| 人人九九精| 色天使亚洲综合在线观看| 亚洲色入欧美| 伊欧美综合视频| 亚洲高清欧美总合| 亚洲国产激情国产av| 怡红院久久老司机| 玖玖97综合| 欧美性爱18观看| 亚洲综合有码| 人人综合| 成人国产精品三级A片| 春色91| 亚洲黄日韩无码专区| 国产一级作爱毛片| 中 文字幕一区二区三四 五 区日 日 骚 | 国产精品一区二区麻豆| 欧美亚男人的天堂| 欧美日韩一区二区三区四区蜜桃| 精品人妻高清麻豆av| 亚洲综合一区二区| 人妻偷拍一区二区三区| 91天天综合在线观看| 国产农村妇女精品一| 另类天堂| 再深点灬舒服灬太大了添视频| 久久久免费高清中文视频| 91 国产丝袜在线放观看| 嫩草影院在线观看精品 | 国产在线激情视频| 亚洲风情在线观看| 噜噜噜亚洲精品| 欧美日韩m| 在线观看免费视频国产| 另类图片综合| 女人香蕉久久毛毛片精品| 国产乱码精品久久久久久| 伊人影院中文字幕| 免费看一级a性色生活片久久无| 91香蕉视频在线观看免费| 亚洲第一页色网| 久欲AV| 无码操逼天堂| 国产精品不卡一区二区三区| 国产丝袜美女诱惑| www.99热| 依人大香蕉| 偷窥自拍A片| 久久精品国产72国产精品福利| 少妇人妻好深太紧了vr91| 国产成人91一区二区三区| 99中文字幕| 啊啊啊爽爽| 精品国产乱码久久久久久久久久毛片| 日本三级韩国三级美三级91| 色婷婷婷五月天激情四射| 成人精品视频一区二区| 国产精品网站www| 亚洲97P| 操亚州| 神马久久免费电影观看| 亚洲图片欧美另类综合免费视频大大香| 欧美暴力猛交| 九九热精彩视频| 嫩草91| 日韩91网站| 老熟女网站| 亚洲中字幕日本一区二区三区| 美女天天干| 男女性感激情网站| 亚洲九月丁香| 成人欧美一区二区三区黑人一| 欧美|91色综合| 九九成人精品| 毛片麻豆91糖心精品毛情片| 男人的天堂kva| 丰满人妻-区二区三区免费看 | 97国产高清视频在线观看| 日本午夜福利影院| 啊啊啊啊啊啊啊国| 欧美少妇一区二区三区| 一区二区三区色综合| 欧美色亚洲色| 91影库| 久久午夜伦| m欧洲一级午老| 夜夜嗨视频| 综合免费无码中文| 亚洲AV成人无码久久精品播放| 德国一二三不卡| 日夜尻逼网| 国产高清视频无码在线| 久久性视频| 欧美亚洲涩涩| 日本一道在线播放高清| 中文字幕狠狠玩| 99热色这里只有精品| 另类av综合久久| 色噜噜狠狠色综无码久久合欧美| 欧美性爱三区二区| 九九九综合精品| 亚洲少妇视频| 欧日a| 日韩三级性| 98久久| 欧洲色| 欧美日韩精品久久久久东北老熟妇| 免费A片三p视频| 95人妻爽爽人人做人人澡| 91视频女生| 偷拍自拍在线视频观看| 97AV爱| 亚洲欧美国产精品久久久久久久| 能在线播放的国产三级| 欧美老妇女内射网址| 欧美色www亚洲国产阿娇要播| 亚洲欧美日韩精品久| 啊啊啊啊啊操我视频| 97国产人人| 女人天堂AV五区在线| 无码一区免费在线不卡| 久久手机好看网站| 人妻三级在线中文字幕| 91亚·色| 91精品人妻一区二区三区蜜桃| 99热自拍| 人人妻人人澡人人爽久久av| a网站免费观看| 亚洲国产精品久久AV| 久久一二三级一一一| 啪啪啪东京| 九九九热精品| 欧美色图片色哟哟| 亚洲 欧美 天天| 日本精品中文字幕视频| 97在线资源| 色播综合| 国产精品黑人一区二区三区| 天天舔天天日天天射| 亚洲精品a人片在线观看视| 国产人妻久久精品一区二区三区| 婷婷色色五月| 国产97在线 | 亚洲| 亚洲综合另类欧美久久久| 少妇3P性爱自拍| 欧美78P| 色香在线| 久jiu久神马影院| 欧美精品成人在线播放| 老熟女中文字幕高清| 六月婷激情福利天堂69| 欧美大香蕉同搞| 女人天堂av在线播放| 五毛骚逼极品美女怕怕| av天堂天堂av日韩| 丰满人妻一区二区三区免费 | 操人妻丝袜高跟| 97超碰超碰| 夜夜免费视频| 人人爽夜夜操| 久久侵犯人妻爽爽爽| 屁屁影院一区二区三区国产| 青青青青草av在线观看| 韩日无码在线观看| 2019精品国产无码成人| 欧美偷拍| 婷婷九月丁香| 91 国产丝袜在线放观看| 精品久久久亚洲AV成人网站| 老司机午夜精品视频| 大香蕉中文201| 97超碰影音| 无码人妻系列少妇| 亚洲综合小视频小说在线观看| 偷拍伦理视频| 六月丁香啪啪| 天天插天天操| 色欲三区| 人人摸.人人色| 翔田千里Av在线| 亚洲中文字幕在线视频一区二区| 人人妻人人澡人人爽人人精品浪潮| 俺也射| 91亚洲丝袜熟女| 国产嫩草精品A88AV| 蜜桃臀久久| 好舒服视频| 日韩中文9| 国产乱人妻精品入口| 91天美传媒在线| 久久日本熟女精品一区| 日日噜噜夜夜久久亚洲一区二区| 91美女视频在线免费观看| 国产一区二区久久| 9久热| 最新国产亚洲精品精品国产亚洲综合| 久久精品无码专区| 97视频免费播放| 视频不卡中文字幕| 一级黄色性爱裸体视频| 中文字幕日韩人妻视频| 欧美大香蕉同搞| 日韩女模中文造逼| h在线看免费版在线看| 色优久久| 超碰日本97美女人妻人人玩人人爱| 小草精彩毛片| 日日干日日操五月天伦理视频| 亚洲AV高潮| 日韩欧美蜜桃精品久久中文字幕久久| 国产精品乱码久久久久久久久| 欧美日韩97| 精品亚洲国产成人精品| 色婷婷99| 国产乱码精品久久久久久| 2020天天色综合| 99久久精品欧美国产| 国产精品无码论坛| 不卡人妻少妇精品毛片一区23区视频| 日日夜夜草草草| 国产懂色精品国产av| 久久大香蕉手机高清视频| 日韩资源网| 91色综合| 国产超碰| 91成人社区| 国语av狠狠色丁香婷婷综合激情| 国产亚州高清国产拍精| 久久精品一区| 亚洲毛片基地专区| 欧美v亚洲v日韩v最新在线二区| 久久9久9久99久9久9| 亚洲图片欧美偷拍| 国产亚洲精品美女久久久久久2021| www.夜夜| 精品国产99999| 偷拍自拍在线视频观看| 亚洲中文字幕日产无码久久| 国产熟女无套内射| 久久99亚洲精品久久99果| 色麻豆AV| 日韩欧美成人综合在线| 午夜精品久久久99| 欧美日韩国产成人高清| 天美精品av| 日韩精品人妻| 99热综合在线| 少妇熟女视频一二三区| 日韩乱伦影音先锋| 福利五区| 激情久久久| 久久女人| 无码免费一区二区三区啪啪| 国产91 丝袜在线播放00-百度|