久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

CLion中printf重定向:_write與fputc的區(qū)別及正確做法

CLion中printf重定向:_write與fputc的區(qū)別及正確做法 群里剛有人問了句CLion 里重定向 printf為什么都在寫 _writefputc 不才是標(biāo)準(zhǔn)做法嗎這一下把我拉回第一次在 CLion 里調(diào)串口日志的夜晚。當(dāng)時我照著網(wǎng)上老教程往工程里塞了個重寫 fputc 的函數(shù)信誓旦旦地確認(rèn)了三次寄存器配置結(jié)果串口助手就是一片寂靜。折騰到深夜最后把 fputc 換成 _write立馬就好了。這個現(xiàn)象不是個例。很多從 Keil、IAR 轉(zhuǎn)過來的朋友第一次在 CLion 里做嵌入式開發(fā)都會在這里卡一下。這篇文章就把這個“為什么”徹底講明白C 標(biāo)準(zhǔn)庫的 printf 到底怎么把數(shù)據(jù)送出去fputc 和 _write 分別在哪個環(huán)節(jié)干活CLion 的嵌入式工具鏈又有什么特殊之處以及碰到亂碼、報錯、卡死時應(yīng)該往哪個方向排查。1. 問題現(xiàn)象重寫 fputc 明明是標(biāo)準(zhǔn)做法為什么在 CLion 里不生效1.1 一個非常典型的開發(fā)場景先描述一下我這個項目當(dāng)時的狀態(tài)芯片是 STM32F103IDE 是 CLion工具鏈?zhǔn)?ARM GCC工程用 STM32CubeMX 生成通過 CLion 的 Embedded Development 插件加載。我要做的事情非常簡單就是把 printf 的輸出重定向到 USART1方便看調(diào)試信息。按照網(wǎng)上八成教程里的寫法我先加了這么一段int fputc(int ch, FILE *f) { HAL_UART_Transmit(huart1, (uint8_t *)ch, 1, HAL_MAX_DELAY); return ch; }這段代碼在 Keil 的工程里、在 IAR 的工程里幾乎是標(biāo)準(zhǔn)答案。邏輯也很直觀printf 最終會逐個字符調(diào)用 fputc我只要把 fputc 指向串口發(fā)送數(shù)據(jù)就能出來。所以我當(dāng)時的判斷是問題只可能出在別處比如串口沒初始化、時鐘沒配好、杜邦線松了。1.2 現(xiàn)象記錄編譯通過串口沒有輸出我把 HAL_UART_Transmit 的返回值打出來也看不到任何報錯因為整個發(fā)送鏈路根本沒被觸發(fā)。詭異的是我用調(diào)試器在 fputc 里下斷點printf 執(zhí)行到一半斷點壓根沒進(jìn)來。后來我意識到一個關(guān)鍵線索printf 是庫函數(shù)它內(nèi)部不一定調(diào)用我這個 fputc。不同的 C 庫對 printf 的實現(xiàn)方式不同有的庫里 fputs、fwrite、fputc 是一套完整的緩沖機(jī)制有的庫為了省空間干脆讓 printf 直接往底層 write 接口塞數(shù)據(jù)繞過了 stdio 的字符級接口。我的 fputc 等于寫了一個沒人調(diào)用的空函數(shù)編譯不報錯運行沒效果純屬自我安慰。更麻煩的是在某些庫里printf 被編譯成了半主機(jī)模式semihosting版本代碼會嘗試往調(diào)試器的“虛擬終端”輸出數(shù)據(jù)。聽起來很美好問題是開發(fā)板上的調(diào)試器沒接 RTT、沒開 semihosting 支持于是 printf 調(diào)用直接進(jìn)入一個死循環(huán)或者空跑表現(xiàn)就是“程序沒崩但不輸出”。這種問題排查起來特別坑因為它不像硬件錯誤那么明顯。1.3 排查思路先弄清 printf 身后到底是誰我用一個很笨的辦法定位了問題反匯編看 printf 內(nèi)部調(diào)用。在 arm-none-eabi-objdump 里拉起工程生成的 .elf 文件搜索 printf 的實現(xiàn)段發(fā)現(xiàn)它確實沒有調(diào)用我的 fputc而是跳到 _write 這個符號??吹侥切写a的瞬間我基本就明白了這版的 C 運行庫里stdio 往上走的是系統(tǒng)調(diào)用抽象層而不是老的字符設(shè)備層。做一個小類比。fputc 就像一個門店的前臺專門接待“單個字符”這種小請求_write 則是后臺倉庫處理“一段字節(jié)”這種批量請求。printf 在有些體系里會老老實實把每個字符遞給前臺在另一些體系里它直接把一整塊數(shù)據(jù)甩給倉庫省得前臺一個個搬。你重寫 fputc就是把前臺換成了自己人但倉庫那邊壓根不認(rèn)識你貨自然發(fā)不出去。這個類比其實也解釋了為什么兩種做法都對但適用的“庫版本”和“編譯環(huán)境”完全不同。搞清楚當(dāng)前工具鏈里 printf 到底跟誰對接才是解決問題真正的鑰匙。2. 核心原理_write 和 fputc 在標(biāo)準(zhǔn)庫里究竟差在哪一層2.1 C 標(biāo)準(zhǔn)庫的分層架構(gòu)要把這個問題說透得先捋一遍 C 標(biāo)準(zhǔn)庫的層級結(jié)構(gòu)。我們平時寫 printf調(diào)用的是標(biāo)準(zhǔn)庫提供的“格式化輸出”接口。這個接口內(nèi)部大致分三層第一層是格式解析層負(fù)責(zé)把 %d、%s、%f 這些占位符替換成實際字符串這一層在庫里已經(jīng)實現(xiàn)好了用戶碰不到。第二層是字符/流輸出層對應(yīng) fputc、fputs、fwrite 這類函數(shù)它們管理緩沖、維護(hù) FILE 結(jié)構(gòu)體的狀態(tài)。第三層是系統(tǒng)調(diào)用抽象層對應(yīng) read、write、open 這類 POSIX 風(fēng)格函數(shù)標(biāo)準(zhǔn)庫不實現(xiàn)它們的實際功能而是留給你或者運行環(huán)境去實現(xiàn)。在桌面 Linux 上第三層最終由內(nèi)核實現(xiàn)write 就是真的寫文件、寫終端。在嵌入式裸機(jī)環(huán)境里沒有內(nèi)核write 就需要你手動“對接”硬件。所以嵌入式里的重定向本質(zhì)上就是補(bǔ)齊第三層缺失的那部分系統(tǒng)調(diào)用。理解了這層關(guān)系就不難明白fputc 只是第二層的接口_write 才是第三層的地基。printf 的實現(xiàn)者可以選擇只依賴第三層也可以選擇結(jié)合第二層不同庫選擇不同表現(xiàn)自然不同。2.2 ARM GCC 生態(tài)里 printf 的調(diào)用鏈細(xì)節(jié)具體到 CLion 常用的 ARM GCC 工具鏈它默認(rèn)攜帶的 C 庫是 newlib 或者體積更小的 newlib-nano。這兩個庫里printf 的實現(xiàn)最終指向 _write 這個底層函數(shù)。也就是說不管你是不是只輸出一個字符在最終落地的路徑上printf 都會把數(shù)據(jù)組織成緩沖區(qū)然后交給 _write 統(tǒng)一發(fā)送。那 fputc 去哪了在某些配置下fputc 也會被鏈接進(jìn)去但它的角色變成了類似“中間代理”標(biāo)準(zhǔn)庫內(nèi)部會默認(rèn)提供一個 fputc 實現(xiàn)它調(diào)用 _write 來真正的輸出。如果你重寫了 fputc但沒有重寫 _write那 printf 走 _write 這條路時用的還是庫自帶的 _write它要么是空實現(xiàn)要么是半主機(jī)模式反正是不會把數(shù)據(jù)送到你的串口里。這里還有個編譯選項可以佐證。newlib-nano 在編譯時有個配置叫--specsnano.specs它主要影響的是 printf/scanf 的功能裁剪對底層 _write 的調(diào)用關(guān)系影響不大。真正決定走 _write 而不是 fputc 的是庫對 stdio 整個管線的設(shè)計而不是某一個裁剪選項。所以哪怕你開著 nano.specs也沒法靠重寫 fputc 繞過這個調(diào)用鏈。2.3 為什么很多老教程都是重寫 fputc它錯了嗎老教程寫 fputc不能簡單說錯只能說它們描述的是另一種環(huán)境下的行為。比如老的 Keil MDK 自帶的 ARM C 庫對 printf 的實現(xiàn)就更貼近“逐字符輸出”的模式fputc 正是出口。IAR 的庫也有類似設(shè)計所以用戶把 fputc 一重寫printf 就跟著走了。這也是很多人在不同工具鏈間遷移時機(jī)翻車的原因教程本身沒變變的是庫的實現(xiàn)策略。你把 Keil 里的經(jīng)驗原封不動搬到 CLion等于拿著前任公司的門禁卡去刷現(xiàn)任公司的門刷卡姿勢再標(biāo)準(zhǔn)也進(jìn)不去。還有一點要提醒即便在同一個工具鏈里換了一個庫版本調(diào)用鏈也可能變化。所以最穩(wěn)妥的做法不是“背一個可以重寫的函數(shù)名”而是學(xué)會自己查工具鏈的文檔和反匯編確認(rèn)。我后來習(xí)慣性地在 switch 到新工具鏈時先看一眼庫里 printf 的實現(xiàn)這比在網(wǎng)上試各種舊模板高效得多。實際做項目時尤其是團(tuán)隊協(xié)作統(tǒng)一工具鏈版本非常重要有一個成員用了不同版本的新庫重定向代碼的表現(xiàn)就可能不一致。提示在 Clion 里做 printf 重定向前先確認(rèn)兩件事工具鏈用的哪個 C 庫默認(rèn)多為 newlib-nanoprintf 對應(yīng)的是哪個底層 write 接口。這兩點確定了寫出來的重定向代碼才具備可移植性。3. 實操方案在 CLion 里正確重定向 printf 串口輸出3.1 推薦做法重寫 _write 的標(biāo)準(zhǔn)模板既然調(diào)用鏈已經(jīng)清楚直接看標(biāo)準(zhǔn)做法。以 STM32 HAL 庫為例在 C 文件里加上這一段就能把 printf 的輸出送到 USART1#include stdio.h #include stdarg.h #include main.h extern UART_HandleTypeDef huart1; int _write(int file, char *ptr, int len) { HAL_UART_Transmit(huart1, (uint8_t *)ptr, len, HAL_MAX_DELAY); return len; }這段代碼的核心就三件事聲明好串口句柄、把 ptr 指向的緩沖區(qū)原樣發(fā)出去、返回實際發(fā)送長度。需要注意返回 len 不能隨便寫 0 或者省略返回值printf 內(nèi)部會通過返回值判斷是否發(fā)送成功返回值和傳入長度不一致可能導(dǎo)致 printf 認(rèn)為發(fā)送失敗做重試或丟棄處理。對于字符輸出也就是原來想用 fputc 的場景可以額外加一個小函數(shù)讓字符最終也走 _write既不破壞原有語義也不影響鏈路int fputc(int ch, FILE *f) { return _write(0, (char *)ch, 1) 1 ? ch : EOF; }這樣寫的好處是假如你項目里加了某些日志庫它內(nèi)部調(diào)用了 fputc也能正確輸出到串口。兩個口子都堵上了后面不會再出現(xiàn)“為什么 printf 正常但 putchar 沒反應(yīng)”這種問題。3.2 關(guān)于 fputc 的補(bǔ)充處理之前提到過有些庫里 fputc 默認(rèn)會作為 _write 的“上層”被調(diào)用但有些庫不一定。我自己習(xí)慣是 _write 和 fputc 都寫上原因很簡單在混合使用標(biāo)準(zhǔn)庫和第三方庫的時候不能保證每個庫都走同一條輸出鏈路。比如某個日志組件把數(shù)據(jù)通過 fwrite 寫到一個文件流而文件流底層又依賴 fputc如果我只重寫 _write日志組件的數(shù)據(jù)還是會丟。反過來如果只重寫 fputcprintf 鏈路又?jǐn)嗔?。兩個都寫覆蓋的場景更全。不過雙寫也有個隱患如果庫的內(nèi)部實現(xiàn)里 fputc 調(diào)用了 _write而我又在 _write 里什么事都沒做那么 fputc 發(fā)送的數(shù)據(jù)會在 _write 層被截獲并處理沒問題。但如果你在 fputc 和 _write 里都做了 HAL_UART_Transmit 調(diào)用又恰好庫內(nèi)部把同一個數(shù)據(jù)傳了兩遍就可能出現(xiàn)一個字符發(fā)兩次的現(xiàn)象。所以雙寫時一定要確認(rèn)庫的實現(xiàn)關(guān)系不要盲目疊加。3.3 參數(shù)計算與配置配合 CubeMX 串口初始化寫好重定向函數(shù)還得保證串口本身沒問題。很多人只盯著 _write 的寫法忘了檢查 CubeMX 生成的串口初始化。最典型的問題有三個。第一個是波特率對不上。比如 GPIO 初始化時把串口設(shè)為 115200但終端或串口助手卻開的是 9600輸出必定是亂碼。這種問題排查很快看 CubeMX 的 USART 配置頁把波特率記下來再去串口助手里選同一檔基本就對了。第二個是時鐘樹導(dǎo)致的波特率誤差。CubeMX 有時候根據(jù)用戶在 Clock Configuration 里的輸入自動計算分頻系數(shù)填的值不同實際波特率會有偏差。偏差超過百分之二長一點的日志就會出現(xiàn)零星亂碼。檢查方法很簡單把波特率調(diào)成整數(shù)對應(yīng)的分頻值讓 USARTDIV 算出來不含小數(shù)或者開啟 oversampling by 8容錯更高實測下來穩(wěn)定性會明顯提升。第三個是 DMA 和中斷配置。HAL_UART_Transmit 是阻塞式發(fā)送在簡單的日志場景下沒什么問題。但如果你開了中斷或者 DMA又同時調(diào)用了同一個串口可能發(fā)生發(fā)送沖突。穩(wěn)妥的做法是給 _write 里的發(fā)送加一點簡單的狀態(tài)判斷比如用__HAL_UART_GET_FLAG(huart1, UART_FLAG_TXE)確保上一次發(fā)送完成再繼續(xù)否則可能出現(xiàn)第一個字節(jié)被覆蓋這種詭異現(xiàn)象。我遇到過一次特別難查的問題就是在 _write 里調(diào)用 HAL_UART_Transmit但串口助手收到的前兩個字節(jié)老是丟。排查很久發(fā)現(xiàn)是主循環(huán)里一個高頻中斷也在用同一個串口發(fā)送調(diào)試信息兩者沒有互斥導(dǎo)致緩沖區(qū)被覆蓋。后來我在 _write 里加了一個簡單的信號量保護(hù)問題立刻消失。這種細(xì)節(jié)不踩坑真的想不到。4. 常見問題與排查技巧實錄4.1 典型問題與解決方案速查表我整理了在 CLion 社區(qū)和實際項目中遇到頻率最高的幾個問題按現(xiàn)象、原因、解決思路列個表方便快速對照?,F(xiàn)象可能原因解決思路printf 無輸出程序正常運行printf 走了半主機(jī)模式或底層 write 沒重寫重寫 _write并關(guān)閉 semihosting輸出亂碼波特率不匹配或時鐘分頻誤差大核對 CubeMX 和終端波特率調(diào)整時鐘樹輸出丟失前幾個字符發(fā)送未等待上一位完成被下一位覆蓋在 _write 里加發(fā)送完成判斷或互斥程序進(jìn)入 HardFaultprintf 內(nèi)部使用堆堆??臻g不足增大 Heap Size檢查啟動文件輸出重復(fù)一次或回顯異常fputc 和 _write 同時被調(diào)用只保留 _write確認(rèn)庫內(nèi)部調(diào)用關(guān)系中文輸出亂碼英文正常源文件編碼非 UTF-8終端不支持對應(yīng)編碼源文件轉(zhuǎn) UTF-8串口助手選 UTF-8write to location 0x20 caused an access violation重定向函數(shù)操作了非法地址檢查指針是否為 NULL確認(rèn)串口句柄正確初始化表格里這幾個問題基本覆蓋了我在 CLion 開發(fā)過程中遇到的大部分坑。剩下幾個需要展開說因為它們背后的原理不是一句兩句話能講透的。4.2 亂碼問題不只是波特率的鍋很多人一看到串口輸出亂碼習(xí)慣性懷疑波特率。實際上一旦波特率差了通常整段輸出都會亂而不是只亂一部分。如果你看到的是一半正常一半亂碼大概率是時鐘樹配置帶來的分頻誤差。STM32 的 USART 波特率寄存器是 16 位整數(shù)加 4 位小數(shù)不同主頻下某些波特率不能精確分頻誤差積累以后長字符串末尾就容易亂。另一個不太容易想到的原因是源碼編碼。CLion 默認(rèn)使用 UTF-8而很多老工程是 GBK 編碼。編譯器把源碼里的中文字符串按 GBK 解釋printf 把它原樣發(fā)給串口助手串口助手又按 UTF-8 解碼兩邊不對齊中文就成亂碼了。英文不受影響因為 ASCII 在兩個編碼里是一致的。排查方法最簡單用十六進(jìn)制顯示串口數(shù)據(jù)如果看到的字節(jié)序列是 GBK 編碼的漢字字節(jié)基本就是編碼問題。解決辦法是統(tǒng)一成 UTF-8并在串口助手里也選 UTF-8雙端對齊亂碼自然消失。4.3 重寫 _write 之后程序崩了怎么定位崩的問題比亂碼嚴(yán)重。我見過比較多的場景是printf 放在一個很深的函數(shù)嵌套里局部變量特別多庫內(nèi)部實現(xiàn) printf 時需要一定棧空間而嵌入式工程默認(rèn)的棧很小只有 1KB 左右疊加上重定向函數(shù)的調(diào)用直接越界進(jìn)入 HardFault。定位方式很簡單在調(diào)試器里打開 Fault Analyzer 或者查看?;厮菘闯绦蜃詈笸T谀囊恍小H绻T?printf 或 _write 附近基本可以斷定是??臻g不足。解決方式是在鏈接腳本里把 Stack Size 調(diào)大比如從 0x400 改到 0x1000。有的項目還開了 FreeRTOS每個任務(wù)單獨分配棧printf 任務(wù)的棧要額外留足因為 printf 是出了名的“棧吃掉大戶”格式化浮點數(shù)時尤其明顯。另外如果你重寫 _write 后程序一開始運行就報write to location 0000000000000020 caused an access violation這類錯誤十有八九是 HAL_UART_Transmit 的參數(shù)有問題。比如指針用錯了、句柄是 NULL或者是芯片上電后時鐘沒穩(wěn)定就調(diào)用了 printf。我建議在 main 函數(shù)最開始加個簡單的延時或者確保 SystemClock_Config 先于第一個 printf 執(zhí)行很多初始化順序?qū)е碌囊呻y雜癥都能避免。注意重寫 _write 時不要順手把返回值改成 len 以外的值。我見過有人圖省事直接return 0結(jié)果 printf 的緩沖區(qū)永遠(yuǎn)認(rèn)為寫入失敗頻繁重試程序速度被拖慢好幾倍。返回 len 是最符合語義的做法既高效又不容易出錯。4.4 多 main 文件場景下的輸出管理CLion 有個特點它不像一些 IDE 那樣靠文件后綴或者文件名識別入口而是通過 CMake 的 add_executable 來管理源文件。如果你在同一個工程里放了多個帶 main 函數(shù)的文件鏈接時會報重復(fù)定義。這個和 printf 重定向本身沒直接關(guān)系但很多人搜到《CLion 寫多個 main》時其實是因為想搞一個測試代碼集合里面既有 printf又有串口輸出。我的經(jīng)驗是不要硬搞多 mainCLion 的多配置方案很成熟。用 CMake 的 option 控制編譯哪套代碼或者直接用 C 的 namespace 隔開邏輯比復(fù)制粘貼多個 main 文件優(yōu)雅得多。如果你只是想在多個 demo 之間切換最省事的辦法是給每個 demo 建一個可執(zhí)行目標(biāo)再讓 IDE 只構(gòu)建當(dāng)前選中的 target。這個操作在 CMakeLists 里就是加一行 add_executable然后在 CLion 的 Target 選擇器里切換比注釋掉整個 main 函數(shù)干凈多了。還有一種情況是你在做 JNI 或者 Android NDK 開發(fā)CLion 會生成一個 externalNativeBuild 的 target這種情況下 main 函數(shù)屬于 Java 層C 代碼里只有 JNIEXPORT 函數(shù)。此時你想加一個自動測試入口通常會用#ifdef包一個臨時的 main只在 debug 構(gòu)建里啟用。這個思路可以但要注意別讓臨時 main 里的 printf 和 JNI 側(cè)的 HAL 串口初始化沖突否則排查起來比較鬧心。我的建議是讓臨時 main 直接復(fù)用 JNI 代碼的初始化函數(shù)保證兩邊跑的是同一套硬件配置。4.5 一個容易忽略的“緩沖”陷阱以前在桌面環(huán)境寫 C大家習(xí)慣讓標(biāo)準(zhǔn)庫自動緩沖 stdout。在嵌入式里這會是個大坑。如果你在 printf 后沒有及時刷新緩沖區(qū)它可能不會立刻通過 _write 發(fā)出去。CLion 的嵌入式開發(fā)里有時調(diào)試時打印的信息滯后或者在程序跑飛前最后幾條日志消失就是這個原因。我一般會在重定向代碼里同時關(guān)閉標(biāo)準(zhǔn)庫的緩沖區(qū)方法有兩種。一種是在 main 開頭調(diào)用setvbuf(stdout, NULL, _IONBF, 0)關(guān)掉緩沖讓每個 printf 立即觸發(fā) _write另一種是啟動文件里已經(jīng)配置了 newlib-nano 的無緩沖模式那基本不用管。實測下來setvbuf 的方式最直接也最容易理解。不過 setvbuf 在某些精簡庫版本里實現(xiàn)得不完整調(diào)用后沒效果。這時候退而求其次在關(guān)鍵的調(diào)試節(jié)點手動加一個fflush(stdout)也能保證數(shù)據(jù)及時發(fā)出。這個思路對于產(chǎn)品代碼里的日志系統(tǒng)一樣適用把 fflush 和 _write 的互斥鎖配合好即使后面跑 RTOS 也不會煩你。4.6 解決“const memory write”類警告的細(xì)節(jié)還有個小眾但惡心的警告write access to const memory has been detected, the output may be wrong!。這個警告一般出現(xiàn)在你用一個 const 指針或者字符串字面量作為 _write 的入?yún)r。編譯器認(rèn)為你傳給 _write 的緩沖區(qū)可能是只讀的而 _write 內(nèi)部如果做寫操作就會越權(quán)。底層的根源是 printf 內(nèi)部某些格式化實現(xiàn)里會嘗試把臨時結(jié)果寫入一個內(nèi)部緩沖區(qū)這個緩沖區(qū)的類型和你傳入的字符串類型不匹配。處理方式不復(fù)雜_write 的函數(shù)簽名保持原樣不要自己額外加 const 限定調(diào)用時用一個可修改的 char 數(shù)組去接收而不是直接傳字符串字面量。如果你在 HAL_UART_Transmit 的第二個參數(shù)看到了 const uint8_t *而你的 _write 是 int _write(int file, char *ptr, int len)那就在 _write 內(nèi)部做一次顯式轉(zhuǎn)換。這樣既消除了警告也避免了在運行時訪問非法地址的風(fēng)險。5. 后續(xù)擴(kuò)展從串口重定向到更完整的調(diào)試體系5.1 用 CLion 的 Debug 模式配合串口日志把 printf 重定向搞定之后開發(fā)體驗會提升一大截但別停在這里。CLion 的調(diào)試器可視化、內(nèi)存查看等功能和串口日志配合在一起才是完整的嵌入式調(diào)試體系。我通常的做法是代碼里保留面向業(yè)務(wù)功能的調(diào)試日志通過 _write 輸出到串口同時利用 CLion 的斷點和變量窗口跟蹤運行時數(shù)據(jù)。兩者互補(bǔ)串口日志回答“程序走到哪了”“數(shù)據(jù)大概是什么”斷點回答“當(dāng)前狀態(tài)的精確細(xì)節(jié)”。這種組合在三方庫封裝很深、調(diào)用棧很長的時候特別有用。你要是只靠串口打日志一個問題可能要加十幾條打印才能定位配合斷點通常兩步就找到了。5.2 從單串口輸出升級到多通道日志工程復(fù)雜度上來以后一個串口往往不夠用。比如主邏輯日志和底層驅(qū)動日志要分開看或者串口被別的外設(shè)占用了。我后來把重定向函數(shù)改成了可以通過宏或者全局變量切換目標(biāo)通道的形式底層調(diào)用 HAL_UART_Transmit 時選擇不同句柄。這樣同一個 printf 的輸出可以被輕松導(dǎo)向不同串口、不同調(diào)試終端。如果你用的是 FreeRTOS還可以把 _write 里的發(fā)送放到一個專門的中斷優(yōu)先級的隊列里讓調(diào)試日志不阻塞主任務(wù)。但這里有個度的問題調(diào)試代碼太復(fù)雜反而會破壞時序引入了新的 bug。我的取舍原則是正式版本把重定向函數(shù)替換成空實現(xiàn)或者關(guān)掉調(diào)試日志開關(guān)只在 debug 構(gòu)建里保留完整輸出。量產(chǎn)的板子跑起來以后你絕不會希望 printf 在那邊影響實時性。5.3 把重定向代碼做成模板資產(chǎn)踩過這次坑之后我把這套重定向代碼整理成了一個模板文件包含 _write、fputc、setvbuf 以及一個簡易的日志宏后續(xù)開新工程直接復(fù)制。模板里還寫了注釋標(biāo)注哪些地方需要根據(jù)芯片型號和串口句柄調(diào)整。這樣團(tuán)隊里其他人用 CLion 開發(fā)時也不會再遇到同樣的“為什么沒輸出”問題。做模板的時候有一點要記住不同芯片的 HAL 庫發(fā)送函數(shù)不完全一樣。STM32 是 HAL_UART_Transmit某些國產(chǎn)芯片或者舊版標(biāo)準(zhǔn)外設(shè)庫可能是 USART_SendData。所以模板里最好把發(fā)送函數(shù)單獨包裝一層比如static void uart_send_byte(uint8_t ch)以后換平臺只需要改這一個函數(shù)。這個封裝一開始不顯眼項目多了以后你就知道有多香了。提示模板里建議順手加一個掉線保護(hù)比如發(fā)送返回值檢測失敗時連續(xù) N 次失敗就停止輸出避免卡死主循環(huán)。這個在長時間無人值守的設(shè)備上特別重要否則一次串口異常就能把整個系統(tǒng)拖住。6. 寫到最后的一點經(jīng)驗文章寫到這里該講的原理和操作都講完了。我從個人體會的角度再說幾句??酥频恼{(diào)試輸出對嵌入式開發(fā)非常重要打印不是越多越好。重定向做對了只是萬里長征第一步真正決定開發(fā)效率的是你拿這些日志能快速定位問題還是被日志淹沒。串口重定向遇到問題時優(yōu)先確認(rèn)調(diào)用鏈再動手改代碼。與其在 fputc 上反復(fù)嘗試不如花幾分鐘查一下工具鏈用的 C 庫和 printf 的實現(xiàn)方式。這個檢查習(xí)慣養(yǎng)成以后你在任何 IDE、任何工具鏈里做重定向都不會慌。CLion 只是其中一個環(huán)境它的漂亮界面和調(diào)試體驗解決的是操作層問題底層的庫原理才是所有環(huán)境通用的硬核知識。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
宅男91视频在线播放| 国产探花精品在线| 91处女视频在线观看| 亚洲在线91| 久久精品欧美一区蜜桃| 国产精品人妻熟女aⅴ| 欧美后进式| 国产精品永久免费10000| 人人综合| 女人被男人桶爽视频网站| 色综合99999| 亚洲少妇色| 国产第12页| 久久久极品| 乱子伦一区二区三区国产精品| 超碰在线91| 思思热国产在线视频| 亚洲天堂2020| 久肏视频字幕| 精品丰满熟妇人妻一区| 亚洲素人网| 久久久久久人体| 伊人四虎综合| 老鸭窝日丰县女人| 超碰中文字幕人妻草一区| 殴美大黄片| 日韩一级久久毛片| 久久久久久日韩| 懂色Av| 91精品成人| 97亚洲中文| 草伊人高潮喷水超碰| 亚洲男人的天堂网| 精品国产乱码| 亚洲欧洲激情| 天天流夜夜操| 中文字幕五月婷婷免费| 香一区二区三区| 黄色大片视频在线免费看| 九九热男人天堂| 国产9熟妇视频网站| 五月婷婷大香蕉| 婷婷爽人人婷婷爽视频| 97视频7| 乱伦av.com| 啊啊啊啊,啊啊好多水| 日本色婷婷| 日日AAvv| 久操com| 日本狠狠干| 狼人狠干| 精品无码人妻一区二区免费蜜桃| 久精品无码av一区二免费国产在线观看 | 在线99热| 日本韩国国产精品一区| 超碰97在线色男人??| 乱伦av麻豆| 五十路人妻在线| 婷婷AV一区二区三区| 国色综合天| 狼人综合婷婷激情四射 | 亚洲吊色| 去干网最新版| 色婷婷六月丁香七月婷婷| 97 国产一区| 婷婷激情五月天小说网| 国产三级片在线观看| 性爱乱伦网址| 日本一区二区中文字幕久久| 人妻五十路在线| 天天插天天射| 污污汅18禁网站在线永久免费观看| 日韩97视频| 欧美另类色图片| 国产丝袜欧美在线视频| 少妇被c 黄 免费观看| 99热aaa| 国产精品探花视频| 一二三区操逼国产91| 国产视频第2页| 亚洲一卡2卡3卡4卡乱码网站| 蜜臀视频网站| 可乐操亚洲蜜911| 一级黄色视频网| 日韩综合无码色欲vv| 欧美97在线观看| 99re不伦| 久久亚洲日韩国产欧| 97色综合中文网| 久久久久ab| 五月天色图| 日本99热| 丰满人妻一区二区中文| 中文久久一区| 大香蕉伊人色偷偷在线| 亚洲一区日韩| 精品久久久久久中文| 中文字幕三四区| 久久久久久久久国产| 91九九九馒头| 成人乱码一区二区三少妇| 无码国产精品96久久久久孕妇| 97香蕉人人乳| 美女露胸露尿口| 奇米狠999| 欧美日韩美女精品久草一区二区三区| 亚洲中文字幕妇伦久久| 国产熟女完整版中字| 久久免费精品96| 中文字幕 码 自拍 视频 区| 美女天天干| 啊啊啊啊,啊啊好多水| 啪啪视频亚洲第一| 97超碰人人模人人拍人人| 欧美黑人168页欧美黑人167| 后入式在线免费观看60秒| 亚洲中文日韩精品| 最新日产中文在线麻豆| ji熟女.com| 精品日日人妻| 风韵犹存大大大大香蕉| 久久久青青草| 天天干18禁| 亚洲性综合11| 青青草一区二区三区四| 啊啊啊在线看| 欧美日综合| 久操视频在线| 亚洲欧洲激情| 无套后入双马尾| 久久激情四射婷婷丁香五月天| 久色99999| 日本97久久久精品| #NAME?| 性感女人网页在线观看视频| 99热超碰| 97色婷婷| 在线另类| 天天综合精品| 大香蕉丝袜一级片| 精品国产72| 性久久| 久久国99999| 久久91视频| 中国一级特黄大片护士| 神马久久久久久伦理片| 啊啊啊 在线| 丰满少妇一区二区三区四区观看 | 中文熟女五十乱码在线| 91色堂| 日韩中文字幕人妻视频| 色色色99| AV天堂丝袜| 日韩女优在线| 超碰1997| 啊啊啊好想要| 99亚洲精品| 久久人妻| 人人操人人干网页| 欧美激情综合| 欧美精品双插| 东京热,男人的天堂| 亚州男人天堂| 欧美日产国产在线成人第一区| 中文字幕国产| 东京热亚洲一区二区| 久久一区无码| 97伦乱| 极品肉射| 一区二区三区亚洲| 激情婷婷丁香| 另类图片五月| 91精产一区二区三区| 91精品婷婷国产综合久久竹菊| 日日摸日日碰| 97碰久久| 成人一道本免费视频| 亚洲 欧美 中文 日韩超碰| 97国产精品在线观看| 日本影视久久免费| 欧美中出| 美國A片| 亚洲中文字幕久久人妻| 午夜.DJ高清在线观看免费7| 亚洲情色第一页| 欧美黑人精品一区二区| 在线岛| 97在线观看免费视频| 小日子操bb在线看| 国产人妻精品一区二区三区秋霞| 青草伊人网| www.色吧5.com| 亚洲综合精品国产一区| 97色97好| 午夜传煤十二区精品| 综合激情一一91| 久久久精品网站| 精品久久久久av影院| 在线黄页看毛片| 一本久久精品中文字| 超碰97极品9| 美日韩男女操屄视频| 综合欧美日韩在线观看| 大香蕉欧美伊| 精品欧美日韩在线观看| 国产白丝精品在线观看| 欧美精品自慰系列寂寞少妇| 1区2区3区中文字幕日韩| 一区二区视频在看| 中文字幕av乱伦| 久久最新视频免费观看| 极品销魂美女一区二区| 日韩AV片| 中文字幕乱碼在线| 一区二区三区国产在线播放| 日本三级R| 天堂九九九九九九九九九| 蜜臀av网址| 国产激情视频一区区三区| 国产精品视频精品一二| 亚洲性感丝袜诱惑在线观看| 国产一级137片内射麻豆| 日韩成人色图| 国产一区二区在线播放| 久久精品美女一区| 欧美91网| 中文字幕在线免费观看视频| 超碰97人人乐| 久久亚洲AV无码专区国产精品| 秋霞午夜视频一区二区| 一本色道综合久久欧美| 日本大香蕉| 美女裸体无遮挡永久免费观看网站| 九九Av| 黄片不用下载在线观看| 免费男人的天堂| 五月丁香啪| 久久这里只| 夜夜中出国产| 免费在线黄片视频| 国产精品九九九| 岛国在线国产| 大香蕉婷婷| 中文字幕av亚洲精品| 99自拍B亚洲 | 青青草色插素人| 国产精品第一区第一页| 国产精品久久久视频| 午夜福利国产欧美日韩夜夜| 亚欧美综合网。| 亚洲欧美九九| 婷婷成人久久久精品| 亚洲精品 欧美97色色| 人妻-91porn| chaopen97久久| 强奸乱伦资源| 无套后入双马尾| 丁香五月婷婷基地| 草草草草视频| 2026国产精品视频| 自慰白浆在线观看| 美女91在线| 920日本午夜免费| 校园春色五月天| 久久不卡一区二区| 国产美女mm131爽爽爽爽| 99热线麻豆 | www.大香| 在线黄色污污网站| 日本日皮视频逼| avav青青草久久夜| 亚洲丝袜二区| 1级午夜影院费免区| 欧美亚洲厕所精品偷拍91| 新婚人妻扶着粗大强行坐下| 久操频道免费在线呗看| 91美女丝袜诱惑视频| 噜噜噜噜天天狠狠| 久草精品热视| 欧美一二三级精品在线| 日本黄页视频在线观看| 久操不卡视频| 91精品国产91久久福利| 九九九精品色乱九九九| 欧美亚洲日韩人妻在线观看| 久久久久亚洲?V片无码V| 美女上床网站| 自拍偷拍 日韩欧美| 99亚洲国产精品色一区二区三区| 中国探花熟女| 99999精品| 成人精品水蜜桃久久久久久久| 综合五月婷婷| 久久、1234| 91夜夜蜜桃臀1区2区3区| 亚洲男人的天堂V| 男人的亚洲天堂| 婷婷伊人綜合中文字幕| 国产综合色精品在线观看| 欧美综合传媒| 亚洲第一页欧美| 天天日天天干天天整| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 三级网色| 最新亚洲黄色免费电影| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 无码直播久久久| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 久久久久久久一级黄色打同平台| 视频在线观看免费一区二区三区 | 亚洲无码电影久久久| 日日干夜夜欢| 丝袜av一区二区三区| 看日韩美女二区三区免费操逼视频 | 日本爽爽爽爽爽爽免费视频| 亚洲性综合11| 少妇第一页| 亚州操操穴网| 久久综合九九| 黄色视频特级毛片| 家庭乱伦性爱av| 日本久久女同性恋视频| 天天干夜夜鈤| 青青草日韩免费观看高清在线| 国产a级精品| 91大学精品激情戏| 中文字幕黄色片| 18禁精品网站在线看| 在线观看不卡一区二区三区| 欧美 亚洲| 亚洲另类色综合网站| 久久日本熟女精品一区| 亚洲春色激情小说| 婷婷在线播放| 日本狠狠干| 不卡啪啪视频| 亚洲天堂热| 欧美性爱在线无码| 九月丁香婷婷色| 国产91av在线播放| 伊人骚琪琪亚洲天堂网站| 久久精品无码熟妇一区二区三区视频导航 | 极品色综合| 9久久久久久| 麻豆尤物视频网| 亚洲精品久久久久久| a片亚洲一本通视频| 狠插 制服 自拍| 国产久久日韩网站导航| 69精品人人人人| 亚洲精品天天影视综合网 | 97视频免费在线观看| 成人青青草原伊人| 中亚精品极乱| 中文字幕精品码亚洲| 十八禁啪啦拍视频无遮挡| 日本精品一区二区三| 久久一区二区三区入口| 日韩精品在线视频在线观看| 午夜精品久久久久久久久久蜜桃| 国产强奸乱伦xd| 小视频国产| 操操逼视频| 浓厚中出中文字幕在线| 一级性爱视频免费在线| 日韩 欧美 另类 人妻| 黄片com.| 欧美激情一区| 一级片视频啪啪| 青草草免费网站av| 探花一区二区三| 影音先锋每日最新资源在线观看 | 亚洲宗合电影| 久久女人| 黑操B| 免费a v| 欧亚乱色熟一区二区三四区| 国产三级中文有码在线视频| 九九九九一区| 九九九九88| 国产欧美日韩臀| 新视频sss国产| 大干人妻| 中日韓欧美高清| 久久精品国产99精品亚洲蜜...| 国产成人拍国产亚洲精品| 午夜操逼不卡| 中文字幕在线免费观看视频| 欧美亚洲影视| 久欲AV| 青娱乐啪啪视频| A一区片| 日韩一区二区三区四区五区| 无码色| 色五月婷婷麻豆在| 亚洲色图20p| 国产在线综合网| 校园春色 欧美| 欧美色图成人网一区二区 | 99re95| 欧洲Au麻豆| 婷婷15月天青娱乐| 99热伊人| 亚洲国产高清福利视频| 欧美日韩高潮喷水91| 久久理论字幕视频| 亚洲精品一区二区精品| 超碰免费人人| 成熟熟女国产精品一区二区| 久久69| 精品一区二区成人| 免费的黄片有限公司| 99性爱在线观看| 婷婷丁香六月| 校园春色综合| 另类欧美| 大香蕉线| 亚欧高清v| 欧亚第一综合网| 日本高清一本二本免费不卡| 无码免费在线观看黄色片| 国产无马av| 国产1727欧美| 无码操逼视频一下| 91蜜臀熟女| 97超级色碰碰| 国产高清精品一区二区三区毛片| 99热这里| 97伊人超碰| 中文一区二区三区影院| 欧亚免费视频| 色哟哟-国产专区| 99热这里只有精品1| 天天日天天搞天天干| 人妻AV 中文字幕的| 亚洲日韩东京热一区| 国产91 丝袜在线播放00-百度| 天天色天天干天天射| 久久久久无码| 精品人妻中文字幕高清| 人人人人人人少妇| 伊人宅男大香蕉| 国产精品呦一区二区三区| 欧美男女午夜啪啪| 蜜臀久久久99久久久久 | 亚洲日韩少妇一道本视频| 亚洲国产精品V?在线播放| www99热| 超碰97资源网亚洲| 操逼逼福利视频| 国产小炒后入式| 天天上日日上日韩精品| 亚洲丝袜B诱惑| 天天干少妇| 欧美性色综合网| 亚洲 小说 欧美 激情 另类| 日本欧美一区二区三区免费| 中文字幕91综合| 久草新在线| 成人资源中文字幕在线观看天天| 久操免费观看| 920日本午夜免费| 欧美性性性| www色婷婷| 狠狠入| www久久久| 清纯唯美亚洲综合| 日本三级中国三级99人妇网站| 日韩欧视频| 婷婷久久综合久| 99re黄| a久久| 国产夫妻性生活视频| 自偷自拍的亚洲视频| 偷拍导航视频网站| 精品久久久av| 天天谢天天干| 黄色十八禁| 91呆哥人妻| 97超碰超| 大香蕉十区| 无码一区二区精品视频久久久春药 | 大香蕉色网| 人人看欧美性爱| 性感美女啊啊啊在线| 亚洲色图亚洲无码强奸乱伦| 少妇的嫩逼图片| 亚码激情| 成人av福利在线观看| 亚洲综合伊人| 操逼逼无码| 欧美双插| 日韩人妻精品中文字幕| 午夜高清成人在线视频| 97日亚洲欧美| 日日橹狠狠爱欧美超碰| 黑人嘿嘿嘿超爽免费视频| 欧美综合网1| 丁香五月婷婷啪啪| 2017av无码免费无线播| 操淫穴亚洲五月丁香 | www.男人的天堂| 超碰97起碰| 岛国片在线视频网站| 2019亚洲男人天堂| 91N欧美| 国产精品亚洲无码| 东北女人高潮视频| 你草精品在线视频| 丁香婷婷久久| 免费黄色片。| 亚洲黄色AV电影| 久草毛片电影怡| 欧美特大黄一级片片免费| 日韩欧美亚洲自拍偷拍| 97国产精品久久久久 | 在线 制服丝袜中出 人妻| 看免费一级在线播放毛片| 国产熟女自拍| 97欧美精品| 九九成人精品| 蜜乳AV一区二区三区四| 激情小说亚洲| 青草伊人久久| 中文字幕丝袜人妻| 岛国精品视频在线观看| 亚洲成人性爱网站在线播放| 日本男人天堂| 嫩草 我啊~嗯~在线| julia在线观看久久| 欧美精品久久久久久久久88| 色色毛片| 自拍六区| 欧美综合在线91| 99无码精品| 国产一区二区精品久久99| 天天做天天爱| 亚洲欧美变态| 国产成人精品午夜福利| 区一在线观看| 这里只有精品视频| 日日噜噜夜夜狠狠视频无| 天天天干977| 国产成人主播| 麻豆久久久久久久久丝袜| 玖玖婷婷五月天| 操逼逼中文字幕| 日韩免费簧片| 蜜臀久久99精品久久久| 国产精品9999| 青青久久久| 怡红院怡春院| 天天综合网国产| 色色五月婷婷| 国产又粗又长又爽又色| 国产一级操B视频| 国产成人99久久亚洲综合| 亚州综合色| 日本三级精品| 美女丝袜激情小说| 欧美国产操逼| 老女人老91妇女老热女| 91艹逼精品| 91 丝袜在线| 欧美色图片91| 亚州色站 日韩电影| 激情四射婷婷四五月天| 色丁香久久| 93人人操人人| 国产无马视频| 中文字幕123| 欧美日韩性爱无码| 性色av网站| 久久无码一区二区二三区性色| 麻豆一区二区三区在线看| 夜草欧美| 欧美五区| 蜜臀AV成人精品蜜臀| 97精品视频免费| 天天碰操中国年青熟妇| 欧美色天堂网在线视频| 在线观看视频91| 国产精品不卡一区二区三区| 亚洲色图 综合| 精品一区二区三区蜜桃臀www| 91夜夜蜜桃臀1区2区3区| 久久精品国产精品亚洲艾通辽熟妇| 色九九综合| 久操大香蕉手机视频在线看| 极品丝袜无码| 97香蕉人人乳| 欧美亚洲高清不卡| 国产精品夜夜夜| 欧美综合色,www| 夜夜欢天天干| 最近2018中文字幕在线高清第一页| 国产精品露脸在线观看| 欧美极品性爱天天射| 欧美人妻久久精品二区三区| 91精品久久综合熟女| 亚洲欧美精品91| 日本天堂网| 久草在| 性欧美| 人妻另类| 国产午夜精品理论片一二三区区| 久久精品国产亚洲AV高清演员表| 国产高清成人mv在线观看| 高清无码国产亚洲| 在线啊啊啊啊| 亚洲污污网站| 人人妻人人爽一区二区三区| 日韩黄色片子| 亚欧高清在线| 美女黄页| 少好三P| 欧美色狠| aaaa少妇高潮大片| 青青操青娱乐| www被窝色com| 国产一区在线播放| 国产亚洲女v在线观看| 操逼逼中文字幕| 狠狠综合网| 中文字幕久久精视频久久大全| 日韩99神马视频片| 超碰97人妻自拍| 国产美女口爆吞精视频| 日本 欧美 国产一区| 97精品一二区| 亚洲交换| 国产亚洲精品激情| 日韩性爱高清免费视频| 久久婷婷在线观看视频| 97日韩欧美亚洲| 高清无码久操视频| 国产农村一一级特黄毛片| 欧美日韩淫加| 伦理日韩国产久久| 天天射天天操天天干天天吃2018| 欧美一区二区三区另类精品| 一区二区激情国产熟女| 久久久久久久国产| 中文字幕乱码在线| 性爱1区| 色五月天AV| 丰满少妇一区二区三区免费看| 亚洲色图欧美色图日韩色图| 毛片视频白嫩| 欧美96在线|欧| 国产探花精品在线| 91在线免费观看处女| 色天天野狼综合社区| 精品成人无码| 久九九九九九九热| 人人妻人人爽一区二区三区| 亚洲欧美在线观看免费| 宗合情欲网| 日韩啪啪视频| 国产激情片在线观看| 老汉网| A片大香蕉在线| 麻豆人妻精品一区二区| 青草伊人久久| 国产亚洲色婷婷久久99精品91葵花宝典| 成人无码专区精品视频| 丰满人妻一区二区三区免费| 天天躁日日躁XXXXYY| 色综合20p| 日韩熟女操逼| 2020中文字幕| 易易A毛视频| 国产尹人在线视频免费| 97国产伦理| 两性色网| 久久综合久色欧美综合狠狠| 精品国产无码中文| 99www.bibizy香蕉资源国产一区二区三区高清 | 97超碰久久| 黄色网址久久精品欧美喷水| 日韩大香蕉AV影片| 欧美久久人人网| 日韩精品怡红院| 操逼片国产| 色男人色天堂东京热| 2020中文在线一区二区三区| 1204av韩国| 国产日韩区| 任我爽视频在线观看| 蜜臀久久99精品久久久久久-DVD| 免费黄色视频网址| 肥佬影院91| 你懂得91| 黄色工厂这里只有精品| 九九色婷婷| 青草一区二区| 欧美色棕合| 亚洲加勒比久久日本道| 青青草吊丝| 亚洲av无码国产精品字幕| 欧亚第一综合网| 91久久青青草原精品| 4141514逼喷水三级片| 国产精品直播在线观看直播| 综合网欧| 自拍偷拍国产欧美日韩韩| 日韩欧美偷拍美女视频| 欧美大香蕉同搞| 91日日夜夜| 97久久视频| 欧美色欧美| juliaann丝袜大战黑鬼| 久草网站免费在线观看| 青青草原成人| 熟妇在线视频一区二区| 欧美在线啊啊| 日本午夜福利视频| 久久久久久国产无码精品| 中文字幕精品久久久久人妻红杏ⅰ| 天天干人人干天天日97| 校园春色美腿丝袜 | www.婷婷五月天| 99rre在线精品99re8| 人妻啊啊人妻啊| 青青操网| 欧美黑人91| 蜜臀网址在线| 神马视频久久久久久| av网站在线观看了| 久艹免费| 情色日播放AV| 台湾成人无码AV| 人妻少妇精品无码专区二区密桃| 97超碰美国| 东北丰满熟女国产一区| 超碰色97| 日本东京热大香蕉a片| 精品伊人久久久大香线蕉小说| 日韩无限资源| 九区国产| 精品超碰中文在线| 激情无码日韩| 超碰到97情色| 国产精品91一样| 免费福利视频中文字幕| 久久精品国产97欧美精品亚洲| 久久久久国产亚洲一区欧美色图日韩| 国产一区二区a毛片| 在线视频资源| 老司机免费视频在线91| 99re视频在线观看这里只有精品| 99re这里只有精品9| 久久久久久久久久久久九| www.99热| 人人摸人人添人人操| 超碰在线一区二区| 久久中文字幕女同性恋一区| 91黑丝露脚| 婷婷午夜成人色中色| 秋霞怕怕片| 亚洲春色欧美| 男人的天堂激情| 996热| 亚洲**2021在线观看| 亚州五月| 狠狠躁日日躁夜夜躁A| 色综合中文字幕不卡| 精品一区二区成人动漫| av网站在线观看了| 亚洲国产综合图区中文字幕| 人人摸人人舔一区二区| 啊啊啊啊啊啊好湿好爽视频| 九九热九九| 欧美人妻精品一区二区| 三级日本一区二区三区| 俞拍久久国应视频| 欧美同性恋 的搜索结果 - 91n| av亚洲天堂资源网站| 黑操B| 337p大胆噜噜噜噜噜91Av| 国产v片在线免费观看| 97亚洲自在精品在线观看| 日韩天天本| 色噜噜综合在线| 99操逼| 黄片www.| 在线精品福利免费播放| 手机在线中文字幕国产| 日本一区二区中文字幕久久| 天美麻豆一区二区三区| 久久日本熟妇熟色高清| 天堂精品小草| 高树玛利亚无码流出| 婷婷香蕉| 婷婷丁香六月| 成人福利视频网| 一区二区三区四区免费视频| 日韩有码 一区二区三区| 91春色| 青青草福利视频| 熟女熟妇一区二区三区视频| 蜜乳av一区二区三区四区不卡| 免费久久9999| 欧洲一区二区三区免费| 久久綜合很很很| 91偷拍欧美亚洲| 99国产天美| 国产超碰在线一区| 上床不卡网站| 99热 按摩 日韩| 亚洲97p| 丝袜美腿校园春色| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 中文自拍欧美影视| 国产做?爰片久久毛片?片美国| 激情五月天插| 蜜乳AV.COM| 国产亚洲女v在线观看| 美女午夜福利免费视频| 丝袜美腿制服人妻二区中文字幕| 国产精品视频麻豆入口| 亚洲午夜福利在线影院| 国产成人自拍视频在线| 尤物国产一区在线观看| 亚洲一区日韩| 99精品无码| 99热成人| 91久久精品国产| 99 国产丝袜在线| 啊啊啊不要嗯嗯在线观看| 国产夫妻性生活视频| 97欧美综合网| 日本韩高清无砖码22o| 成人五级久久| 一区二区视频在线播放| 九九色逼| 欲色影视综合吧| 久久综合女优| 久久久久久久久久久久欧美日| 高清不卡 中文 人妻| 日本 情色 1区| 欧美成人免费在线观看| 久久riav中文精品| 国产AV超爽| 亚州精人品大香蕉| 极品内射| 亚洲双插| 国产欧美另类久久久精品课程| 熟妇乱伦一区二区| 久久美女国产| 五月天婷婷色色| 久久久久久91香蕉国产| 欧美日韩国产精品久久色婷婷| 日本女人久久久| 午夜.DJ高清在线观看免费7| 日韩国产欧美伦理在线| 人人透人人操| 中文字幕制服欧美久久一区| 一区二区三区色综合| 亚洲欧美日韩不卡人妻| 另类TS人妖一区二区三区 | 色噜噜人妻av 中文字幕| 性爱AV天堂| 五月天婷婷社区| 日韩性爱1级片视频| 六月丁丁香| 91高跟美女在线播放| 婷婷国产精品一区二区| 老司机深夜18禁污污网站| 综合在线导航一区| 久久香蕉国产传媒一区剧情天美| 97超碰久| 日韩情色一区二区| 亚洲最新中文字幕免费| 久久久蜜桃一区二区三区| av东京热男人的天堂| 超碰九区| 家庭乱伦性爱av| 精品夜夜澡人妻无码| 亚洲。天堂。日本在线观看| 久久婷婷电影网| 9999免费精彩视频| 北条麻妃性愛视频| 韩国三级色呦呦| 亚洲一区二区精品福利| 97九色人妻| 天天日骚逼熟女| 免费观看网黄| 在线v中文字幕一区二区三区| 久插综合| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 国产青青美女玩逼视频| 亚洲黑人在线| 在线99热| 中文幕97| 国语对白露脸XXXXXX| 99操| 啊啊啊啊,啊啊好多水| 影音先锋日本一区二区| ′ !γ}丶。。久久精品欧美一区二区三区| 日韩无码久久熟女一级片| 亚洲成人精品在线一区| 一二三四日本视频高清| 欧美人妖内射| 乱伦系列一区二区| 嗯啊不要啊在线| 一本大道青青| 亚洲色图欧美视频| 色月天AV导航| 欧美综合自拍| 亚 欧 美 综合| 啊啊啊好大好深| 日日碰狠狠添天天爽超| 天美传媒Av在线| 欧美人体性爱互联网第一页婷婷日本| 天天干,天天日| 热热色青青草| 九九无码视频| 国产AV人人 夜夜人人澡| 中文字幕精品探花视频| 97超碰美国| 91视频综合在线| 国产日韩欧美亚洲精品95| 丝袜视频一区二区在线播放国产中文| 91在线欧美| 91网站18在线观看| 91久久青青草原精品| 久久久精品日本一道| 欧美色图 色综合图| 欧美精品四区| 92久久| 国产精品亚洲一区二区三区四区| 天天爱综合网| 色综合久| 欧美日韩小说| 国产乱伦性爱AV| 亚洲丨在线| 五月综合激情| 九九九九精品九九九九| 欧美制服网站美腿丝袜| 在线日韩日本亚洲国产| 男人的天堂啪啪| 91啪啪| 中文字日本乱码| 无码 黑人一区二区三区| 伊人久久大香线综合无码| av在线播放国产一区| 日韩人妻精品中文字幕| 成人免费福利网站国产| 97欧美色综合| 91精品国产麻豆国产自产在| 中文字幕精品三级久久久| 亚洲图片偷拍视频区| 亚洲中文sv| 日本三级久| 激情小说图片亚洲首页| 五月开心久久AV官网| 激情五月天社区| 日韩精彩视频| 99色在线| 思思热在线视频在线| 亚洲熟女乱熟乱熟妇综合网二区| 久久精品国产亚洲AV无码做| 美女黄码视频午夜| 成视频在线观看免费看| 死我十八禁| 综合网欧美在线| 激情五月综合开心五月| 成人精品视频| 五月天久久久| 欧美性爱日韩高清| 亚洲综合伊人| 98色网| 国产成年女人免费视频播放a| 9997se| 台湾佬激情综合| 又大又长又粗又爽又黄| #NAME?| 国产天天骚| 强奸乱伦麻豆| 91肉片| 老鸭窝日丰县女人| 丝袜大香蕉| 九九视频黄色片| 91痴汉| 久久久久久久久九九久孕交| 人人摸人人摸人人干| 久久人| 精品少妇人妻| 97福利视频| 人人爱人人乐人人操| 青青草中日韩在线| 91国产精品熟女| 男男H黄动漫啪啪无遮挡网站| 91熟女视频| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 少妇人妻激情四射| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 国产二区三区粉嫩在线| 99精品在线| 91啦人妻| 噜噜噜噜久久久精品免费| 神马午夜久久久| 日本在线一二| 二男一女成人A片| 97久久超碰| 精品一二三区女同| 亚洲天堂男人在线| 国产极品一区二区三区三州| 91视频精品| 伊香蕉综合久久久久久久噜噜噜| 欧美日韩青操| 草b在线 | 国产又操| 家庭乱伦国产| 亚洲色图欧美一区二区不卡| 久久精品人妻一区二区| 天天干2019| 色婷婷视频| 美女一区二区国产精品| 伊人网免费视频| 99热伊人| 少妇蹲下买菜露大唇0| 日韩成人综合网| 欧美日韩国产高清在线一二三区 | 国产极品粉嫩馒头一线天av| 男人天堂最新手机版在线青青草| 久久久久深夜无码| 日韩精品区二区三区不卡| 精品一区二区综合熟妇| 人妻另类 专区 欧美 制服| 久久伊人影院| 国产999精品久久久| 91麻豆天美传媒HD| 夫妻四区五区六区| 强奸少妇AV导航网| 欧美日韩成人在线| 亚洲欧洲国产综合av| 免费在线观看国内色片网站网址| 日韩熟女乱伦中出| .精品人妻一区二区三| 国产成人亚洲精品无| 97资源久久| 欧美激情精品| 草草草草视频| 欧美不在线| 97爱| 日韩中文字幕二区| 国产三区免费在线观看| 少妇干B| 男女真人网18| 成人情色综合网| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 亚洲精美粉嫩嫩泬在线观看| 欧美亚洲厕所精品偷拍91| juliaann精品熟女一区| 蜜色网色哟哟| 密臀在线免费观看| 久久久久久久 九九九九九九九| 日韩啪啪啪啪啪| 欧美色三级片91| av在线人气| 蜜伊人色综合97| 天天摸夜夜操视频| 亚洲日本大香蕉1| 91九色丰满高潮| av72网| Aa东京男人的天堂| 啊啊啊啊啊啊啊啊啊在线观看| 日韩精品人妻系列无码天堂| 开心六月色| 日韩美脚一区二区网站| 精品人妻二区三区| 色盈盈影院| 亚洲高潮少妇| 国产真实子伦对白| 日本操逼aaaaa| 天天激情干| 在线国产福利网址导航| 国产成人在线观看综合| 亚洲熟妇自偷自拍另欧美| 天操天操夜操夜月操月年年操| JuliaAnn丝袜熟女系列| 人妻久久一区二区三区 | 中文日韩欧美熟| 校园春色 亚洲| 久久久性| 女人喷水视频在线观看| 国产浮力影院第1页| 91丝袜美女国产| 色av中文字幕| 日韩射图| 国产拍偷精品网站| 黑人操一区二区| www五月| 97超碰逼| 欧美丝袜中文字幕07在线| 欧美精品二区视频在线| 狠狠色噜噜狠狠狠狠狠色综合久久 | 97干在线| 求求你操操我| 99日视频在线免费| www.色吧5.com| 亚洲AV无码久久久国产精品| xxx亚洲午夜天堂| 操学生天天| 欧美偷拍| 91艹B视频| 中文字暮97| 四虎影视永久在线观看精品免费网站 | 亚洲视频精选| 欧美不卡二区| 欧美综合97www| 超碰无码五月97| 日韩成人高清一区二区| 中文字幕 国产区| 91网站18在线| 综合网亚洲在线| 国产一级137片内射麻豆| 91大学精品激情戏| 国产精品国产| 伊人网免费视频| 婷婷色五月激情| 搞中出视频在线观看| 日韩色香| 岛国片在线观看视频亚洲| 99999精品成人| 综合色欧美| 亚洲最大AV网| 国产精品熟女九九九| 69天堂| 干婷婷综合网| 天天看片麻豆| av黄图片在线观看| 久久丁香五月天| 欧美色图在线视频少妇| 1769成人国产精品视频| 日本三级中国三级99人妇网站| 91欧美综合在线| 无码外流操逼视频| 99久在线精品99re8热| 黄色十八禁| 欧美伊人久久综合网| 亚洲 中文 女同| 91熟女丨91老女人| 美女露胸露尿口| 91搞逼视频| 五月天激情婷婷| 青青久久久| 亚洲无码免费看| 性生活无遮挡纯毛片在线看| 东京热男人天堂| 色狠狠综合| 亚洲97网站| 日韩精品免费高清视频在线| 蜜臀aV午夜一区二区三区| 精品视频在线观看| 欧美精品第3页| 男人的天堂VA| 亚洲日韩精品在线播放|