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

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
返回資訊列表
成人26uuu| 中国国国产一级特黄毛片| 在线观看不卡一区二区三区| 开心五月深爱五月| 99福利社| 四虎国产精品永久地址入口| 久久神马影院| 国产探花精品在线| 欧美少妇大量自拍视频在线观看| 午夜电影在线观看无码专区| 欧美精品二区视频在线| 天天92av| 99青草| 亚洲图片偷拍欧美| 精…码一二三区| 五月丁香婷婷色| 后入精品| 99色色| 4tube欧美女厕所| 国产97色在线| 精品一区二区三区国产| 国产成人主播| 日本三级R| 97精品一区二区三区免费| 国产成人网站在线观看| 九九九九精| 午夜情侣自拍网站| 干干干天天| 久日91在线| 超碰在线国产| 日韩无码精品综合久久| 玖玖久久久| 婷婷五月天丁香| 美女裸体无遮挡永久免费观看网站| 欧美三级一级| 国产成人久久久精品免费AV| 久久久久九九九| 天堂涩涩| 亚洲欧美综合色| 丰满人妻一区二区三区四区| 91狠狠综合久久| 国产精品久久发布| 99re在线观看| 欧美系列在线一区二区| 欧美美女视频| 中文字幕国产| 9999亚洲电影| 91逼逼女人91| 婷色五月天| 色噜噜精品一区二区三| 老司机福利青青草| 亚洲,欧美,综合网| 九九国产热| 亚洲综合小说另类图欧美视频激情小说色五月天 | 日韩欧美三级| 9长久久精品| 亚洲狼狼干综合1| 九九碰九九爱97超碰| 综合av社区| 亚州综合色| www欧美91| 偷拍在线观看视频| 91老熟女老女人国产老太| 欧美三级一级| 亚洲熟妇无码一区二区三区| 日韩在线一区高清在线| 国产精品成久久久久午夜午夜| 九九九九热只有精品| 蜜桃精品一区二区三区久在线| 99国产精品免费| 欧美激情欧美精品| 九九九久久久久| 牛牛久久国产精品视频一二三| 超碰性爱97| 久久天天躁日日躁狠狠躁| 韩国手机不卡无码三级视频| 无码人妻精品一区二区中文| 欧美一级特黄淫片在线观看| 福利在线观看一区二区| 天天搞在线综合网| 爽极品影院| 国产偷拍自拍在线视频| 综合色99| 天天摸,夜夜摸| 日本免费不卡二区| 亚洲宗合网| 深夜激情| 玖玖爱在线视频免费观看| 性色av大全| 亚洲最新中文字幕免费 | 九九九九AV| 啪啪啪综合| 亚洲av噜噜噜噜噜噜| 91色人妻| 骚逼高潮久久精品| 欧美亚性天堂| 啊啊啊啊啊在线视频| 劲爆欧美人妖三区91| 欧美综合网站999| 欧美少妇人妻| 亚洲AV成人在线| 无码免费一区二区三区啪啪| 一区二区不卡免费| 波多野结衣一级视频| 人人人人插| 亚洲男人天堂网久久| 99精品丰满人妻无码| 婷婷久久五月综合激情| 日韩操人| 一区二区播放| 久久一级无码精品毛片6| 九九精品美女高溯喷水 | 亚洲骚男同com| 91色交| 成人午夜无码视频| 夜夜骑操视频| 国产黄片精品在线| 极品内射| 成人蜜乳小视频网站| 无码国产精品午夜不卡(| 中文字幕一区二区三区人妻少妇在线| 人妻精品一区二区三区| 熟女视频久久| 9九九国产| 天天精品| 色婷婷日韩精品一区二区三区| 少妇人妻好深太紧了vr91| 亚洲天堂东京热| 91欧美偷拍| 大地资源在线观看中文第二页| 久久99午夜精品一区人妻| 国产亚洲精品玖玖玖在线观看| 九九这里只有精品| 久久久免费高清中文视频| 国产精品美女在线一区| 成人日韩3| 久久国产乱子伦精品免费女,网站| 亚洲一区二区久久久久| 免费网色网站| 中国国国产一级特黄毛片| 欧美亚洲AN| 午夜一区二区三区国产| 啊啊啊好疼| 久操不卡视频| 日日夜夜精品视频| 中文有码第五页| 国产精品婬乱一级毛片彝族| 日韩在线观看AV| 色综合色| 99久国产精品午夜性色福利| 97精品在线| 超碰国产在线| 日本1区2区不卡视频| 亚洲欧美日韩电影网站一区| 91人妻Pr| A片大香蕉在线| 操死我了嗯嗯嗯| 欧美极度丰满熟妇hd| 高清视频一区| 九九九九九九九九九五码| 久久精品国产96精品亚洲拳交| 人妻人久久精品中文字幕| 亚洲另类综合欧美| 日本色色色色色视频| 国产嫩草精品A88AV| 四虎 精品 WWW| 日韩卡一卡二卡三在线| 国产精品农村妇女| 久久宗合亚洲| 欧美熟妇乱码在线一区| www.色综合| 超碰在线观看av不卡| 精品一级| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 神马麻豆福利院 | 在线观看一级α片刺激高潮视频| 加勒比性爱成人在线| 亚州伊人色综台| 色情乱伦AV| 国产高清精品一区二区三区毛片 | 亚洲高清视频在线免费观看| 超碰97日韩| 国产人妻精品一区二区三区秋霞 | 久久久蜜桃臀无码视频| 欲色综合| 色欧美在线| 亚洲。天堂。日本在线观看| 97国产天堂岛| 亚洲超碰综合网| 丰满精品人妻少妇久久字幕| juliaann丝袜大战黑鬼| 91成人社区| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚| 操逼日韩无码 | 欧美亚洲综合色| 91九色首页| 99爱爱| 深田咏美亚洲精品福利社| 午夜精品久久久久久久99蜜桃一| 国产树林里野战在线看| 久久99综合| 天天综合色| 欧美日韩情色一区二区| 97欧美性爱| 国产一级不卡在线观看| 国产在线激情视频| 日本精品高清一二区一本到| 五月丁香婷婷啪啪| 欧美色九九九| 天天天堂影视日韩亚洲91| 亚洲日精品| 美女高潮国产高清| 一个人免费视频观看在线WWW| 亚洲一区操| 性爱乱伦网址| 中文字幕在线观看AV| 91丨九色丨国产丨人妻在线| 夜夜高潮夜夜爽夜夜爱爱一区| 亚洲最新av无码成人精品区| 国产又爽又黄| 国产精品一区二区 尿失禁| 久久丁香久草综合网| 久久五十路熟女人妻| 久久少妇| 任你干在线视频| 亚洲黑丝在线| 免费网站观看www在线观| 欧美日韩人妻少妇 一区二区三区| 夜夜无码| 激情国产乱伦Av| 亚洲中文字幕网| 美女主播色欲91抠b在线播放| 天天天堂影视日韩亚洲91| 久久 精品| 日本午夜操逼| 91色综| 欧美久久人妻少妇一区二区| 久久男人天堂| 99啪啪视频| 新视频sss国产| 极品白嫩美少妇在地板上位骑射淫水泛滥| 污污汅18禁网站在线永久免费观看 | 无码99| 啊啊啊啊好大好硬啊啊啊啊啊 | 天天内射| 欧美特大AA级黄片| 中文字幕视频在线观看一区二区| 色色青青久久| α√在线| 国产精彩女在线观看视频| 国产精品盗摄 偷窥盗摄| 99热免费| 最新无码国产| 熟女欧美日韩综合婷婷| 久久亚洲中文字幕视频| 91性生活久久久| 起碰97| 九九热免费国产视频婷婷伊人| 亚洲色婷婷综合久久久久中文| 91成人久久| 欧美激色| www.色综合| 亚洲男人在线观看天堂| 久久久久人| 99性视频| 岛国大片国产| 色婷婷色99国产综合精品| 国产自偷| 色婷婷久久| 日韩九九九| 91美女中出| V A在线| 情色日播放AV| 天天躁日日躁xxxxx| 欧美天堂第二区| HEYZO高无码国产精品227| 鸥美极品| 精品妇女一区二区三区| 2017av无码免费无线播| 欧美中文狠| 激情干在线| 中国91AV| 按摩中文字幕| 黄色AAAAA欧美| 亚洲女人毛茸茸91| 加勒比在线视频| 收看日本人日bb| 97人人爱人人乐| 黄页18禁| 91九色精品熟女内射| 91网站18| 中文字幕一二三av| 久久超碰免费的| 亚洲欧洲综合视频在线| 国产精品内射婷婷一级二| 很很很很操| 欧美激情五月天| 精品高清一区二区三区三州| 日本男人天堂| 日日玩天天干| 久久爱超碰网| 午夜情侣自拍网站| 久久婷婷五月天| 丰满岳乱妇一区二区三区| 欧美色图电影| 久久一区二区加油站| 亚洲 se图 欧美电影| av片在线观看免费播放| 日韩人成网站在线播放| 无码动漫av中文字幕| 亚洲中文字幕熟女少妇一区二区| 青木玲在线不卡| 神马久久久久久久久久久久| 亚州伊人色综台| 色婷久久| 丰满人妻av一区二区三区| 精品国产无码中文| 91被操| 人妻少妇久久中文字幕一区二区 麻豆 | 黄片直播三级黄片两女一男| 操逼逼一区视频| 超碰97网站| 国产欧洲精品亚洲午夜拍精品| 亚洲瓯美色图| 无码欧美有限公司| 久久久久久中文字幕中文字幕最新| 五月天婷精品激情| 国产aⅴ无码片毛片一级网站| 乱伦熟妇一区二区| 日B操| 亚洲 欧美 日韩 国产一区二区| 精品传媒在线一区| 啪啪自拍九九综合| 亚洲国产综合视频| 搡老女人911熟妇老熟女| 91青青草| 欧美色网络| 天久久久噜噜噜久久国产精品爽爽| 色97欧美| 国产精品久久久| 乱伦熟女论坛| 人人操人人大香蕉| 99啪啪| 成人AV素股で擦久久| 精品福利视频| 综合天天。| 91国产伊人大香蕉| 国产精品白领在线观看| 精品区国产区一区二区三区| 凹凸视频特色日本特黄| 肉丝网站91| 久久久久久少妇| 999国产精品999久久久久久| 欧美操人视频| 99ri在线视频| 久久婷婷亚洲欧| 97鸡把在线视频| 91在线欧美| 日韩 欧美 另类 人妻| 天天天天天天天天天天干美女 | 在线视频97| 久久社区一区二区三区| 人人摸人人干| 国产精品久久久久久久免牛肉蒲团| 9 1果冻精品视频| 美国黄片aaa| 桃花色涩综合影院| 欧美亚男人的天堂| 三级色影综合网| 亚洲第一精品在线视频| 亚洲国产欧美中文永久| 天天摸夜夜摸| 中文字幕欧美日韩三级| 成人网站 免费观看| 丰满人妻无码一区二区三区| 曰韩av中文字幕专区| 欧美91网站| 亚洲āv网址在线观看| 久妇网| 国产成人 综合亚洲 天堂| 丁香九月婷婷| 久久五月天婷婷丁香中文字幕| 天操天操夜操夜月月年年操操| 99色在线观看| 手机在线观看不卡无码av| 青青操狠狠撩| 97久久久久久久精| 求求你操操我| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 91综合国产精品| 国产视频第2页| 玖玖综合网| 黄片com.| 国产性刺激| 伊人精品国产| 韩美日操逼| hd成人一区二区在线| 久久久久久性爱片| 综合网少妇| 欧美一区二区一级岛国大片| 91欧美高清| 嗯啊不要啊啊在线观看视频| 91制服丝袜| 色在线亚洲视频www| 欧亚免费视频| 99久在线精品99re8a| 九九九国产| 青娱乐久久艹| 国产欧洲精品亚洲午夜拍精品| 中文字幕后石码四区五区| 永久免费av无码网站国产app| 亚洲欧美成人在线| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 欧美日韩一区二区三区四区蜜桃| 国产亚洲人妻综合日韩 久久| 亚洲性少妇| av日韩国产一区二区| 99999精品成人| 97在线免费观看| 狠狠综合| 亚洲高清综合网| 97色色色| 国产偷拍网站| 狠狠躁天天躁日日躁| 日韩 国产 欧美自拍| 欧美黄色图片| 天天操天天射天天日| 亚洲欧美setu| 无码少妇精品一区二区60岁老人| 超碰 国产熟女精品一区| 亚洲综合精品国产一区| 18精品一二区| 95精品在线| 麻豆国产精品午夜视频| 91女优在线观看| 亚欧高清在线| 超碰97男女| 狠狠中文字幕| 精品人妻av在线播放| 亚洲人妻久久久| 国产精品天美传媒| 日本精品一区二区中文字幕| 精品人妻一区二区三区免费视频| 日本熟女中文| 国产乱伦性爱区| 神马久久免费电影观看| 97色色色综合网站| 成人看片网站| 日本天天操| 久久精品国产亚洲粉嫩| 久久女同性恋一二区| 96精品在线| 丁香六月东京热| 亚洲色宗合| 自拍亚洲综合| 欧洲精品一区二区三区| 人妻久久久| 午夜无码精品免费看性色| 精品福利| 嗯~啊~轻一点 视频| 91美女视频在线| 久久超碰爱| 无码精品蜜桃一区二区三区ww| 九久精品| 欧美激情内射| 久久久久久中文| 亚洲性少妇| 手机不卡视频不卡在线一二三区 | 欧美色干| 日本一卡二区在线| 97在线资源| 91久久久视| 亚洲国产剧情少妇激情| 冬京热男人的天堂| 亚洲精品色| 久久9精品视频| 久久午夜伦| 色婷婷导航| WWW黄片COM| 亚洲超碰在线| 屌逼麻豆| 另类图片五月| 国产av青草| 欧美亚洲20p| 久久久久亚洲一区女同性恋中文字幕| 欧美图片色综合| 男人天堂站| 精品久久99| 午夜天堂精品久久| 欲色啪| 不卡一区视频| 亚洲啪啪视频一区二区| 亚洲av噜噜噜噜噜噜| 波多野结衣之双飞调教在线播放 | 亚洲天堂精品日韩电影| 国产精品白丝在线播放| 日逼视频日本| 天天日B夜夜干B时时操B| 色999;丁香五月| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 岛国网址国产| 99色在线| 国产成人天堂| 94色色电影网| 中国一级操逼视频| 亚洲无码色| 大香蕉99热| 呻吟 欧美 日本 中出| 亚洲熟女诱惑| 国产操逼视频在线观看| 欧美午夜精品久久久久久超碰| 精品国产99| 欧美情色亚洲| 欧美日韩中文亚洲v在线综合| 一个人免费HD91视频| 精品久久久久久亚洲| 欧美色天堂网在线视频| 91网站18| 综合网欧美在线| 日本东京热大香蕉a片| 亚洲深夜福利| 国产精点久久久成人| 淫色网综合| 久久婷婷一区| 国产黄色av大片网站| 5252色欧美在线| 91亚洲人| 五月婷婷综合在线| 亚洲91射| 国产成人bd在线观看| 欧美综合制服在线| 一类av片在线看| 日韩亚洲美女一区久久| 外国免费性情大片| 一本久道久久综合狠狠爱| 久久精品国产97欧美精品亚洲| a一区二区三区乱码在线| 91N欧美| 91大香蕉伊人| 在线国产探花| 国产精品日日摸天天碰| 中文字幕黑人大片| 97超碰人妻| 天天操女人| 一起草三级AV电影在线观看| 欧美色图天堂在线| 91丝袜| 91久久久久久| 亚洲国产综合图区中文字幕| 91精品久久久久久77777| 亚洲影视高清第一页| 秋霞曰韩R级| 人乳av| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 久久超碰98| 亚洲va有码在线天堂| 激情文学亚洲| 日本一二区免费| 日产操逼| 欧美日韩国产人人| 大香蕉久久| 欧美精品精品一区二区| 天美欧美国产| 九九无码视频| 国产无码精品久久久久久| 国产亚卅97| 久久精品色欧美aⅴ一区二区| 亚洲高清欧美总合| 亚洲天堂第一页| 亚洲乱熟女一区二区三区大香蕉| 成人性交午夜免费片| 日韩一999精品| 免费中文在线| 午夜亚洲WWW湿好大| 少好三P| 欧美熟妇视频 | 日va操| 人人么人人操| 欧美性夜| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 先锋精品av色鲁| 国产精品极品美女视频| 国产人妻久久精品一区二区三区| 色九月综合| 我爱大香蕉| japan日本高清乱xxxx| 成年人黄色| 国产av色网| 韩日精品福利视频一区不卡在线免| 野狼激情网| 麻豆人妻精品一区二区| 强奸乱伦资源| 牛牛aV| 午夜福利免费精品视频| 人妻一二三区| 国产三级在线现体验区| 自拍偷拍第26| 欧美中文字幕日韩在线| 国产1024在线播放| 男啪女色黄无遮挡免费观看| 超碰97人妻在线| 亚洲 欧美 色图| 99热婷婷一区二区三| 91九九九吃| 在线情色电影 91大| 久久只有精品一区二区三区| 男人的天堂在线2| www.四虎在线| 91美女看B| 亚洲情色综合网| 国内成人圈中文字幕无码视频| 欧美熟妇人体| 99re在线精品78| 内射中国少妇高清视频免费视频 | 欧美亚洲日本视频久久久| 亚洲国产97| 色哟哟 日韩精品| 日本不卡高清视频| 欧美丰满少妇xx高潮| 久久国产乱子伦精品免费女,网站| 免费在线视频97| 粉嫩av平台| 亚洲欧美综合区自拍另类 | 韩国轻伦国内自拍一区| 欧美中字二区| 另类小说欧美激情校园春色| 天天草天天日| 国产亚洲精品美女久久久久久2021| 免费av高清无码| 成人国产精品三级A片| 激情综合色| 99青青草国产视频| 蜜桃臀一区二区三区久久| 综合网亚洲在线| 狠狠操使劲操| 亚洲中文日韩精品| 91最新综合| 91亚洲欧美综合高清在线| 日韩91网| 26uuu欧美日韩| 色色色999| 日韩欧美成人大香蕉| 欲色啪| 国产亚洲精品精AV.| www…国产操逼| 裸模AV女优| 久久久久久九| 五月婷婷综合激情| 中文字幕无码不卡啪啪| 囯产精品久久久久久久久久梁医生| 欧美中出1| 青青操视频在线| 欧美五十路熟| 亚洲棕合电彰| 日韩熟女三十乱伦| 五月丁香色婷婷| 欧美性少妇| 丰满人妻无码一区二区三区 | 亚洲无码国产探花在线观看| 蜜桃无码AV一区二区| 神马久久网| 2018天天日天天日| 黄污污污污| 大香蕉淫人网| 国产黄a三级三级三级av在线看| 凹凸 69堂 在线播放| 中文字幕亚洲永久精品| 夜夜 中文视频rt| 国产精品亚洲无码| 99re这里| 天天干人妇| 欧美色图另类图片| 情侣开房子拍 日韩无码 女的很漂亮| 蜜桃臀一区二区三区久久| 97人妻免费中文字幕| 综合97久久| 睡产熟女乱伦| 男人的天堂久久| 久久性爱视频| 国产偷拍网站| 加勒比人妻综合| 国产精品熟女丝袜一区二区| 天天射日日干| 日韩AV色图| 无码黑人精品一区二区三区三| 天天日熟妇| 天天干天天干天天干| 欧洲黄色网| 97精品视频网站| 亚洲精品视频在线播放| 91亚洲网站| 麻豆九九九| 狠狠色综合网| 午夜操逼不卡| 懂色AV网| 日韩资源网| 亚洲欧美一区二区三区在钱蜜桃| av网站在线观看了| 精品一级| 欧美亚洲高清晰| 97se综合网| www.久久久久| 人妻系列无码专区中文有码| 思思热一热婷婷热一热| 国产亚洲日本精品在线| A级国产欧美激情在线| 97丝袜亚洲在线播放| 精品国产一区二区久久| 2024人人操人人摸| A级毛片在线看免费| 亚洲 欧美 色图| 中亚黄色三级大片| 欧美香蕉视xxx| 九九香蕉网| 国产树林里野战在线看| 日韩久久.一级黄色片| 网友自拍第一页| 91热| 少妇的嫩逼图片| 久久一本大香蕉| 青青草吊丝| 青青青国产| www.四虎在线| 久都青青视频| 18一区二区三区| 清清一区二区三区四区不卡视频| 蜜臀国产AV中文字幕| av天堂手机版追回 | 熟妇人妻一区二区| 日韩熟女精品无码专区一区二区| 1区2区3区在线视频| 欧美日韩国产在线| 亚洲色人妻综合| av午夜玫瑰| 超碰碰激情97+久| 农村妇女精品一区二区| 久热久| 亚洲天堂电影网| 欧美色图片色哟哟| 国产精品午夜福利| 玖玖爱影院| 人妻一区二区三区视频| 青娱乐国产精品| 精品在线观看视频在线| 99热在线播放| 天美av在线观看| 亚欧中文字幕在线视频| 啊啊啊啊啊啊啊啊啊在线观看| 狠操91,com| 91美女片在线| 欧洲亚洲国产综合在线| 亚洲二区精品在线观看| 992这里有精品| 亚洲欧美综合色| 亚洲天堂电影网| 国产精品白丝| 天天操天天舔| 亚洲最大的黄色电影网站。| 国产十八禁视频| 超碰色老头| 精品久久久久av影院| 爽爽淫人网| 狠操91,com| 91色花堂| 欧美在线播放aaaa| 都市激情人妻一区二区青青操视频 | 97久久超碰| 99日免费视频中文字幕| 国产午夜精品理论片a大结局| 尤物一级在线免费观看| 蜜臀AV成人精品蜜臀| 91天天综合日韩欧美| av天堂手机版追回| 国产免费久久精品99re韩国| 久久97| 亚洲最大无码中文字幕网站| 天天肏美女| 中国少妇啪啪视频| 欧美精品日韩一区二区| 搡老女人老91妇女熟女| 久操凹凸视频| 美女AV一区二区| 国产乱伦亚洲色图高清无码| 91暧暧| 超碰美国| 人人澡人人爽人人精品| 日本不卡中文| 五月婷婷综合激情| 欧美激情在线观看视频| 青青操青娱乐| 日韩三级伊人| 亚洲精品天天影视综合网| 国产精品久久| 97色欧州| 性在久久久久久| 亚洲淫乱骚妇AV| 操逼A∨| 今日头条成人一区二区三区四虎精品| 免费av高清无码| 国产1727欧美| 免费啪啪啪网站18岁| 无码二级三级| 800zy一区二区| 亚洲色色探花| 国产成人五月天丁香花| 激情99| 中文字幕精品免费一区二区| 97一区二区蜜臀| 波多野结衣AV无码一区| 国产乱青青草久久| 99操| 日韩高清黄片| 超碰诱惑| 欧美在线中M| 最新啪啪视频| 三男一女不戴套的A片| 蜜臀无码一区二区| 亚欧精品久久久久久久久久久| 久久精品一区二区| 国产精品一区二区后入| 国产91美女高潮| 中文字幕交换人妻| 91久久青青草原精品| x97av| 97超碰色屌| 大香蕉久久| xxx0国产在线播放| 台湾佬大香蕉| 91性| 牛牛久久国产精品视频一二三| 综合婷婷| 日本www操操操| 亚洲好看强奸乱伦| 日本中文熟女视频| 精品人妻少妇| 国产中文字幕在线观看| 欧洲精品久久| 色香伊人| 超碰97久久国| 97久久久精品| 亚洲视频一二区| 国产老熟女| 欧美成人9797| 久久久久13| 国产97视频免费观看| 五月天亚洲色图| 亚洲性天堂| 外国免费性情大片| 五月天亚洲色图| 香蕉99秘 一区精品蜜桃臀| www.成人无码| 四虎免费在线播放| 天天搞欧美| 91色伦综合| 长久操视频| 亚av顶级裸体一区二区三区四区五区 | 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 97超碰碰碰| 美女刺激久久国产欧美| 久久麻豆一区二区| 日韩99神马视频播放片在线播放| 色吧五月| 久久大香蕉手机高清| 久久天天摸| 91美女在线视频| A啊啊在线观看| 欧美大色交| 国产白丝网站| 亚洲精品97| 国产亚洲精品农村妇女| 中国大陆国产高清AⅤ毛片| 亚洲天天综合| 亚洲综合中文字幕有码| 青青草中文-久久青草精品一区二区三| 五月天激情小说| 少妇天堂网络| 1024精品在线| jk白丝没脱就开始啪啪| www激情| 天天操天天看| 99无码狠狠久久| 欧美青青草视频| 国产91亚洲精品一区二区三区| 亚洲图片欧洲图片aⅴ| 操碰91| 91处女在线观看| 操逼逼中文字幕| 五月婷婷综合网| 亚洲人在线成线成人| 熟女欧美日韩综合婷婷| 久久精品一区二区| 色综合尤物| 婷婷美人网| 天天综合91| 乱伦Av网| 国产青青美女玩逼视频| 中文久久| 色婷婷亚洲婷婷| 91精品婷婷国产综合久久| 日本1区2区不卡视频| 熟妇高潮一区二区免费视频| 久久噜噜噜精品国产亚洲综合| 亚洲网站一区二区在线| 天堂岛av| 精品天堂| 九色97| 射综合网| 日韩三级一区| 日韩精品午夜操呦呦不卡影院| 国产亚洲色婷婷久久99精品91葵花宝典| 人人污日韩一区二区| 国产女大学生AV| 日韩精品一二三四| 国产三级片在线观看| 亚洲色色色| 亚洲日韩天堂| 国产精品小视频一区二区三区| 国产97综合| 自偷自拍的亚洲视频| 蜜臀无码一区二区| 国产成人精品无码久久| 四虎在线观看网站| 另类在线| 97无码视频在线播放| 91性生活久久久| 91中文字幕制服丝袜免费视频| 婷婷视频网| 秋霞 色色| 成人精品视频| 亚洲欧美经典一区二区| 激情一区二区| 国产五码丝袜屁眼| 九九热AV| 91精品人妻偷情| 亚洲黄色电影| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 日韩精品亚洲专区在线影视| 久久综合97| 亚洲天堂美臀在线| 久久手机好看网站| 国产18精品亚洲精品| 中文字幕精品探花视频| 色香伊人| 久久中文色图| 日韩在线视频1234| 99精品久久久久久久婷婷| 日本一二区不卡| 男人天堂无码| 免费的黄片有限公司| 久久久日本电影| 美国三级日本三级久久99| 欧美久久毛片基地| 色五月婷婷麻豆在| 污污汅18禁网站在线永久免费观看 | 天天操夜夜操| 人人操,操人人| 精品人妻一区二区三区四区石在线 | 亚州欧美在线| 后入式五六区| 成人综合网 欧美| 九九久久久九九| 丁香五月性| 婷婷午夜成人色中色| 呦呦一区| 天操天操夜操夜月操月年年操操| 国产偷仑| 国产精品女同| 白丝AV网站| 久久综合乱子伦国产免费| 成人AV在线电影| 乱伦av.com| 亚洲制服aⅴ中文字幕| 免费1级a做爰片观看| 视频一区二区三区精品| yaouchengrenav| 亚洲欧美综合区自拍另类| 亚洲国产成人精品999| 豆花视频操逼网址| 日本熟女免费視颖| 国产强奸乱伦欧美| av网站免费线看| 俄罗斯一区二区视频在线观看| 国产在线激情视频| 波多野结衣一级视频| 久久亚洲国产成人| 99久久久无码精品国产人| 国产成人在线观看网址| 国产宅男宅女在线观看| 熟女字幕| A V少妇特黄三级| 麻豆人妻少妇在线免费观看| 亚州综合AⅤ| 高清孕妇孕交 交| 国产内射爽爽大片| 国产AV久久野战精品| 91超级碰碰| 日本人妻A片成人免费看片| 色婷婷丁香五月天| 69综合网| 97久操| 无码外流操逼视频| 欧美中出1| 九九九综合精品| 97少妇人妻中文字幕久久| 9丨久久九九九| 亚洲一欧洲中文字幕在线| 天天综合网站| 欧美日韩亚洲高清不卡一区二区三区| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 和协影院中文字幕三区| 91女日逼| 国产 热久久久久国产精品| 久久久久久久九九九九九九| 综合天天。| 国产精品永久免费10000| 人妻丝袜无 码视频专区| 淫骚熟女一区二区三区| 91久久青青草原精品| 欧美大香蕉专区网| 男女激情中文字幕| 97国产精品一区二区传媒公司| 777AV电影| 91性生活久久久| 在线视频97| 嗯嗯啊啊视频在线看| 中文一区二区| 激情 欧美 亚洲 小说| 亚州精人品大香蕉| 亚洲天堂久| 凹凸视频特色日本特黄| 日韩二区三四区五区六区在线看| 天天看精品动漫视频一区| 久久五月天婷婷| 日夜尻逼网| 国产91精品福利在线| 99色婷婷中文字幕乱色| 国产色图乱伦| 炮色五月| 久久久555| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 国产网站在线播放| 天天综合站| 日本中文字幕在线视频| 熟妇激情| 偷窥自拍亚洲天堂网爆| 九九九九亚洲| 亚洲欧洲小说图片视频| 久综合国内精品自在自线| 九月AV| 久干9操| 久久久性少妇| 混色激情av| 又大又长又粗又爽又黄| 欧美激情黑人| 激情丁香婷婷| 免费精品无码一级毛片牛牛影视| 97自拍视频在线| 日韩免费a级毛片无码a∨| 免费网色网站| 国产97视频免费观看| 国产天天噜一噜久久久| 亚洲麻豆精品二区三区| 20cm女自慰在线日韩欧美| 亚洲淫色网中文| 日本久久天堂| 豆花视频操逼网址| 精品超碰色| 欧美综合在线91| 久久女人一区二区三区| 18禁网站在线播放| 综合网亚洲| 色97欧美| 艳尻美人妻| 97超级久久强资源| 久久久久亚洲AV无码专区少妇| 欧美瑟综合| 91/欧美| 欧美 亚洲 大香| 日韩精品一二三四| 国产A v无码专区| 天天日天天操天天射河南省| 2020天天色综合| 亚洲综合图色在线| 久久免费中文字幕在线观看| 国产欧美精选激情视频| JIZZJIZZ亚洲女人被躁| 四虎免费在线播放| 无码九九九九| 久久国产对白激情浪潮 | 人人澡综合涩| 日韩有码一区三区| 日本色色的视频| 日韩人妻中文视频| 久久欲| 热久久国产| 久久亚洲欧美中文字幕国语 | 亚洲国男人的天堂| 日本三级韩三级99久久| 色色婷婷丁香| 精品国产久热在线观看| 国产成人久久久精品免费AV| 操日韩第| 人干人人人操人人摸| 国产Aα| 成人精品在线| 91视频国品一二三区| 日韩 欧美 另类 人妻| 白嫩国模丰满一二三区| 色婷婷网| a人欧美综合天堂麻豆| 亚洲限制级| 噜噜噜噜天天狠狠| 78久久| 欧美成人A√在线一区二区| 日韩精品在线观看观看| 国产精品制服丝袜清纯唯美| 插欧洲美女欧美精品| 97 亚洲 日韩 欧美 在线| 99国内熟女露脸视频| 久久久夜夜夜| 久久东京伊人一本到鬼色| 久久久九九网站| 人妻精品4K4K4K4K4| 激情黄色五月天| 亚洲欧洲成人在线电影| 日韩人妻一区二区| 国产日韩欧美亚洲精品95| 岛国AB视频| 亚洲美女精品| 一级免费精品| 粉嫩不卡一区二区性爱| 日本在线播放不卡一区| 亚洲欧美激情另类色图| 99热只有| 日日妻色网| 国产在线强奸视频| 色婷婷久久| 99国内熟女露脸视频| KK色在线影院| 熟妇的味道HD中文字幕| 射欧美综合| 久久久久久久| 91啪啪| 色网1| 亚洲激情综合另类男同| 黑人天8A∨高清网站| 欧美综合亚洲综合| 91蜜桃传媒精品久久久一区二区| 韩国手机不卡无码三级视频| 丝袜制服字幕在线| 久久二| 亚洲国产精品久久久久久久久久| 久热这里| 丝袜大香蕉| 嗯嗯啊好大| 免费久久一级毛片大黄| www.99热在线只有精品| 试看日韩黄片| 欧美高清性猛交| 牛牛AV人人夜夜澡人人爽|