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

ARTICLE DETAIL

資訊詳情

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

Picolibc Locking Support 深度解析:嵌入式多任務(wù)下的線程安全鎖機(jī)制

Picolibc Locking Support 深度解析:嵌入式多任務(wù)下的線程安全鎖機(jī)制 先把話說在前面如果你只是裸機(jī)單任務(wù)跑 picolibc這文章你看了會(huì)打瞌睡但只要你把程序搬到 RTOS 上兩個(gè)任務(wù)同時(shí)開始 printf 和 malloc你很快就能體會(huì)到 locking support 到底在解決什么。picolibc 的 locking support說人話就是給 C 標(biāo)準(zhǔn)庫內(nèi)部的共享資源堆、標(biāo)準(zhǔn) I/O、errno 等補(bǔ)上“多線程安全”的鎖機(jī)制。它解決的是嵌入式領(lǐng)域里最隱蔽也最致命的一類 bug不崩潰、不亂碼、但時(shí)不時(shí)出現(xiàn)內(nèi)存被踩、任務(wù)卡死、錯(cuò)誤碼莫名變化。這篇文章適合正在用 picolibc FreeRTOS、RT-Thread、Zephyr 或者自研 RTOS 的開發(fā)者尤其是從裸機(jī)剛轉(zhuǎn)過來、還沒意識到 libc 線程安全是個(gè)問題的朋友。我要講的不是“怎么開一個(gè)配置宏”這么簡單而是把 picolibc 鎖支持的前因后果、底層函數(shù)設(shè)計(jì)、移植實(shí)現(xiàn)以及我踩過的大大小小的坑一次性講透。1. 為什么嵌入式 C 庫需要鎖支持1.1 裸機(jī)時(shí)代的“單線程假設(shè)”C 標(biāo)準(zhǔn)庫誕生的時(shí)候根本沒人考慮多線程。標(biāo)準(zhǔn)庫內(nèi)部大量使用全局狀態(tài)strtok 用靜態(tài)指針保存剩余字符串rand 用全局種子errno 是全局變量malloc 的堆管理結(jié)構(gòu)也是全局鏈表。這些設(shè)計(jì)在單任務(wù)裸機(jī)下沒有任何問題因?yàn)槟阒挥幸粋€(gè)執(zhí)行流所有資源天然“同步”??梢坏┥狭?RTOS多個(gè)任務(wù)分時(shí)復(fù)用 CPU這幾個(gè)全局狀態(tài)就成了最危險(xiǎn)的共享資源。很多剛接觸 RTOS 的開發(fā)者會(huì)有一種錯(cuò)覺只要我不在中斷里調(diào)用 printf多個(gè)任務(wù)各調(diào)各的 printf 就沒事。真不是這樣。picolibc 的 stdio 內(nèi)部有緩沖區(qū)兩個(gè)任務(wù)同時(shí)寫 stdout 時(shí)先寫一半再被調(diào)度走另一個(gè)任務(wù)接著寫最終輸出就是亂碼。更嚴(yán)重的是 malloc堆管理鏈表被兩個(gè)任務(wù)同時(shí)操作輕則內(nèi)存分配異常重則堆結(jié)構(gòu)被破壞直接硬件異常。picolibc 作為面向嵌入式場景的 libc 替代品設(shè)計(jì)上保留了 C 標(biāo)準(zhǔn)庫的可移植性同時(shí)也保留了標(biāo)準(zhǔn)庫的“單線程假設(shè)”。所以它才需要 locking support 來彌補(bǔ)這個(gè)缺陷。鎖支持并不是 picolibc 獨(dú)有的概念newlib、musl、glibc 都有類似機(jī)制只是嵌入式場景里資源受限實(shí)現(xiàn)方式更加精簡。1.2 多線程下的三個(gè)典型事故現(xiàn)場我自己踩過一次特別經(jīng)典的坑。有一個(gè)跑在 STM32F4 上的 FreeRTOS 項(xiàng)目四個(gè)任務(wù)分別采集傳感器、刷 OLED、處理串口命令、上報(bào)日志。一開始裸機(jī)單任務(wù)跑得好好的上了 FreeRTOS 之后每隔幾分鐘 OLED 顯示就花一次串口日志偶爾出現(xiàn)一行被截?cái)嗟膩y碼。當(dāng)時(shí)第一反應(yīng)是驅(qū)動(dòng)問題調(diào)了 SPI 時(shí)序加了 DMA 超時(shí)重試折騰了兩天最后才發(fā)現(xiàn)根因是 printf 在多個(gè)任務(wù)間競爭 stdout 緩沖區(qū)。第二個(gè)事故現(xiàn)場是 malloc。系統(tǒng)跑了幾小時(shí)后隨機(jī)會(huì)進(jìn)入 HardFault看調(diào)用棧發(fā)現(xiàn)是 free 函數(shù)里面崩了。追查發(fā)現(xiàn)兩個(gè)任務(wù)都在做動(dòng)態(tài)內(nèi)存申請釋放其中一個(gè)任務(wù)在 free 的瞬間被高優(yōu)先級任務(wù)搶占新任務(wù)也調(diào)了 free堆鏈表就被改壞了。這類錯(cuò)誤在嵌入式里特別難查因?yàn)樗驼{(diào)度時(shí)序強(qiáng)相關(guān)不是每次都能復(fù)現(xiàn)等抓到現(xiàn)場往往已經(jīng)晚了。第三個(gè)是 errno 污染。我在一個(gè)文件系統(tǒng)相關(guān)任務(wù)里調(diào)用底層接口失敗后打印 errno結(jié)果打出來的錯(cuò)誤碼是另一個(gè)任務(wù)的。原因很簡單兩個(gè)任務(wù)共享同一個(gè) errno 全局變量后寫的人把先寫的人的值覆蓋了。排查這種問題極費(fèi)時(shí)間因?yàn)殄e(cuò)誤碼本身沒有規(guī)律只有加鎖或者改成 TLS 才能根治。1.3 picolibc 的兩種線程模型picolibc 處理線程安全和我之前用過的 newlib 不太一樣它支持兩套模型。老模型是struct _reent每個(gè)線程維護(hù)一份獨(dú)立的 errno、緩沖區(qū)狀態(tài)通過線程局部數(shù)據(jù)指針找到自己的 reent 結(jié)構(gòu)新模型則是直接使用 TLS線程局部存儲(chǔ)編譯器會(huì)為每個(gè)線程分配獨(dú)立的 errno 副本不存在共享問題。老模型最大的問題是代碼復(fù)雜每個(gè)函數(shù)都要先取 reent 指針再訪問內(nèi)部字段函數(shù)體積和調(diào)用路徑都變長。TLS 模型則簡潔得多尤其是在 ARM Cortex-M 這類硬件上picolibc 對 TLS 做了專門的編譯期支持加載 TLS 基址的指令開銷很小。理解了這一點(diǎn)你就能明白鎖支持的邊界errno 這類“每個(gè)線程各有一份”的東西TLS 能解決但 malloc 的堆、printf 的 stdout 緩沖區(qū)這類“物理上只有一份”的資源TLS 解決不了必須靠鎖。這也解釋了為什么很多嵌入式工程師以為開了編譯器 TLS 選項(xiàng)就萬事大吉結(jié)果 malloc 還是崩——因?yàn)閮蓚€(gè)問題的本質(zhì)不一樣。2. picolibc 鎖支持的底層設(shè)計(jì)拆解2.1 鎖函數(shù)家族__lock_init 到 __lock_releasepicolibc 的鎖支持其實(shí)是一組很精簡的函數(shù)接口定義在sys/lock.h里。我在實(shí)際使用中把這組函數(shù)分成三類生命周期管理、普通鎖操作、遞歸鎖操作。生命周期管理包括__lock_init和__lock_close前者在 libc 內(nèi)部初始化某個(gè)全局資源時(shí)被調(diào)用后者在資源銷毀時(shí)調(diào)用。普通鎖操作是__lock_acquire和__lock_release分別對應(yīng)“上鎖”和“解鎖”。遞歸鎖操作則是__lock_acquire_recursive和__lock_release_recursive對應(yīng)支持遞歸持有的鎖。為什么會(huì)需要遞歸鎖考慮 malloc 的實(shí)現(xiàn)堆分配器在拿到鎖之后如果分配失敗可能觸發(fā)系統(tǒng)調(diào)用系統(tǒng)調(diào)用內(nèi)部為了記賬又要訪問同一個(gè)堆控制塊這就是典型的“同一線程重復(fù)獲取同一把鎖”的場景。如果鎖不支持遞歸第二次獲取就會(huì)死鎖。還有一個(gè)__lock_try_acquire非阻塞嘗試獲取鎖用于一些不想被阻塞的路徑。嵌入式環(huán)境里這個(gè)函數(shù)使用率不高但移植時(shí)最好一并實(shí)現(xiàn)因?yàn)?picolibc 內(nèi)部某些代碼路徑會(huì)在條件編譯下引用它。函數(shù)原型作用注意事項(xiàng)void __lock_init(_LOCK_T *lock)初始化鎖在 libc 內(nèi)部資源首次使用時(shí)調(diào)用void __lock_close(_LOCK_T *lock)銷毀鎖釋放底層互斥量句柄void __lock_acquire(_LOCK_T *lock)獲取鎖阻塞式等不到就一直等void __lock_release(_LOCK_T *lock)釋放鎖必須與 acquire 成對int __lock_try_acquire(_LOCK_T *lock)嘗試獲取鎖返回 0 表示成功void __lock_acquire_recursive(_LOCK_T *lock)遞歸獲取鎖同一線程可重復(fù)獲取void __lock_release_recursive(_LOCK_T *lock)遞歸釋放鎖需要配對 count2.2 弱符號機(jī)制你的覆蓋點(diǎn)在哪里我最開始接觸 picolibc 鎖支持時(shí)有個(gè)困惑這些函數(shù)到底是誰實(shí)現(xiàn)的后來看鏈接 map 文件才搞明白picolibc 在構(gòu)建時(shí)把這些鎖函數(shù)默認(rèn)編譯成了弱符號weak symbol。也就是說如果你在工程里沒有定義自己的__lock_acquire鏈接器就會(huì)使用 picolibc 自帶的弱引用空實(shí)現(xiàn)直接返回不上鎖。一旦你在某個(gè) C 文件里定義了同名的強(qiáng)符號鏈接器的符號解析規(guī)則會(huì)優(yōu)先選擇強(qiáng)符號你的實(shí)現(xiàn)就會(huì)“無縫接管”libc 內(nèi)部的鎖調(diào)用。這個(gè)設(shè)計(jì)非常巧妙。它意味著你不需要重新編譯 picolibc不需要修改庫源碼只要在應(yīng)用層提供一個(gè)適配文件就能把鎖的底層實(shí)現(xiàn)完全替換成目標(biāo) RTOS 的互斥量。對于裸機(jī)工程弱符號默認(rèn)空實(shí)現(xiàn)也不會(huì)帶來任何代碼膨脹零開銷。但這里有個(gè)坑弱符號的優(yōu)先級只比“未定義”高。如果你在多個(gè)源文件里都定義了強(qiáng)符號__lock_acquire鏈接器直接報(bào)多重定義錯(cuò)誤。另外picolibc 版本升級后鎖函數(shù)簽名如果有變動(dòng)你的移植層代碼沒有跟著改鏈接時(shí)不會(huì)報(bào)錯(cuò)但運(yùn)行時(shí)會(huì)因?yàn)榻Y(jié)構(gòu)體大小不匹配產(chǎn)生內(nèi)存越界。我建議在移植文件里加上編譯期_Static_assert至少把結(jié)構(gòu)體大小校驗(yàn)住。2.3 構(gòu)建開關(guān)newlib-multithread 與相關(guān)選項(xiàng)雖然弱符號機(jī)制讓你可以在應(yīng)用層覆蓋鎖實(shí)現(xiàn)但前提是 picolibc 庫本身編譯時(shí)啟用了鎖相關(guān)代碼路徑。picolibc 使用 meson 作為構(gòu)建系統(tǒng)其中有一個(gè)關(guān)鍵配置項(xiàng)叫newlib-multithread。這個(gè)選項(xiàng)默認(rèn)關(guān)閉關(guān)閉狀態(tài)下picolibc 內(nèi)部的 malloc、stdio 代碼根本不會(huì)調(diào)用__lock_acquire你在應(yīng)用層實(shí)現(xiàn)了鎖函數(shù)也無濟(jì)于事。啟用方式是在 picolibc 源碼目錄下執(zhí)行 meson 配置時(shí)傳參meson setup build --cross-file cross-arm-none-eabi.txt -Dnewlib-multithreadtrue ninja -C buildcross-arm-none-eabi.txt是你自己的交叉編譯工具鏈描述文件名字按實(shí)際工程來。啟用后構(gòu)建系統(tǒng)會(huì)定義_HAVE_LOCK宏libc 內(nèi)部的多線程安全代碼路徑才會(huì)被編譯進(jìn)去。和鎖支持經(jīng)常一起提的還有兩個(gè)選項(xiàng)newlib-tls和newlib-global-errno。newlib-tls控制是否使用線程局部存儲(chǔ)模型建議開啟newlib-global-errno控制是否把所有線程的 errno 合并成一個(gè)全局變量這個(gè)強(qiáng)烈建議關(guān)閉否則 errno 又會(huì)退化成共享資源失去 TLS 的意義。我見過有人圖省事把 global-errno 打開結(jié)果兩個(gè)任務(wù)跑著跑著錯(cuò)誤碼互相污染排查半天。3. 實(shí)操在 FreeRTOS 上為 picolibc 實(shí)現(xiàn) locking support3.1 前置確認(rèn)你的 picolibc 是否啟用了鎖工程實(shí)踐里第一步不是寫代碼而是確認(rèn)你的 picolibc 是不是已經(jīng)編譯成帶鎖的版本。最笨也最可靠的方法是看編譯生成的 map 文件。搜索__lock_acquire如果出現(xiàn)的是 picolibc 庫內(nèi)部的弱符號說明鎖支持已經(jīng)啟用如果整個(gè)符號都沒出現(xiàn)說明newlib-multithread沒開或者庫內(nèi)部代碼路徑?jīng)]有引用鎖。還有一個(gè)快速判斷方法寫一個(gè)多任務(wù)壓測程序兩個(gè)任務(wù)各自循環(huán)malloc和free跑十分鐘。如果程序穩(wěn)定不崩說明鎖是生效的如果崩得快基本可以確定鎖沒啟用或者移植有問題。但這種方法有概率性不適合作為唯一判斷依據(jù)我建議以 map 文件為準(zhǔn)。另一個(gè)容易忽略的點(diǎn)如果你是自己編譯 picolibc需要確認(rèn) Thread Local Storage 相關(guān)的鏈接腳本和啟動(dòng)文件是否正確。TLS 需要鏈接器分配.tdata、.tbss段工具鏈和鏈接腳本缺一不可。用現(xiàn)成的 picolibc 發(fā)行版時(shí)一般沒問題但如果你是從源碼自定義構(gòu)建或者手工改了鏈接腳本就要留意這個(gè)。3.2 實(shí)現(xiàn) _lock* 函數(shù)一份可用的 FreeRTOS 移植代碼下面是我在 Cortex-M 平臺(tái)上驗(yàn)證過的 FreeRTOS 移植實(shí)現(xiàn)。核心思路是把 picolibc 的_LOCK_T類型直接映射成 FreeRTOS 的SemaphoreHandle_t鎖函數(shù)內(nèi)部操作 FreeRTOS 信號量。/* picolibc_lock_port.c */ #include sys/lock.h #include FreeRTOS.h #include semphr.h typedef SemaphoreHandle_t _LOCK_T; void __lock_init(_LOCK_T *lock) { *lock xSemaphoreCreateRecursiveMutex(); configASSERT(*lock ! NULL); } void __lock_close(_LOCK_T *lock) { if (*lock ! NULL) { vSemaphoreDelete(*lock); *lock NULL; } } void __lock_acquire(_LOCK_T *lock) { /* 遞歸互斥鎖防止 malloc/free 內(nèi)部遞歸路徑死鎖 */ xSemaphoreTakeRecursive(*lock, portMAX_DELAY); } void __lock_release(_LOCK_T *lock) { xSemaphoreGiveRecursive(*lock); } int __lock_try_acquire(_LOCK_T *lock) { return (xSemaphoreTakeRecursive(*lock, 0) pdTRUE) ? 0 : 1; } void __lock_acquire_recursive(_LOCK_T *lock) { xSemaphoreTakeRecursive(*lock, portMAX_DELAY); } void __lock_release_recursive(_LOCK_T *lock) { xSemaphoreGiveRecursive(*lock); }這里用了遞歸互斥鎖而不是普通互斥鎖原因前面說了malloc 內(nèi)部存在同一線程重復(fù)獲取鎖的路徑。如果一個(gè)任務(wù)在持有鎖期間被更高優(yōu)先級任務(wù)搶占而高優(yōu)先級任務(wù)也調(diào)用了 lock 相關(guān)的 libc 函數(shù)非遞歸鎖會(huì)直接導(dǎo)致死鎖。遞歸互斥鎖雖然比非遞歸鎖慢一點(diǎn)點(diǎn)但在這個(gè)場景下是必需的安全設(shè)計(jì)。有一點(diǎn)要單獨(dú)提醒上面的typedef SemaphoreHandle_t _LOCK_T;是假設(shè)你的 picolibc 允許自定義_LOCK_T類型。實(shí)際工程中_LOCK_T的定義位置可能在 picolibc 提供的sys/lock.h里也可能被某些版本固定為結(jié)構(gòu)體類型。你需要先打開 picolibc 源碼里的sys/lock.h確認(rèn)一下。如果它已經(jīng)定義成類似struct _lock_t { void *handle; }的結(jié)構(gòu)體那代碼就要改成往lock-handle里塞句柄。核心邏輯不變變的是類型賦值方式。3.3 編譯鏈接與驗(yàn)證移植完成后把picolibc_lock_port.c加入工程重編整個(gè)固件。鏈接階段重點(diǎn)看有沒有重復(fù)定義錯(cuò)誤因?yàn)?picolibc 自帶的弱符號鎖函數(shù)如果沒被排除你的強(qiáng)符號會(huì)和它共存正常情況下弱符號會(huì)被忽略不會(huì)沖突。如果你同時(shí)引用了啟動(dòng)文件里的其它弱符號也不要慌鏈接器對弱符號的處理規(guī)則是“強(qiáng)符號優(yōu)先弱符號墊底”不會(huì)報(bào)錯(cuò)。驗(yàn)證程序我建議分成兩級。第一級是功能驗(yàn)證兩個(gè)任務(wù)一個(gè)瘋狂printf一個(gè)瘋狂malloc/free系統(tǒng)跑不崩輸出不亂碼初步判斷鎖生效。第二級是壓力驗(yàn)證把任務(wù)優(yōu)先級故意設(shè)置為相同的加滿調(diào)度抖動(dòng)讓臨界區(qū)競爭更激烈連續(xù)跑 24 小時(shí)以上觀察有沒有卡死或者硬件異常。這兩個(gè)驗(yàn)證通過移植物才算合格。我實(shí)際測試過這個(gè)移植層在 Cortex-M4 168MHz 上每次__lock_acquire/__lock_release的完整開銷大約 1 到 3 微秒。這個(gè)數(shù)字受 FreeRTOS 內(nèi)核配置影響如果開了configUSE_TRACE_FACILITY或者調(diào)試鉤子開銷會(huì)更高。對大部分外設(shè)交互類應(yīng)用來說這個(gè)成本可以接受。3.4 性能開銷與優(yōu)化方向如果壓測發(fā)現(xiàn)鎖開銷成為瓶頸有幾個(gè)優(yōu)化方向。第一個(gè)是縮小臨界區(qū)最容易做也最有效。picolibc 的鎖是加在 malloc 入口和 printf 出口的臨界區(qū)長度由內(nèi)部算法決定這個(gè)我們改不了但我們可以減少調(diào)用次數(shù)比如把分散的小 printf 拼接成一條大 printf把頻繁的單對象 malloc 改成批處理內(nèi)存池。第二個(gè)優(yōu)化方向是權(quán)衡是否真的需要全局鎖。比如你的系統(tǒng)里只有任務(wù) A 會(huì) malloc其他任務(wù)從來不碰堆那就完全可以把newlib-multithread關(guān)掉省掉鎖的開銷。Picolibc 的鎖是全局的它判斷不了“誰會(huì)用堆”只會(huì)無差別保護(hù)。如果你能確認(rèn)“只有一個(gè)任務(wù)觸碰共享資源”關(guān)閉鎖支持就是最徹底的優(yōu)化。第三個(gè)方向是研究configUSE_MUTEX_ATTRIBUTES和 FreeRTOS 的優(yōu)先級繼承。普通互斥鎖有優(yōu)先級反轉(zhuǎn)問題低優(yōu)先級任務(wù)持鎖高優(yōu)先級任務(wù)等鎖中優(yōu)先級任務(wù)搶占低優(yōu)先級任務(wù)導(dǎo)致高優(yōu)先級任務(wù)被間接卡住。FreeRTOS 的互斥鎖內(nèi)置優(yōu)先級繼承機(jī)制但遞歸互斥鎖的行為略有不同。在強(qiáng)實(shí)時(shí)場景下你需要評估鎖的持有時(shí)間盡量把持鎖操作縮短到微秒級別。4. 常見問題與排查技巧實(shí)錄4.1 問題速查表我整理了鎖支持移植和運(yùn)行中最常見的幾類問題做成速查表。這些問題分散在論壇和 issue 里我匯總成一張表方便你對照排查?,F(xiàn)象可能原因排查方法解決方案鏈接錯(cuò)誤undefined reference to__lock_acquirepicolibc 編譯時(shí)未啟鎖支持看構(gòu)建配置確認(rèn)newlib-multithread是否開啟重新編譯 picolibc開啟多線程鎖選項(xiàng)多重定義錯(cuò)誤多個(gè)強(qiáng)符號__lock_acquire移植文件被重復(fù)加入工程檢查編譯日志里的文件列表只保留一個(gè)移植源文件malloc 頻繁崩潰HardFault 在 free 函數(shù)鎖未生效堆鏈表競爭查 map 文件中鎖符號來源確認(rèn)庫版本帶鎖移植正確實(shí)現(xiàn)printf 輸出亂碼、截?cái)鄐tdout 緩沖競爭兩個(gè)任務(wù)同時(shí) printf 壓測實(shí)現(xiàn)鎖函數(shù)或任務(wù)內(nèi)串行化輸出系統(tǒng)跑一段時(shí)間后死鎖鎖實(shí)現(xiàn)用了非遞歸鎖在死鎖現(xiàn)場查看任務(wù)棧換成遞歸互斥鎖中斷里調(diào)用 printf 導(dǎo)致系統(tǒng)掛起鎖在中斷上下文阻塞檢查中斷是否調(diào)用了 libc 函數(shù)中斷里禁用帶鎖的 libc 調(diào)用4.2 死鎖排查從 printf 卡死到優(yōu)先級反轉(zhuǎn)有一次我們的設(shè)備在現(xiàn)場升級時(shí)死機(jī)了復(fù)位后抓取調(diào)試信息發(fā)現(xiàn)卡死在__lock_acquire里。當(dāng)時(shí)第一個(gè)反應(yīng)是鎖沒有釋放但用調(diào)試器把任務(wù)列表打出來發(fā)現(xiàn)占用鎖的任務(wù)處于阻塞狀態(tài)而且它阻塞的原因不是在等這把鎖而是在等一個(gè)串口發(fā)送信號量。這就觸發(fā)了典型的優(yōu)先級反轉(zhuǎn)嵌套死鎖任務(wù) A 持有 malloc 的鎖調(diào)用串口發(fā)送等待串口信號量任務(wù) B 在串口中斷服務(wù)里觸發(fā)了一個(gè)快速 malloc嘗試獲取 malloc 的鎖但拿不到而串口信號量恰恰需要任務(wù) B 釋放于是形成了 A 等 B、B 等鎖的循環(huán)。這個(gè)案例讓我意識到只實(shí)現(xiàn)鎖函數(shù)是不夠的還要確保鎖的持有路徑上不要再次等待其他任務(wù)持有的資源。排查死鎖的常規(guī)思路是記錄鎖的持有者和等待鏈。我在工程里加了一個(gè)簡單跟蹤每次__lock_acquire進(jìn)入時(shí)記錄當(dāng)前任務(wù)句柄和調(diào)用 PC放在一個(gè)環(huán)形緩沖區(qū)里每次__lock_release清掉記錄。死鎖發(fā)生后用調(diào)試器查看緩沖區(qū)直接看到誰在持鎖、誰在等鎖問題定位效率提升很多。這些小工具平時(shí)看著多余關(guān)鍵時(shí)刻能救命。4.3 性能陷阱鎖函數(shù)實(shí)現(xiàn)不當(dāng)導(dǎo)致系統(tǒng)吞吐驟降還有一類問題不是崩潰而是“慢”。日志任務(wù)本來每秒能刷幾百條記錄加了鎖支持之后掉到三四十條。一開始懷疑是鎖本身開銷太大后來測出來根本不是是鎖函數(shù)里用了不該阻塞的調(diào)用路徑。我在移植實(shí)現(xiàn)里一開始用的是普通信號量xSemaphoreTake這個(gè)函數(shù)在鎖被占用時(shí)會(huì)觸發(fā)任務(wù)切換和調(diào)度器操作頻繁競爭時(shí)開銷被放大。后來改成xSemaphoreTakeRecursive并且確認(rèn)在持有鎖期間不會(huì)主動(dòng)讓出 CPU吞吐才恢復(fù)正常。本質(zhì)上不是函數(shù)多了幾行而是臨界區(qū)里不能做任何可能阻塞的調(diào)用否則整個(gè)系統(tǒng)的調(diào)度水位會(huì)迅速惡化。另一個(gè)性能相關(guān)的問題是中斷環(huán)境。FreeRTOS 的互斥信號量不能在中斷服務(wù)程序里使用因?yàn)閜ortMAX_DELAY這類阻塞參數(shù)在中斷上下文是無效的。如果你在中斷里調(diào)用了 printf并且 printf 背后走了帶鎖的 stdio 路徑系統(tǒng)行為就會(huì)變得非常詭異有時(shí)候返回錯(cuò)誤有時(shí)候直接卡死。我后來在中斷處理里統(tǒng)一改成寫無鎖環(huán)形緩沖區(qū)中斷外再做格式化輸出徹底繞開了這個(gè)坑。再補(bǔ)一個(gè)經(jīng)驗(yàn)如果你的工程同時(shí)使用多個(gè) RTOS 組件比如 lwIP 或者文件系統(tǒng)棧它們的鎖機(jī)制和 picolibc 鎖是完全獨(dú)立的兩套東西。picolibc locking support 只管 C 標(biāo)準(zhǔn)庫內(nèi)部網(wǎng)絡(luò)協(xié)議棧的內(nèi)存池、文件系統(tǒng)緩存都有自己的保護(hù)機(jī)制不要混為一談。我見過有的開發(fā)者以為“開了 picolibc 鎖整個(gè)系統(tǒng)就線程安全了”這是誤解。每層資源需要各自的鎖策略。4.4 一個(gè)隱藏已久的坑TLS 變量的初始化時(shí)機(jī)最后說一個(gè)比較冷門但影響很大的坑。TLS 模型下errno 是每個(gè)線程的線程局部變量但它的初始化依賴 RTOS 創(chuàng)建任務(wù)時(shí)為任務(wù)棧預(yù)留的 TLS 空間。如果 FreeRTOS 的configTLS_BLOCK_SIZE配置不對或者任務(wù)創(chuàng)建函數(shù)沒有正確地向任務(wù) TCB 注冊 TLS 塊那線程訪問 errno 時(shí)會(huì)讀到未初始化的內(nèi)存可能是一個(gè)隨機(jī)值也可能是別的任務(wù)寫過的殘留數(shù)據(jù)。這個(gè)問題不會(huì)像崩潰那么明顯它表現(xiàn)為某個(gè)任務(wù)偶爾拿到錯(cuò)誤的 errno且錯(cuò)誤碼和實(shí)際錯(cuò)誤毫不相關(guān)看起來完全是隨機(jī)的。排查時(shí)很容易懷疑是業(yè)務(wù)邏輯 bug反復(fù)看代碼也找不到問題。我最后是在一個(gè) FAE 的提示下檢查了任務(wù)創(chuàng)建時(shí) TLS 塊的大小和 picolibc 預(yù)期的 TLS 大小是否匹配才定位到根因。具體做法是在鏈接腳本里記錄.tdata和.tbss的總大小然后把這個(gè)值配置到configTLS_BLOCK_SIZE中。你在移植 picolibc 到 FreeRTOS 時(shí)這一步千萬不要漏。5. 我的移植經(jīng)驗(yàn)與收尾建議說實(shí)話picolibc 的 locking support 并不復(fù)雜真正的復(fù)雜度在于理解 libc 內(nèi)部的共享資源到底有多少以及你的 RTOS 調(diào)度行為和鎖之間的相互作用。每次換一個(gè) RTOS、換一塊硬件平臺(tái)我都建議重新走一遍完整的移植和壓測流程不要想當(dāng)然地拿上一版代碼直接拷過去。就我自己的經(jīng)驗(yàn)而言有一個(gè)比較穩(wěn)的組合配置TLS 保持開啟global-errno 關(guān)閉newlib-multithread開啟鎖底層使用 FreeRTOS 遞歸互斥鎖并且移植文件里只做鎖的獲取和釋放不做任何日志、不做調(diào)試打印。這樣既保證了線程安全又把移植層的不可控因素降到最低。如果你在移植過程中遇到特別怪異的現(xiàn)場優(yōu)先懷疑鎖的持有路徑其次懷疑 TLS 初始化最后再懷疑工具鏈鏈接腳本。這三步走完絕大多數(shù)問題都能水落石出。最后再分享一個(gè)我個(gè)人的小習(xí)慣在項(xiàng)目早期就把 lock 壓測代碼放進(jìn)自動(dòng)化構(gòu)建流程里每次 BSP 變更后跑一遍。這種問題一旦藏在系統(tǒng)深處越晚發(fā)現(xiàn)代價(jià)越大早發(fā)現(xiàn)反而最省時(shí)間。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久亚洲AV无码专区国产精品| 亚洲熟妇AV日韩熟妇在线| 国产精品白丝AV| 自慰白浆在线观看| 国产真实子伦对白| 欧美猛交黑寡妇中文字幕| 国产欧美在线观看免费观看| 四虎影视国产精品| 九九在线视频| 精品人妻av在线播放| 91模特在线观看| 97午夜剧场日韩| 国产福利电影| 少妇熟女一区二区三区| av久日| 婷婷丁香五月天综合东京热| 中文字幕亚韩| 99久久亚洲精品无码毛片潘甜甜| 97精品人妻一二三四| 亚洲国产剧情少妇激情| 色老汉色| 亚洲人综合19| 亚洲美乱| 操逼逼福利视频| 欧洲精品一级二级精品综合视频综合 | 91久久婷婷| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 极品少妇久久久久| 99少妇内射| 激情四射五月天| 久都青青视频| 久久久98网站免费视频| 乱论91| 精品人妻久久久久一区二区三区| 91n免费处女| 亚洲熟妇无码一区二区三区| 香一区二区三区| 99热这里只有精品9| 久久久久久精品免费看A级| 国产精品久久久久久亚洲色欲| 欧美日韩色| 日韩中文字幕精品一二三事国产精品| 亚洲激情色片| 97色色色综合网站| 最新亚洲风情电影| 色制服丝袜夫妻av一区| 久久綜合很很很| 精品一区二区三区四区女| 富二代亚洲精品99| 成人精品电影| 免费网站观看www在线观| 一本一道人妻久久一区二区三区| 亚洲国产欧美日韩人妻日中文| 岛国成人av在线播放网址| 精品在线观看视频在线| 国内精品伊人久久久久影院会| 久久久久人妻二区精品叶可怜| 97在线免费观看| 少妇久久久久久久久| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 精品91| 色图四区| 国产在线激情| 天天干天天燥| 午夜黄色免费在线观看| 中文字幕精品丝袜| 国产乱码精品久久久久久| yazhousetuoumei| 亚91亚洲网| 高跟伊人julia ann| 久久久精| 国产乱码久久久| 91美女小视频| 亚洲强奸乱伦影视网| 人妻乱仑一区二区三区| 天天爽夜夜操| 69综合网| 欧美色图20P| 男人天堂久久精品| 日韩啪啪啪视频| 人澡逼| 四虎影视精品| 蜜臀中文字幕| 久久九九视频九九视频| 欧美九9 9 9| 丝袜美腿校园春色| 97干在线| 五月天玖玖资源站| 91超级碰| 99热 按摩 日韩| 97精品全部| 91精品人| 综合影院亚洲| 色香综合天天影视综合| 欧美性生活免费网| 丰满人妻-区二区三区免费| 日本色色网| 97人人爱人人做人人乐| 亚州综合| 国产高潮AA片免费看| 久偷拍| 最新制服中文第一页| 一级婬片120分钟试看| 综合操逼| 久久噜| 欧美日韩在线小说| 密桃99999| 操死我了啊啊啊| 日本爽爽爽爽爽爽免费视频| 久久极品一区二区| 91视频综合在线| 一起草三级AV电影在线观看| 中文字幕在线日亚州9| 麻豆性爱视频在线播放| 久久久久久人妻一区精品色欧美| 国产92麻豆天美精品色欲5| 蜜桃在线观看一区二区三区| 啊啊啊爽爽| 国产精品嫩草影院午夜两性| 天综合网| 亚洲综合九九| 人妻精品综合中文字幕在线 | 97久久精品不卡| 手机午夜电影神马久久| 欧美黑人XXXⅩ高潮交| 亚洲少妇免费视频\| 人人玩人人添人人澡免费| 激情四射婷婷四五月天| 天天欲望网| 99精品在线| 麻豆国产成人精品| 爱媛媛久久国产福利| 欧美色三级片91| julia国产在线 | 男人的天堂2019AV| 超碰在线一区二区| 大香蕉99热| 九九综合九九综合| 女人一区| 日韩无码三级影院| 99re视频在线播放青草| 香蕉在线一区二区三区| 青青草国产欧美非洲黑人| 国内三级自拍小视频在线观看| 天欧美在线| 国产麻豆一级精品视频| 亚洲一区中文字幕| 欧美情色男人的天堂| 国产JDAV无码视频在线观看| 97亚洲资源| 国产偷人伦激情在线观看| 熟女人妻久久中文字幕一二区| 久操国产在线| 一二三啪啪专区| 国产精品美女久久久久久网站| 性感女人网页在线观看视频| 国产成年精品高清在线观看91| 精品国产国产AV| 久久久久久日韩| 又摸又舔在线观看网站| 午夜福利成人免费视频| 在线亚洲欧美| 在线天堂999| 高清国产成人无码| 91美女视频。| 久久蜜色情在线视频xxx免费观看| 成人小说视频在线精品欧美| 丰满熟妇大乳做爰| 欧美亚洲第1页| 日韩免费在线视频观看| 欧美情色亚洲| 综合欧美日韩在线| 夜夜夜久久| 日本一区二区三区四区免费观看| 强被迫伦姧在线观看无码网站| 日产成人久久| 国产成人AV麻豆| 国产a级午夜毛片| 97AV在线观看| 91操人| 日韩女优中文字幕| 岛园激情| 国产真实子伦对白| 91蜜臀人妻中文字幕在线| 国产久久久9999| 操婷婷逼| 亚洲色图尤物视频| 亚洲无992tv| 蜜臀无码一区二区| 91国产丝袜足交精品视频| 黄在线| 中国人高清www色视频免费| 蜜臀th| 97一区二区蜜臀| 伊人色综合网| 97天天摸天天碰| 成人一级性爱| 91社操逼| 变态乱伦伪娘灌肠一区二区| 四虎在线观看视频| 亚洲综合在线第一页| 91国产丝袜白虎| 韩日精品福利视频一区不卡在线免 | 亚洲aV性爱| 正在播放国产精品一区| 91P0RNY大屁股人妻| 亚洲国产福利视频| 四虎884| 国产suv精品一区| 国产精品欧美激在线| 麻豆国产尤物AV| 亚乱色| WWW操逼| 日本高清免费一本视频在线观看| 亚洲精品九九九| 欧美色91| 日日夜夜骑| 欧美小说区视频区| 啊啊啊要高潮了| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 日韩大香蕉精品在线视频| 色黄污美女啪啪啪免费网站| 五月亭亭六月丁香| 欧美成熟性爱精品| 国产免费一区2区3区| 日韩在线观看三级电影| 无遮挡又黄又刺激的视频| 欧美乱欲| 人人摸.人人色| 9丨久久九九九| 一级免费啪啪片| 国产午夜福利电影免费在线观看 | 青青草在线成人视频| 首页亚洲国产高跟丝袜诱惑视频| www.zbzhongsen.com| 水野优香在线观看| 天天流夜夜操| 97超碰天天爱天天爱| 99青青草国产视频| 久久久免费懂色| 精品美女人人干| 黄色交缠性感爆操91国产精品免费一区二区三区 | 小草精彩毛片| 啊啊啊不要啊啊受不了了视频在线 | 亚洲精品97| 操久久久久| 福利视频网站| 亚洲天天做日日做天天谢日日| 久久AV无码AV| 凸凹视频在线观看| 国产精品 视频| 国产一区免费午夜视频| 久久无码电影| 国产精品白虎| 亚洲精品1区| www.91视频网| 偷拍三区| 婷婷激情四射| 久久亚码| 日本成人在线不卡一区二区三区| 91综合色| 国产尤物AV尤物在线观看不卡| 国产精品久久久久久久久AV大片| 大香蕉欧美伊| 97超碰站| 国产女人成人精品视频| 天天摸夜夜摸| 男人的天堂日本东京热| 欧美人体性爱互联网第一页婷婷日本| 亚洲精品美女久久久久久久久| 熟妇在线视频一区二区| 久久草视频污视频| 超碰97人妻免费在线| 黄色片A级一区二区三区| 午夜性生活av免费在线看| 人人操人人操草草| 成人综合网 欧美| 97亚洲中文| 久久久久亚洲av综合波多野制衣| 久久熟女人| 亚洲区小说| 先锋色眉乱伦资源| 97超碰总站| 国产精品福利资源在线尤物| 日本超碰在线国产一区| 天天狂操夜夜狂日| 久操精品网| 久久精品99久久久久久| 涩涩这里只有精品视频| 中文字幕诱惑制服人妻丝袜美丝袜美| 97爱爱爱| av操操不卡| 欧美黑人熟妇精品91| 午夜理论片在线观看免费| 99热这里只有精品9| 9久精品视频在线观看| 在线αⅴ| 亚洲男人天堂网久久| 九九热国产| 亚洲va有码在线天堂| 午夜精品久久久99| 欧美一区二区三区互相| 素颜老阿姨乱情色| 天天色播亚洲综合网站| 揉揉揉夜夜| 免费毛片在线播放| 人妻少妇久久| 五月天激情网图片| 少妇久久久久久久久| 天天舔天天| 午夜操一操| 91扒丝袜综合在线| 国产精品一级特黄aaa大片在线观看 | 97爱啪| 另类一区| 欧美精品亚洲精品日韩传电影| 99热99在线播放激情| 亚洲欧美性生活| 精品国产91av一区二区三区| 蜜臀久久精品久久久久视频| 丝袜熟女2P| 午夜福利1区2区3区| 日韩国产十八禁| 欧美操逼熟女| 亚洲天堂加勒比| 久久久久9久久久久| 国产一级内射无挡观看| 骚妻少妇精品性色无码四色A V| 亚洲天堂99| 亚洲超碰97| 亚洲天堂人人妻| 久99久视频| 一起草三级AV电影在线观看| 精品人妻一区二区蜜桃视频| 日韩一区二区熟女| 中国一区二区亚洲人妻| 久久久久少妇| 好爽要喷了| 超碰资源亚洲97| 亚洲国产成人精品久久久国产成人一区二区三. | 人人天天欧洲| 青娱乐欧美激情一区二区| 人妻少妇久久| 日日AV加勒比| 一二三四免费视频| 黄片色区软件| 大屁股人妻女教师撅着屁股| 另类图片五月天| 久插不卡| 青青草原人妻| 2010男人的天堂| 免费的很黄很污的全部视频| 欧美成人免费在线观看| 99rre在线精品99re8| 欧美熟女妇同| 春色综合网| 色九九综合AV| 熟啊v色欧美热| 97人人操人人干| 91天堂色男人的天堂| 思思视频免费看网站| 精品人妻一区二区免费看| 亚洲色图美腿丝袜| 色老汉色| 精品99999久久久久久| 天天操综合网| 97色干| 99久久e免费热视| 波多野结衣AV无码一区| 欧美日韩*字幕一区| 天天综合~91| 精品久| 999热这里只有精品| 校园春色美腿丝袜| 91高清日| 久久女人| 91精品国产91综合久久蜜臀| 香蕉人欧美综合| 精品国产乱码久久久A| 久久女女| 少妇高潮一区二区三区在线| 偷拍欧美亚洲| 久热伊人| 最近二区三区视频大全| 欧美激情久操网| 天天射夜夜操| 91人妻人人澡人人爽人人精品| 免费试看60秒| 亚洲天堂在线怕怕视频| 内射老妇BBWX0C0CK| 91被操| 国产三级资源在线观看| www.大香| 色婷婷丁香五月天| 男人天堂婷婷五月天校园春色| 日韩欧美视频青青| 夫妻四区五区六区| 欧美青青视频| 极品少妇久久久久| 日韩三级伊人| 性影在线视频| 噜噜噜狠狠色综合| 日韩一级二级在线| 国产精品乱码久久久久久| 中文字幕av一区二区三区人妻少妇 | 青青草依人大香蕉| 香蕉综合网| 草草草视频在线免费看| 亚洲自拍天堂| 九月色婷婷| 麻豆影音天美视频| 97在线视频观看免费| 亚洲视频精选| 韩日性爱av| av资源在线播放天堂| 日韩有码一区三区| 热久久国产精品视频大陆精品| 在线五区| 亚洲一区二区三区在线激情| 亚洲一区二区精品福利| 亚洲18禁| 抽插一区二区视频| 免费αV在线视频| 欧美性爱在线无码| 亚洲精品蜜桃久久久一区二区三区| 久久国99999| 1204人成网站色www| 男人亚洲天堂| a在线视频免费观看| 久悠悠av| 96超碰网| 日本高清有码网址视频| 亚洲免费精品一区| 亚91网| 在线观看免费视频国产| 色99在线| 五月天精品| 久久 久久国内精品亚洲| 久久久亚洲熟妇熟女| 欧美性爱中文字幕无线码| 亚洲中文字幕97久久精品少妇| 九九九九九九成人| 七月婷婷综合| 26uuu欧美| 91伊人久久在线| 国产精品分类在线观看| 发朗少妇买婬全视频中文| 欧美A√综合网| 九九热九九| 国产综合网站在线播放| 四虎免费看黄| 激情婷婷综合久久| 久久精品人体| 夜色91| 精品久久99| 青操影院| 逼逼逼逼操操操操操操操操操午夜剧场| 久久黄黄| 国产久久久久久| 十八禁啪啦拍视频无遮挡| 高跟伊人julia ann| 日韩性爱小视频| 天天日少妇逼AV| 熟女熟妇一区二区三四区| 一区二区视频在线播放| 日日骚精品视频| 亚洲第一免费视频| 成人精品一区二区三区| 天天激情干| 日日夜夜青青草母狗| 国产精品精品系列在线观看| 中文字幕丝袜人妻| 国产精品午夜福利亚洲综合网| 色综合中文字幕不卡| 97欧美综合| 久久日韩毛| av三级电影在线播放| 久久最新免费视频23| 久久男人天堂| 日韩激情视频| 亚洲精品一区二区三区在线播放 | 秋霞免费AV| 色天堂在线观看| 国产亚洲色婷婷久久99精品91葵花宝典 | 超碰成人公开| 超碰伊人在线| 大香蕉啪啪啪| 97超碰人人模人人拍人人| 91人妻丝袜无码| 亚洲人妻中文在线视频| 91天天爱| 婷婷亚洲综合| 中文乱码字字幕在线第5页| 78p欧美| 曰韩操B| 果冻传媒A片一二三区| 日本在线播放不卡一区| 伦理第一页| 青青草在线视频人人想人人上| 中字幕人妻一区二区三区| 女人的天堂大香蕉网| 熟妇操花| 东北少妇高潮zzzz| 色五月激情AV在线| 亚洲另类综合欧美| 精品人妻av在线播放| 亚洲,欧美,综合网| 97 九色| 午夜丁香婷婷| 強姦亂倫a| 日韩91网| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 鸥美中出| 九九九精品一区二区无码| 日韩成人综合网| 青娱乐淫乱1314| 日日妻色网| 久久五月份| 综合操逼| a片久久久久久久久久久久| 日韩精品影视| 99啪啪视频| 91精品丝袜在线观看| 日本在线观看网址| 淫纸中9区| 上床不卡网站| 久九干| 综合色啪| 国产成人bd在线观看| 国产精品一区二区a| 人妻少妇无码| 麻豆激情综合| 日日日啊啊啊| 麻豆久久视频在线地址| 免费精品福利在线观看| 能在线播放的国产三级| 伊人操你| 中文?日韩?免费?精品| 91蜜桃传媒精品久久久一区二区| 淫乱图区 | 国产91 丝袜在线播放00-百度| 欧美中字不卡| 97超视频在线观看| 亚洲成人精品久久久| 狠狠中文字幕| 天天综合色| 色牛牛AV| 一级免费啪啪片| 人人插人人摸人人| 乳欲人妻办公室奶水| 91视频伊人| 久久亚洲AV无码白度| 老熟女综合| 久久精品国产亚洲粉嫩| 青青草依人大香蕉| 94色色电影网| 欧美中文字幕精品人妻| 欧美后入| 亚洲第一页第二页激情| 欧美岛国精品在线观看| 国产福利一区二| 一区二区三区免费视频入口| 久久丁香久草综合网| 日本人妻丰满熟妇久久久久久| av黄图片在线观看| 免费无码婬片AAAA片直播色戒| 欧美片第一页| 日本熟女免费視颖| 成人性爱美曰韩| 久久精品国产亚洲AV成人直播| 青青操狠狠撩| 麻豆国产尤物AV| 日韩偷拍色图| 白丝少妇一区二区| 97爱啪| 啊啊啊骚| 国产一国产一级毛片古装| 日本在线观看网址| 超碰在线观看av不卡| 亚洲AV无码国产精品久久久久 | 久操 高清| 操淫穴亚洲五月丁香 | 97资源亚洲| 中文字幕蜜乳av| 偷拍三区| 婷婷丁香六月天| 蜜臀精品1区2区| 中国小夫妻勾搭露脸淫荡对白 | 久草大| 久极品在线观看| 2017大香蕉国产精品久久| 亚洲欧美日韩中文久久自慰| 伊人网高清| 国产精品久久久无码aV去| 综合 欧美 亚洲 日本| 激情五月天色色| 精品人妻一区二区三区-国产精品| 久久久久亚洲精品| 久久久久久久久9| 国产视频一区二区三区在线免费观看| 性爱乱伦网址| 国产农村妇女精品一| 男女香蕉一区二区| 91免费看一区二区三区| 麻豆国产96在线| 成人综合网 欧美| 亚洲精品乱码久久久久久蜜桃麻豆| 一区二区影视| 午夜影美女日鸡鸡天天视频国产| 97超碰jingpin| 日韩大香蕉精品在线视频| 欧美亚洲图片| 丁香九月激情啪| 久久国产精品熟女人妻| 九九九九热| 国产做?爰片久久毛片?片美国| 99re3这里只有精品| 东京热,男人的天堂| 天天谢天天干| 啪啪视频mP4| 亚洲狠狠入| 国产高清26uuu| 国产suv精品一区二区四| 欧美偷| 艹少妇网站| 久久视网78| 五月丁香激情四射| 亚州情色j区| 天天干人妻视频| 国产不卡免费在线视频| 熟女中出视频| 久草尤物| 亚洲国产剧情少妇激情| 久久久久久久久久9| 精品成人av一区二区三区在线| 国产久久一区二区| 亚洲精品白浆高清久久久久久| 久久久久久中文字幕中文字幕最新| 97超碰伊人| 国产浮力影院第1页| 天美传媒Av在线| 亚洲国产精品成人综合| 久久视网78| 欧美性爱精品七区| 精品免费国产二区三区| 色欲三区| 91五月天| 亚洲αv一区二区三区| 97一区二区三区视频| 亚洲激情在线观看一区| 岛国人妻少妇av在线观看| 超碰精品国产无码| 亚洲欧美一区二区不卡视频播放| 日本性爱欧美性爱| 伊人久久亚洲中文字幕不卡| 成人av影院在线观看| 日韩精品9999| 欧美国产伊人久久久久| 伊人午夜福利视频| 伊人久久艹| 亚洲色电影在线| 97视频在线免费看| 国产丝袜欧美在线视频| 欧亚成人在线视频| 国内自拍 日韩激情 99| 黑丝制服中文字幕| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 亚洲综合射| 亚洲av强奸乱伦| 9久久久久| 96AV久久久| 久久精品中文字幕观看| 中日韩久久久免费看| 五月综合视频| 夜夜操美女| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 亚洲超碰AV| 欧美精品97| 久久超碰大香蕉| 国产美女高潮叫床视频| 91操操操操| 国产无码精品高清| 国产成人亚洲精品无码最新在线| 色狠人在线99| 天天干天天狼在线视频| 欧美96精品在线| 91亚洲欧美色图| 天天天天天天天天天天干美女| 加勒比aⅴ| 18一区二区三区| 黑人操一区二区| 99热销国产这里有精品| 久久大线蕉一区| 97在线精品| 国内毛片国产欧美拍| 亚洲天堂久| 欧美最婬乱婬爆婬性视频 | 综合夜夜| 亚洲欧洲激情| 亚洲一二三精品久久网 | 新怡红院| 色网在线| 欧美熟妇乱码在线一区| 日本精品高清一二区一本到| 日韩av在线精品观看| 后入式999| 96AV久久久| 色优久久| 日本操BAV| 乱伦色图网址是多少| 久久久夜夜夜| 男人的天堂三级| 欧美韩国你懂得在线| 亚洲图片欧美91N| 噜噜噜无码AV一级一级久久影院| www.亚洲黄色| 亲子敌伦对白在线播放| 日本高清视频在线观看黄已三辽| 区一二区日韩亚洲乱码av电影| 99热超碰| 日韩啪啪视频| 欧美成人午夜免费福利785| 一级@啪啪视频| 欧美不卡五十路| 97在线免费看视频| 精品美女少妇一区二区| 亚洲骚男同com| 久草男人天堂| 粉嫩久久久久| 国产精品视频| 草蕉影视亚洲无码| 国产精品亚洲四五区在线观看| 91亚州日韩高清| 日本综合色图| av九九| 国产精品自产拍在线观看社区| 日韩欧美成人性爱在线| 一类无码操逼视频| 欧美激情另类一区二区| 国产极品精品美女视频| 日韩三A大片在线观看| 欧美中文字幕日韩在线| 大屁股人妻女教师撅着屁股| 国产精品视频91久久| 男插女青青影院| 91精品国产91久久福利| 日本成人免费一区二区三区| 一区二区三区免费视频入口| 久久性生大片免费观看性| 在线日韩精品一区二区三区| 大香蕉欧美| 日本人妻丰满熟妇久久久久久| 国产精品高潮久久久无码| 日本一区二区亚洲综合| 在线无码视频| 操我无码| 我爱大香蕉| 亚洲天堂人妻一区二区| 少妇一区二区三区在线观看| 噜噜噜久久亚洲精品色情| 歐美性天天| 五月天欧美色图| 欧美亚洲手机在线| 亚洲中字幕日本一区二区三区| av爱爱爱| 国产精品免费视频人成| 夜夜嗨一区二区| 亚洲综合另类欧美久久久| 国产美女口爆吞精| yazhououmeizongya| 久久春色| 99re公开精品免费视频| 亚洲av强奸乱伦| 亚洲精品一二三四区| 亚洲黄a三级三级三级看三级| 欧美女同在线| 91精品国产91综合久久蜜臀| 国产不卡免费在线视频| www.色五月| 欧美72网页| 欧洲亚洲人妻无码高清久久三区四区| 丁香婷婷五月| 久久肏大逼| 久久理论字幕视频| 96精品久久久| 91视频伊人| 99综合| 国产乱码精品久久久久久| 国产激情在线| 亚洲日韩美国人妻| 久久精品人体| 十八禁电影伊人网| 日韩福利综合一区| 91久热| 丝袜色综合| 成年人网站在线免费观看| 日本色色色视频| 少妇诱惑视频| 色九久| 成人三级片无码| 久久曰曰| 成人羞羞视频国产| 五月丁香综合激情| 久久成人精品| 日韩欧美大力操| 欧美 亚洲 综合 制服| 在线五区| 天天操天天射天天日| 国产丝袜美女诱惑| 久久久91| 亚卅熟女乱色| 成人久久久精品| 波多野结衣AV无码一区| 日韩国语字幕| 久久久精品,3| 亚洲一区二区三区四区视频| 另类av天堂| 亚洲欧美国产中文视频| 国模一区二区三区| 青青草公开在线免费不卡视频| AA特级绝黄| 狠狠亚洲| 99色热国产视频精品| 久久亚州高清| 9久在线视频只有精品| 蜜臀久久99精品久久久老,,| 奶水 人妻 哺乳 在线| 国产精品国产拍高清AV| 久久人妻一区二区三区高清 | 欧美色综合图片| 久久久久久久久久va| 欧洲免费一区二| 一起草在线视频| 麻豆精品久久久久久久| 精品对白久久不卡| 日本人体九九九九九九| 欧美天天干| 久久久久久久久久久久久久久性生活视频| 日日躁夜夜躁狠狠躁超爽| 日韩不卡av一二三| 91精品在线播放| 色婷婷99| 亚洲欧美第一页| 人妻密肉在线观看| 国产亚洲欧美每日在线| 97国产天堂岛| 91快色色色色色| 骚鸭AV| AV 少妇 人妻 偷拍| 少妇一区二区三区| 亚洲免费精品一区| 91精品女厕偷拍视频| 久久美国毛片| 99久久综合网| 亚洲精品97| 东北女人被操| 乱伦3P视频| 精品女同一区二区三区| 夜夜操2028| 操逼逼一区视频| 日本免费一区二区不卡| 桃花色涩综合影院| 日日夜夜摸| 亚洲中文电影| 人妻熟女av国产网站| 亚洲图片91| 九九九久千久久激情蜜桃在线看| 日韩激情啪啪啪| 中文字幕国产| 夜夜操av亚洲一区二区| 约操熟妇| 91老熟女视频| 久久久久斤小| 五月天激情国产综合婷婷婷| 亚洲AV无码秘 蜜桃臀国精产品| 日本大香蕉| 色播综合| 操逼日批| 一二三区视频在线观看| 色诱avtt| 五月丁香综合网| 无码区蜜乳| 久久有码视频| 四虎免费看黄| 婷婷综合| 黄色电影观看久久9| 久草这里只有精品| 超碰在线97国产| 极品色社| 国产精品久久久久久 百度| 亚洲精品人体| 天天操天天7| 91jk色拍| 伊人成人中文字幕久久网| 日韩黄色av中文字幕| 四方色播| 亚洲色图欧美色图在线播放| 夜夜操91744565| 久久99精品视频| 免费看黄视频亚洲网站| 色综合加勒比| 大逼色网站| 60秒免费视频| 99热导航| 天天看少妇| 开心五月婷婷激情| 亚洲成人福利电影免费| 亚洲欧洲av影音| 激情一区二区| 国产97在线播放| 操逼短片| 欧洲精品人妻| 美女久久久久久久| 九九热九九热| 丰满人妻一区二区三区| 日本道久久综合色色| 777AV电影| 性久久久| 摸奶性爱视频网站在线免费播放| 不卡在线观看视频| 日本熟妇人妻一区二区三区| 亚洲影视高清第一页| 色娱乐色呦呦夜夜夜夜av| 日本天堂网| 神马久久久久眼| 插入综合网| 黑丝内射一区二区三区| 久久婷五月| 久久婷婷色| 色综合色综合网| 91人人臊| 精品少妇一区二区三区在线视频| 国产懂色精品国产av| 欧美人妻精品一区二区| 99精品视频在线观看免费| 亚洲图片日本AⅤ欧美在线| 日韩欧洲操屄视频| 亚洲春色欧美激情自拍| 国产高清视频无码在线| 蜜乳中文字幕a在线| 天堂69亚洲精品中文字| 国产欧美在线观看免费观看| 乱伦熟妇一区二区| 午夜亚洲WWW湿好大| 婷婷色色五月天福利| 色黄污美女啪啪啪免费网站| 大屁股人妻女教师撅着屁股| 欧美性爱18观看| 韩日性爱av| 中国东北熟女老太婆内谢| 国产尤物AV尤物在线观看不卡 | 十八禁黄色| 97超碰美女| 亚洲欧美日韩免费观看| 日韩精品色呦呦| 麻花豆传媒剧国产MV出差| 狠狠色噜噜狠狠狠狠狠色综合久久 | 成人夜夜爽| 日韩伦理久 久久 清纯| 午夜福利在线视频1000| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 国产99热| 蜜乳成人AV| 国产亚洲精品美女久久久m| 亚洲四虎熟女精品| 青青草密桃在线播放| 久久亚州高清| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照 | 久久久精品中文字幕爱豆| 熟女乱伦A| 六月激情婷婷| 亚州精品丝袜-不卡成人免费| 亚洲黄a三级三级三级看三级| 久久久性少妇| 日产操逼| 午夜欧美女人操逼| 91超碰人人| 东方亚洲在线操逼天堂| 天天肏天天干| 91碰超| 玖玖综合.com| 亚州色阁| 九九九九免费| 久久夜黄色无码A级大片| 91 亚洲 欧洲| 99黄页网站| 国产路线专区| 男人高清无码一区二区| 99色悠悠| 少妇熟女视频一区二区三区| 日本一级特级毛片视频| 大色综合网| 禁止观看美女黄| 久久9精品网站| 国产精品久久久吖| 成人福利视频网| 精品人妻一区二区免费蜜桃| 97国产精选| 成人26uuu| 超碰99在线观看| 日韩精品大香蕉伊人在线| 亚欧色图在线激情| 国产精品无码AV网站| AV丝袜少妇| 久久久久久久九九九九| 久久久久九九九| 亚洲在高跟鞋自慰久久在色线| 午夜在线播放| 日韩一级欧美一级在线观看| 日逼五月天| 欧美性爽xyxOOOO| 国产精品大香蕉| 日韩中文9| 久操网无码在线| 涩爱AV在线| 热热色中文无码| 久久久成人国产精品无码| 黄网站黄视频网站进入口| 国产熟女无套内射| 亚洲aV性爱| 亚洲在钱| 精品亚洲国产成人精品| 美欧老女人97| 国产无码精品无码| 99亚亚热| 男人天堂东京热| 亚洲成人免费在线| 超碰在线1234区| 亚洲暴力强奸AV| www.AV有限公司一区| 九九视频黄色片| 成人精品视频一区二区| a'v在线资源| 亚洲伊人久久精品狠狠在线| 色综合一区二区三区| 国产精品一区二区三区在线密挑| 久久久精精精| 婷婷五月花| 一区二区三区看视频| 婷婷五月天福利| 欧洲精品二区| 亚洲色图大香| 欧美精品三级黄片| 99热精品青草在线| 狠狠色噜噜狠狠狠狠2018| 日韩人妻无码精品系列| 国产一区二区三区久久久精品| 日日骚 av| 顶级丝袜熟女一区二区三区| 日日妻色网| 香蕉人人操tv| 黄色成年| 欧美日韩夜夜| 囯戸精品高潮呻吟旡码| 亚洲欧洲色情高清| 极品美女福利在线观看| 好湿好紧视频| 国产成人资源| 国产精品福利视频播放| 精品一国2| 日韩成人大片在线观看| 日本大香蕉综合网| 超碰国产情侣自拍网| 国产精品视频自拍在线| 很狠操| 国产刺激视频| 日韩一级久久毛片| 日韩大香蕉精品在线视频| 久久综合激情| 精品九九九九| 精品人妻一区二区三区夜夜| 全球成人中文在线| 国产日韩久久| a人欧美综合天堂麻豆| 老司机射| 亚洲在线| 超碰久在线天天做| 激情99| av强奸乱轮| AV中文字幕三四五| 久久精品一区| 国产精品国产拍高清AV| 精品国模无码| 青草伊人网| 天天香香欲综合| aaa一级黄片| 国产精品福利资源在线尤物| 中文子幕一二三| 欧美中文字幕男人天堂久久精品 | 女优免费一区二区永久| 免费1级a做爰片观看| 亚洲中文sv| 久久久久久久久久久999| 婷婷激情五月综合| 国产精品干干干| 欧美色综合| 偷拍新久久| 久久超碰大香蕉| 亚洲图片欧美91N| 亚洲福利中文字幕在线| 国产美女自拍AV| 欧美97色| 精品无码一区二区三区| 在线视频一区二区传媒| 人人人人人人少妇| 郑州宾馆老熟女露脸啪啪| 国产精品午夜AV完会免费 | av国产无码| 成人麻豆av电影网站| 色婷婷国产精品一区在线观看| 九九九国产精品| 中文字幕女同在线| 色盈盈影院| 99国产精品人妻人伦| www.色操逼| 特级丰满少妇一级AAAA爱毛片| 在线免费观看高清无码视频| 欧美性色欧美| 九九人妻| 亚爽爽爽爽爽爽爽爽| 久艹伊人精品综合在线| 亚洲欧洲偷拍一区| www色色色com| 日本日皮视频逼| 一本一道波多野毛片中文在线| 午夜啪| 精品人妻一区二区三区在| 四虎精品一区二区| 黄页网站成人免费| 精品欧美日韩在线观看| 欧美少妇第一页| 欧美加勒比| 992大香蕉| 久久线上视频免费看| 91老熟女91老女人| 综合久久99亚洲人妻中文在线| 综合日韩激情另类图片| 人妻日日夜夜精品| 91亚洲不卡一区| 精品精品精品| 中文字幕二区日韩天堂| 一区二区激情国产熟女| 五月天啪啪| 久久久一级| 碰碰在线视频| 夜夜夜久久| 久久久久久久久久久人妻| 丝袜狠狠草尤物人妻av91| 在线人妻熟女一区二区三区四区五区| 久操视频免费在线观看| 97视频在线免费看| 96精品久久久久中文字幕| 国产污视频麻豆传媒一区二区| 国产精品亚洲四五区在线观看| 亚欧中文字幕在线视频| 欧亚日韩三区| 亚洲综合夜色| 99久久免费看精品国产一区| 伊色久人大在线| av中亚|