免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

FreeRTOS任務(wù)通知實戰(zhàn)詳解:內(nèi)核原理、API與避坑指南

FreeRTOS任務(wù)通知實戰(zhàn)詳解:內(nèi)核原理、API與避坑指南 裸機編程切到RTOS之后任務(wù)之間的通信和同步永遠是躲不開的坎。前面聊過隊列、信號量、互斥鎖、事件組這次把FreeRTOS任務(wù)通知Task Notification單獨拎出來講透。原因很簡單任務(wù)通知是FreeRTOS里最容易用錯、也最容易被低估的一套機制。用好了它能替掉一大部分信號量和事件組的活兒還省內(nèi)存、省CPU時間用不好數(shù)據(jù)覆蓋、通知丟失、任務(wù)卡死排查起來能讓你懷疑人生。這篇是系列第7篇專注任務(wù)通知。我會從內(nèi)核實現(xiàn)、五個發(fā)送動作、四種實戰(zhàn)模式講到中斷里的用法最后附上我在實際項目中踩過的坑和排查清單。適合正在學(xué)FreeRTOS的嵌入式開發(fā)者也適合那些已經(jīng)把任務(wù)通知用起來但偶爾覺得“哪里不對勁”的人。1. 任務(wù)通知到底是什么1.1 內(nèi)核里存的不是消息是一個32位數(shù)字任務(wù)通知在FreeRTOS里并不是一個獨立的內(nèi)核對象不需要像隊列那樣先創(chuàng)建隊列控制塊、再分配存儲區(qū)。它的本質(zhì)非常簡單每個任務(wù)的TCB任務(wù)控制塊里都內(nèi)置了兩個字段一個是32位的通知值 ulNotifiedValue一個是通知狀態(tài) ucNotifyState。這兩個字段在任務(wù)創(chuàng)建時就存在了不管你用不用它它都在那里不額外占堆內(nèi)存。當(dāng)你調(diào)用 xTaskNotify 往某個任務(wù)發(fā)通知時內(nèi)核做的事情其實非常直接找到目標任務(wù)TCB改一改它的通知值再改一下通知狀態(tài)然后看這個任務(wù)是不是阻塞在等待通知上如果是就把它的狀態(tài)從Blocked切到Ready等待調(diào)度器調(diào)度它。這就引出了任務(wù)通知最大的優(yōu)勢沒有隊列復(fù)制數(shù)據(jù)的開銷沒有創(chuàng)建內(nèi)核對象的步驟操作的是每個任務(wù)自己TCB里的東西。我在Cortex-M4上做的簡單對比測試里任務(wù)通知發(fā)送一個喚醒信號的耗時大約是二進制信號量的60%左右內(nèi)存節(jié)省更是直觀——一個信號量至少需要一個Queue_t結(jié)構(gòu)加上存儲區(qū)而任務(wù)通知什么都不用建。官方文檔給過一個數(shù)據(jù)任務(wù)通知比二進制信號量快約45%RAM占用更低。我實測下來沒有45%那么夸張但在頻繁觸發(fā)的中斷里這個差距確實能感受到。1.2 任務(wù)通知、信號量、隊列、事件組的本質(zhì)差異很多新手會問已經(jīng)有了隊列和信號量為什么還要任務(wù)通知我的回答是任務(wù)通知解決的是一個非常特定的場景——一個任務(wù)向另一個明確的任務(wù)發(fā)送狀態(tài)變化這個信息。它適合一到一的通知只要數(shù)據(jù)量不超過一個整數(shù)并且你不需要讓多個任務(wù)同時收到這個消息。特性任務(wù)通知二進制信號量隊列事件組數(shù)據(jù)長度32位整數(shù)無數(shù)據(jù)任意字節(jié)最多24/8位標志接收者數(shù)量1個必須指定目標任務(wù)多個任務(wù)可等待多個任務(wù)可讀寫多個任務(wù)可等待是否需要創(chuàng)建對象不需要需要需要需要ISR中發(fā)送支持支持支持支持阻塞接收支持支持支持支持數(shù)據(jù)是否排隊否覆蓋或保留最新值是多次give會累積是FIFO僅狀態(tài)位典型RAM開銷0使用TCB內(nèi)字段約80~120字節(jié)隊列頭存儲區(qū)事件組對象這個表里最值得注意的兩行是接收者數(shù)量和數(shù)據(jù)是否排隊。任務(wù)通知發(fā)給誰由參數(shù)里的任務(wù)句柄直接決定無法像信號量那樣讓多個任務(wù)競爭同一個資源任務(wù)通知保存的永遠是最新的一個整數(shù)值不會像隊列那樣把多次發(fā)送的值按順序存起來。理解不了這兩點后面用起來必踩坑。2. 任務(wù)通知API全解析與選型思路2.1 八個核心API一次性說清楚任務(wù)通知的API看著多但其實可以分成四組發(fā)送組、接收組、ISR組、狀態(tài)清理組。我平時最常用的就下面這幾個全部列成表方便對照。API作用關(guān)鍵參數(shù)說明xTaskNotify(任務(wù)句柄, 通知值, eAction)向指定任務(wù)發(fā)送通知eAction決定如何修改通知值xTaskNotifyGive(任務(wù)句柄)等價于xTaskNotify(句柄, 0, eIncrement)通知值加1最常用的給信號xTaskNotifyWait(清除位入口, 清除位出口, 輸出值指針, 超時)阻塞等待通知可同時讀取/清除通知值可同時等待多個標志位ulTaskNotifyTake(是否清零, 超時)阻塞等待通知取走計數(shù)值pdTRUE清零取出pdFALSE遞減xTaskNotifyFromISR(句柄, 值, eAction, 高優(yōu)先級任務(wù)標記)中斷版發(fā)送返回是否需要上下文切換vTaskNotifyGiveFromISR(句柄, 高優(yōu)先級任務(wù)標記)中斷版Give用法與FromISR版本一致xTaskNotifyStateClear(句柄)清除任務(wù)的通知狀態(tài)讓ucNotifyState回到未通知狀態(tài)xTaskNotifyIndexed系列使用通知數(shù)組新版功能需要開啟configTASK_NOTIFICATION_ARRAY_ENTRIES這里特別說明一下xTaskNotifyGive和ulTaskNotifyTake這對組合。xTaskNotifyGive每次調(diào)用讓目標任務(wù)的通知值加1ulTaskNotifyTake則把通知值取走——如果第二個參數(shù)傳pdTRUE取走時通知值清零并把原值作為返回值如果傳pdFALSE通知值減1。這就相當(dāng)于一個不需要創(chuàng)建對象、計數(shù)上限為2^32的計數(shù)信號量只是接收方變成了固定的那個任務(wù)。2.2 eAction五種動作每種都是不同語義xTaskNotify函數(shù)里的eAction參數(shù)是整個任務(wù)通知的精華它決定了這次通知到底要怎么改變目標任務(wù)的通知值。新手最容易在這里犯迷糊我把這五種動作拆開講。eNoAction只喚醒任務(wù)不修改通知值。適合那種我就想叫他一下的場景比如通知另一個任務(wù)去做一次輪詢具體做什么由別的條件決定。eSetBits按位或。通知值 舊值 | 新值。這是把任務(wù)通知當(dāng)事件組用的關(guān)鍵動作。eIncrement通知值加1。xTaskNotifyGive的內(nèi)部實現(xiàn)就是這個做計數(shù)信號量時用。eSetValueWithOverwrite直接覆蓋寫。通知值 新值。舊數(shù)據(jù)直接丟掉無論目標任務(wù)是否已讀走上次的值。適合傳遞最新溫度讀數(shù)這種只要最新的數(shù)據(jù)。eSetValueWithoutOverwrite如果通知值當(dāng)前為非零有未讀通知本次寫入失敗返回pdFAIL如果通知值為0則寫入新值。這個有點像長度為1的隊列的非阻塞嘗試寫。我做過一個傳感器數(shù)據(jù)采集項目需要把ADC采樣結(jié)果傳給處理任務(wù)用的就是eSetValueWithOverwrite。因為傳感器采樣周期比任務(wù)處理周期快中間丟掉幾幀完全沒關(guān)系只要拿到最新值就行。而有個同事在通信協(xié)議解析里用了這個動作結(jié)果因為中間某幀還沒被處理就被新幀覆蓋直接導(dǎo)致協(xié)議解析錯位——選哪個動作取決于你的業(yè)務(wù)能不能接受舊數(shù)據(jù)被丟。2.3 阻塞、超時與立即返回的三種等待狀態(tài)任務(wù)通知的接收函數(shù)都帶超時參數(shù)這個參數(shù)的單位是Tick。你可以傳0表示不等待立刻檢查一次傳portMAX_DELAY表示無限期等下去直到有通知或者用pdMS_TO_TICKS(毫秒)把毫秒轉(zhuǎn)成Tick。具體到調(diào)用行為任務(wù)進入xTaskNotifyWait或ulTaskNotifyTake后如果通知值條件不滿足任務(wù)會被掛到Blocked狀態(tài)不占CPU。這時候有兩種方式能喚醒它一是別的任務(wù)或中斷往它發(fā)通知二是超時時間到了。被通知喚醒后函數(shù)返回pdPASS超時喚醒返回pdFAIL取函數(shù)返回值是pdFAIL。這里有個容易忽略的細節(jié)任務(wù)通知的等待是只要通知值滿足條件就立刻返回但它不會像隊列那樣自動把消息彈出。你用xTaskNotifyWait接收時拿到的是通知值的完整快照清除哪些位、怎么處理值全由你自己在代碼里控制。所以任務(wù)通知的靈活性高但自動管理程度低出錯時也更難看出來。3. 四種實戰(zhàn)模式把任務(wù)通知用出花來3.1 模式一輕量級信號量替代二進制/計數(shù)信號量這是任務(wù)通知最基礎(chǔ)的用法。生產(chǎn)者任務(wù)或中斷調(diào)用xTaskNotifyGive消費者任務(wù)調(diào)用ulTaskNotifyTake來等待。直接上代碼。/* 生產(chǎn)者任務(wù)采集完成通知處理任務(wù) */ void vProducerTask(void *pvParameters) { for (;;) { /* 模擬采集耗時 */ vTaskDelay(pdMS_TO_TICKS(100)); /* 通知處理任務(wù)通知值 1 */ xTaskNotifyGive(xHandlerTaskHandle); } } /* 消費者任務(wù)等待采集完成信號 */ void vHandlerTask(void *pvParameters) { uint32_t ulSignalCount; for (;;) { /* 阻塞等待通知值清零并返回原值 */ ulSignalCount ulTaskNotifyTake(pdTRUE, portMAX_DELAY); /* 處理一次采集結(jié)果 */ vProcessData(); /* 如果 ulSignalCount 1說明生產(chǎn)者已經(jīng)積累了多個信號 */ if (ulSignalCount 1) { /* 需要把積壓的處理完防止信號堆積 */ for (uint32_t i 1; i ulSignalCount; i) { vProcessData(); } } } }注意順手看了一眼ulTaskNotifyTake的返回值這是良好習(xí)慣。雖然大多數(shù)場景下你只關(guān)心被喚醒了但返回值能告訴你這次喚醒積累了多少個信號幫助判斷生產(chǎn)者是不是已經(jīng)跑得比消費者快了。3.2 模式二輕量級事件組用eSetBits置位當(dāng)你想讓一個任務(wù)等待多個事件中的某些事件發(fā)生了但又不希望為此創(chuàng)建一個完整的事件組對象時可以用eSetBits配合xTaskNotifyWait。/* 任務(wù)A準備數(shù)據(jù)完成 */ xTaskNotify(xEventTaskHandle, EVENT_DATA_READY, eSetBits); /* 任務(wù)B外設(shè)初始化完成 */ xTaskNotify(xEventTaskHandle, EVENT_PERIPH_OK, eSetBits); /* 等待事件的任務(wù)兩種事件都到位才開始工作 */ uint32_t ulNotifiedValue; if (xTaskNotifyWait(0x00, 0x00, ulNotifiedValue, pdMS_TO_TICKS(500)) pdPASS) { if ((ulNotifiedValue (EVENT_DATA_READY | EVENT_PERIPH_OK)) (EVENT_DATA_READY | EVENT_PERIPH_OK)) { /* 所有條件滿足 */ vStartWork(); } } else { /* 超時至少有一個條件未滿足 */ vLogError(); }這里有兩個隱藏重點。第一xTaskNotifyWait的第一個參數(shù)是進入時清除位第二個參數(shù)是退出時清除位它們在事件的一次性消費語義里非常關(guān)鍵。如果你希望事件標志被讀取后立即清零就把對應(yīng)位放在第二個參數(shù)里比如xTaskNotifyWait(0, EVENT_DATA_READY | EVENT_PERIPH_OK, value, timeout)這樣退出函數(shù)后這兩個位自動清零。第二任務(wù)通知做事件組時依然只能有一個任務(wù)等待多個任務(wù)同時等同一組事件時老老實實用事件組。3.3 模式三4字節(jié)消息傳遞WithOverwrite實現(xiàn)最新值傳遞任務(wù)通知雖然只有一個32位值但用來傳遞最新狀態(tài)是完全夠用的。比如溫控系統(tǒng)里傳感器任務(wù)每隔50ms讀一次溫度控制任務(wù)希望拿到最新的溫度值但處理一幀控制計算可能要100ms。用隊列的話要么存很多過時數(shù)據(jù)要么用隊列的覆蓋寫特性xQueueOverwrite——任務(wù)通知的eSetValueWithOverwrite干的就是這件事。/* 傳感器任務(wù)每50ms讀一次發(fā)送最新溫度 */ int16_t sTemperature vReadSensor(); xTaskNotify(xControllerTaskHandle, (uint32_t)sTemperature, eSetValueWithOverwrite); /* 控制任務(wù)循環(huán)讀取最新溫度并計算控制量 */ uint32_t ulTemperature; if (xTaskNotifyWait(0xFFFFFFFF, 0xFFFFFFFF, ulTemperature, pdMS_TO_TICKS(200)) pdPASS) { int16_t sTemp (int16_t)ulTemperature; vCalcControlOutput(sTemp); }我特意把xTaskNotifyWait的兩個清位參數(shù)都寫成0xFFFFFFFF表示進入函數(shù)時把通知值清零這樣每次讀走的值必然是從上次讀走到現(xiàn)在寫入的最新值。如果你不這么做通知值會一直保留舊數(shù)據(jù)你會陷入為什么值一直沒變的困惑。3.4 模式四中斷到任務(wù)最簡單的ISR通知版本中斷里發(fā)任務(wù)通知是最常見的用法按鍵、定時器、DMA傳輸完成、UART接收空閑統(tǒng)統(tǒng)可以把事件發(fā)生了通過任務(wù)通知扔給任務(wù)去處理減少中斷里做慢速邏輯的時間。/* 中斷服務(wù)函數(shù)外部按鍵按下 */ void EXTI_IRQHandler(void) { BaseType_t xHigherPriorityTaskWoken pdFALSE; /* 清除中斷標志 */ CLEAR_EXTI_FLAG(); /* 發(fā)送任務(wù)通知計數(shù)模式 */ vTaskNotifyGiveFromISR(xKeyTaskHandle, xHigherPriorityTaskWoken); /* 如果喚醒了高優(yōu)先級任務(wù)需要進行上下文切換 */ portYIELD_FROM_ISR(xHigherPriorityTaskWoken); }這個xHigherPriorityTaskWoken是ISR版API的經(jīng)典參數(shù)等會第4節(jié)專門展開。簡單理解它告訴內(nèi)核有沒有喚醒了比當(dāng)前被中斷任務(wù)更高優(yōu)先級的任務(wù)如果有中斷退出時不能回到原任務(wù)繼續(xù)跑而應(yīng)該直接切到那個高優(yōu)先級任務(wù)。portYIELD_FROM_ISR實際執(zhí)行的行為在Cortex-M上就是觸發(fā)一次PendSV調(diào)度器會重新選一次任務(wù)。4. 中斷環(huán)境下的任務(wù)通知細節(jié)4.1 為什么ISR版本必須有xHigherPriorityTaskWoken很多剛從裸機轉(zhuǎn)RTOS的人會忽略ISR版本API的返回值處理直接不檢查就往下跑。這在大多時候看起來正常但一旦發(fā)生中斷喚醒了高優(yōu)先級任務(wù)系統(tǒng)不會立刻切換到那個任務(wù)而是回到被中斷的任務(wù)繼續(xù)執(zhí)行。表現(xiàn)就是響應(yīng)變慢嚴重的會破壞實時性尤其在高優(yōu)先級任務(wù)是控制類、保護類任務(wù)時這個延遲可能是致命的。正確姿勢是上面那段代碼的寫法先定義一個局部變量xHigherPriorityTaskWoken并初始化為pdFALSE傳入ISR版API調(diào)用后立即判斷該變量如果為pdTRUE調(diào)用portYIELD_FROM_ISR觸發(fā)一次調(diào)度。有一個細節(jié)很多人不知道xHigherPriorityTaskWoken定義為局部變量是必須的不能用一個全局變量初始化為pdFALSE就反復(fù)傳進去。因為每次中斷調(diào)用的上下文都是獨立的全局變量可能在并發(fā)場景下出現(xiàn)競態(tài)導(dǎo)致漏掉調(diào)度或者重復(fù)調(diào)度。這是我在審查代碼時經(jīng)常發(fā)現(xiàn)的問題。4.2 什么時候用xTaskNotifyFromISR什么時候用vTaskNotifyGiveFromISR這兩個函數(shù)的區(qū)別其實就是eAction的區(qū)別。vTaskNotifyGiveFromISR內(nèi)部就是xTaskNotifyFromISR寫成eIncrement動作所以只需要通知值加1用vTaskNotifyGiveFromISR代碼簡短。需要置位、覆蓋寫、無覆蓋寫時用xTaskNotifyFromISR配合對應(yīng)的eAction。/* 中斷里置事件位 */ xTaskNotifyFromISR(xTaskHandle, BIT_TIMER_EXPIRED, eSetBits, xHigherPriorityTaskWoken); /* 中斷里傳最新值 */ xTaskNotifyFromISR(xTaskHandle, (uint32_t)ulStatus, eSetValueWithOverwrite, xHigherPriorityTaskWoken);另外注意ISR版本的API不能在臨界區(qū)里反復(fù)調(diào)用太多次雖然FreeRTOS的ISR版本API內(nèi)部會自己處理臨界區(qū)但如果你在中斷里循環(huán)通知幾百個任務(wù)中斷時間會變長。比如你要通知所有任務(wù)系統(tǒng)要休眠了用一個for循環(huán)調(diào)用幾百次每次都有進出臨界區(qū)的開銷這種情況下不如用一個事件組廣播或者用一個全局標志軟定時器回調(diào)的方式。4.3 中斷里用任務(wù)通知替代二值信號量的注意點傳統(tǒng)做法里ISR給任務(wù)發(fā)信號是用xSemaphoreGiveFromISR任務(wù)用xSemaphoreTake等待。用任務(wù)通知替代后代碼確實精簡了但有一個語義差異要心里有數(shù)二值信號量在任務(wù)持有信號量時再give一次信號量保持滿狀態(tài)不會變2而任務(wù)通知加1模式多次give會累積成大于1的計數(shù)值。這說明什么如果你的ISR和任務(wù)是一一對應(yīng)的事件通知計數(shù)累積反而不是壞事任務(wù)可以通過返回值的數(shù)值判斷ISR發(fā)生了多少次但如果你的本意是只發(fā)一次信號ISR里頻繁觸發(fā)導(dǎo)致計數(shù)不斷累加任務(wù)處理時就要用ulTaskNotifyTake(pdFALSE, ...)配合循環(huán)把計數(shù)值消化完否則通知計數(shù)會越積越多。我見過一個項目按鍵中斷用任務(wù)通知給任務(wù)發(fā)信號用戶快速連按三下通知值變成3任務(wù)只處理了一次剩下兩次信號殘留導(dǎo)致后面“無故喚醒”就是這個原因。5. 配置宏、調(diào)試技巧和常見坑5.1 這些配置宏不打開API都不能用任務(wù)通知的大部分功能默認就是可用的因為configUSE_TASK_NOTIFICATIONS默認是1。但有幾個相關(guān)的宏你需要確認configUSE_TASK_NOTIFICATIONS總開關(guān)設(shè)為1啟用任務(wù)通知。某些廠商提供的庫可能默認關(guān)閉用之前查一下。INCLUDE_xTaskNotifyWait如果要使用xTaskNotifyWait這個宏必須為1否則API不會編譯。INCLUDE_xTaskNotifyStateClear使用狀態(tài)清理時需要。configTASK_NOTIFICATION_ARRAY_ENTRIES如果使用較新的xTaskNotifyIndexed系列API通知數(shù)組需要把它設(shè)為大于0最常見的就是設(shè)為1代表每個任務(wù)有1個通知槽位。設(shè)為N時每個任務(wù)TCB里就有N個通知值你可以給一個任務(wù)的不同用途發(fā)不同類型的通知彼此不干擾。新版FreeRTOS V10.4之后任務(wù)通知數(shù)組已經(jīng)是標準功能了我用它做過一個很舒服的場景同一個任務(wù)掛兩個通知槽槽0接收外設(shè)中斷的數(shù)據(jù)就緒信號槽1接收管理命令的參數(shù)更新信號兩個互不干擾。不過老項目的代碼如果用的舊APIxTaskNotify系列是操作槽0的行為不受影響兼容性沒問題。5.2 調(diào)試任務(wù)通知狀態(tài)的辦法任務(wù)通知是藏在TCB里的狀態(tài)不像隊列能用隊列統(tǒng)計函數(shù)看到隊列中有多少消息。調(diào)試起來更費勁我一般用三個辦法。第一個辦法是看返回值。xTaskNotifyWait、ulTaskNotifyTake的返回值直接告訴你成功還是超時配合通知值輸出參數(shù)基本能判斷出發(fā)送和接收是否匹配。第二個辦法是查看任務(wù)狀態(tài)。如果任務(wù)卡在ulTaskNotifyTake用vTaskList / vTaskGetRunTimeStats之類的手段能看到這個任務(wù)處于Blocked狀態(tài)且阻塞原因是等待通知。在串口調(diào)試終端里定期打印所有任務(wù)狀態(tài)你會很清楚地看到哪個任務(wù)在等什么。第三個辦法是借助FreeRTOS內(nèi)核的斷言和Trace工具。比如可以臨時打開configUSE_TRACE_FACILITY或者掛接vApplicationStackOverflowHook、vApplicationMallocFailedHook之類的鉤子看是不是任務(wù)棧不夠或者消息處理不及時導(dǎo)致的溢出。注意不推薦一上來就懷疑內(nèi)核問題任務(wù)通知這種機制本身在FreeRTOS里非常成熟99%的情況問題出在應(yīng)用層的動作選型或標志清除邏輯上。5.3 經(jīng)典踩坑清單這些問題我全遇到過下面這個表是我自己和身邊同事在任務(wù)通知上踩過的典型坑每條都有實際項目背景。錯誤現(xiàn)象根因正確解法通知值一直在漲任務(wù)處理不過來使用了eIncrement且接收端沒有及時把計數(shù)消化合理設(shè)置超時或用ulTaskNotifyTake(pdTRUE, ...)一次性清零通知值明明是0發(fā)通知卻失敗eSetValueWithoutOverwrite語義非0值存在時會拒絕寫入先調(diào)用xTaskNotifyStateClear清狀態(tài)或改用eSetValueWithOverwrite任務(wù)沒有被喚醒但通知值已經(jīng)變了任務(wù)沒有進入阻塞態(tài)就收到了通知通知狀態(tài)停留在已通知用xTaskNotifyWait的入口清位參數(shù)把舊值清掉或用xTaskNotifyStateClear懸空任務(wù)句柄系統(tǒng)崩潰目標任務(wù)被刪除后仍往它的句柄發(fā)通知刪除任務(wù)前置空句柄或使用任務(wù)通知數(shù)組后注意索引越界ISR里調(diào)用了帶阻塞的API誤以為任務(wù)通知的ISR版能像普通版一樣等待ISR環(huán)境只能發(fā)不能等需要等就把數(shù)據(jù)丟給任務(wù)去處理多個任務(wù)同時調(diào)用ulTaskNotifyTake只有一個能收到任務(wù)通知是單對單的定向機制多方等待請使用信號量、隊列或事件組這里再展開說一個最容易陰溝翻船的xTaskNotifyWait的入口清除位和出口清除位。很多人看到API原型時以為這兩個參數(shù)是收什么通知和清什么通知其實它們的作用是進入等待時把通知值中對應(yīng)位先清掉退出時再把通知值中對應(yīng)位清掉。如果你寫的代碼是xTaskNotifyWait(0x01, 0x00, ...)那進入時bit0直接被清零了你這個bit0的事件標志就永遠等不到了。我在用任務(wù)通知模擬事件組時被這個坑過一次排查了大半天最后打印通知值才發(fā)現(xiàn)是這個原因。6. 什么時候不該用任務(wù)通知6.1 一對多廣播場景事件組才是正解任務(wù)通知的接收方由任務(wù)句柄唯一確定無法實現(xiàn)當(dāng)某個事件發(fā)生時讓所有等待它的任務(wù)都醒來。如果需要多個任務(wù)同時響應(yīng)一個事件比如多個任務(wù)都要在系統(tǒng)休眠命令發(fā)出后各自保存狀態(tài)請用事件組xEventGroupSetBits配合xEventGroupWaitBits讓每個任務(wù)獨立等待同一個事件位。6.2 超過4字節(jié)的數(shù)據(jù)傳輸用隊列或流緩沖區(qū)任務(wù)通知能裝下的數(shù)據(jù)量就一個機器字長多數(shù)平臺32位。你要傳一個結(jié)構(gòu)體、一包字節(jié)流、一組浮點數(shù)任務(wù)通知直接出局。哪怕你覺得我把它拆成兩個通知也別這么干拆開傳會有中間狀態(tài)接收方可能在收到一半時被調(diào)度走導(dǎo)致數(shù)據(jù)錯亂。這種場景用隊列、流緩沖區(qū)Stream Buffer或者消息緩沖區(qū)Message Buffer更合適它們有完整的復(fù)制和排隊機制。6.3 FIFO場景任務(wù)通知沒有排隊能力隊列的典型價值是FIFO先發(fā)進去的先被取出來消息按順序處理。任務(wù)通知保存的是最新值后來的覆蓋先來的完全不具備順序性。如果業(yè)務(wù)邏輯要求發(fā)10次就要處理10次按順序來別用任務(wù)通知的覆蓋寫用計數(shù)模式計數(shù)還可以如果還要攜帶不同的數(shù)據(jù)內(nèi)容就必須上隊列。6.4 共享計數(shù)型信號量場景多個任務(wù)競爭同一信號量二值信號量或者計數(shù)信號量的經(jīng)典用途是多個任務(wù)競爭一個資源使用權(quán)比如三個任務(wù)搶一個串口外設(shè)誰先take到誰發(fā)送。任務(wù)通知做不到這種競爭關(guān)系因為它發(fā)通知時已經(jīng)明確指定了目標任務(wù)的句柄不可能讓多個任務(wù)去搶同一個通知值。這種場景用真正的信號量配合互斥鎖做資源保護別用任務(wù)通知硬湊。我在一個數(shù)據(jù)采集網(wǎng)關(guān)項目里做過一次整體替換把原來用的3個二值信號量、1個事件組全部改成任務(wù)通知同時刪除對應(yīng)的隊列對象最后內(nèi)存占用下降了將近1KB所有功能測試通過。但另一個項目里我試圖把5個等待同一啟動命令的任務(wù)全部改成任務(wù)通知結(jié)果代碼寫得極其繞最后換回事件組兩行搞定。任務(wù)通知適合的是明確的一對一通知任何企圖共享和廣播的用法都是在跟自己過不去。寫在最后做嵌入式這些年我見過太多把任務(wù)通知用成玄學(xué)的代碼通知值莫名其妙變大、任務(wù)偶爾卡死、中斷發(fā)通知后任務(wù)不響應(yīng)。每次排查到最后幾乎都是同一個原因——沒有把通知當(dāng)成一種有明確語義的同步原語來用而是把它當(dāng)成了一個神秘的黑盒子。它是FreeRTOS里最高效的通信方式之一但這種高效是有前提的你要清楚地知道自己在用哪種動作、清除哪些標志、是否允許覆蓋、接收方是誰。最后分享一個我一直在用的小技巧在每個接收任務(wù)里把xTaskNotifyWait返回后的通知值打印到調(diào)試串口形成一個歷史記錄。任務(wù)通知最大的調(diào)試難點就是看不見中間狀態(tài)這個習(xí)慣能幫你把無形變成有形。等你在實際項目里跑過一輪信號量替換成任務(wù)通知的優(yōu)化之后你會回來認同那句話任務(wù)通知不是萬能的但用對了地方它是整個FreeRTOS里最順手的一把刀。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久婷婷五月综合色丁香花| 艳妇野外情欲放荡HD| 中文字幕日产A片在线看| 欧美va在线| 日韩色色视频| 男人的天堂999| 亚洲激情五月天| 日本波多野结衣视频| 狠狠狠狠狠狠草| 色婷婷丁香五月| 国产资源在线视频| 色婷婷婷婷| 能看的av| 99免费| 亚洲影院婷婷色| 战争与艾拉电影免费观看| www色色com| 思思热天天看| 我淫我色婷婷五月天激情四射| 综合狠狠五月婷婷| 亚洲人操亚洲人| 五月天激情国产综合AV| 久久婷婷艹| www.激情五月天| 91在线人| 久久人妻久久| 骚货艹网站视频| 色yeye色综合| 五月丁香六月激情| 激情五月天婷婷丁香 | 婷婷五月天综合久久| 成人欧美日韩| 色五月xxx| 激情五月天婷婷| 怡红院院在线导航网 | 成人午夜天| 亚洲激情五月丁香久久久久| 六月婷婷综合久久| 嫩BBB搡BBBB榛BBBB| 天堂草在线观| 99久在线观看| 欧美日本日韩| 五月停亭六月,六月停亭的英语| 五月婷色色| 超碰v| AV 3P| 97超级免费无码| 亚洲性爱电影| 天天综合影院| 天天日日人| 老师的粉嫩小又紧水又多A片视频| 五月丁香六月婷婷a v| enecarbon-materials.com污K127封锁请涟系@wip1688 | 99人妻碰碰久久久禁片| 超碰在线免费9| 婷婷激情五月天网站| 亚洲精品久久久久久久久久飞鱼| 色婷婷综合久久久久| 婷婷五月天天| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 白天AV月月| www.久久色.com| 99热伊人| 亚洲天堂色色| 都市激情五月婷婷亚洲| 色五月涩涩婷婷蜜桃| 色九月综合| 久久免费操| 婷婷五月久久| 色婷綜合网| 婷婷五月天激情电影| 五月丁香婷婷钟和色图| 亚洲精品久久久久AV无码| 欧美性爱五月天| 先锋男人99资源| 久久香蕉福利| 7超碰自拍| 大香蕉久久伊人网| 色九四色| 91丨九色丨首页| 狠狠操综合| 久久五月激情网| 久久久91| 色婷婷91激情小说| va中文资源在线观看| 9久久精品视频| 91 影音先锋| 色999五月色| 五月激情站| 五月婷婷新网站| 婷婷五月丁香国产| 操比激情五月| 九一九九黄色| 一区二区三区XXXXXX| 综合天堂AV久久久久久久| 久久97| 中文字幕,综合,91| 五月丁香婷婷综合视频| 激情丁香五月天图片| www.狠狠操.com| 99 热| 久草大| 人妻视频在线| 成人在线视频网| 第四色色六月色综合| 丁香六月综合激情| 婷婷丁香九色| 伊人久久综合| 成人在线网| 久久久久99精品成人网站| 99内射视频| 久久九九99.www| 好叼操在线观看| 丁香五月婷婷国产av| 99精品成人无码A片观看金桔| 俺去也五月天婷婷| 新激情五月天| 天天操天天曰天天射| 九月av在线| 九月av在线| 一本九九色| 国产精品成人网站| www99热| 五月丁香爱婷婷深深| 99re66热这里只有精品| 国产精品久久久60086| 天天弄天天爽| 五月天亭亭俺也| 天天爽天天操| 夜夜操狠狠操| 五月天激情网址| 99热首页| 天天操婷婷| 五月天开心网| 色色色色区| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 婷婷五月精品在线| 五月天开心激情综合网| 丁香五月综合| 永久免费一区二区三区| 91热er| 五月丁香婷婷潮喷中文字幕| 97av在线视频| 色五月色五天色情网址| 五月天婷婷激情网| 久久婷婷五月| 色婷插| 久久新| 五月婷婷开心深| 99热精国产这里只有精品| 九九色热视频| 丁香激情五月天| 777精品久无码人妻蜜桃| 91熟妇大香蕉| 亚州激情网站无码| 日韩 中文 欧美| 国产精产国品一二三在观看| 五月婷婷激情久久| 开心五月综合| 日日夜夜干| 免费人人操| 五月丁香婷婷AV天堂| 啪啪小说五月天| 亚洲操操操| 99热在线极品极品| 99色热视频| 午夜九九九九九九九九九九九九九| 五月天激情影院| 91九色成人原创视频| 日本一道久久| 综合色色婷婷| 色吊丝中文字幕| 国产色色网站网址| 无码色色色| 色婷婷在线影院| 内射激情在线| 天天综合色| 五月丁香久久呀| 丁香婷婷久久老熟女综合网| 狠狠五月天| 狠狠爱婷婷色| 婷婷淫淫狠狠六月| 亚洲视频另类| 这里只有免费精品| 日本97在线观看| 噜噜噜噜噜日本视频| 91se在线观看| 9精品视频在线| 国产高清精品色| 亚洲五月婷婷| 五月色婷婷影视在线电影| 久久婷婷六月综合综合| www:99热视频| 荷兰av一级| 亚洲人成网站999综合| 亚洲视频丁香网va| 国产小精品| 99综合| 五月婷婷影院| 色婷婷婷av| 色丁香婷婷| 久久在线大香蕉| 婷婷五月天激情网站| 亚洲日韩乱码一区二区三区四区 | 丁香五月天在线| 色婷五月天| 思思热久久艹| 五月丁香在线| 婷婷五月天亚洲精品| 久久XX| 国产欧美婷婷| 日韩精品视频中文字幕| 五月丁花六月丁香综合| 操九色| 九九综合九九| 亚洲激情高潮| 日本丰满久久| 99热主页日本| 色情五月丁香婷婷网| 婷婷五月天影院| 婷婷五月成年人| 国产伦亲子伦亲子视频观看| 五月天天爱| 久久九九九九| 色婷婷综合网| 99热这里只有精品55| www,超碰| 99视频| www久热com| 97在线日本| 九色91视频| 婷婷伊人久久| 综合色七七| 青青草五月天| 午夜美女人啪最红院| 国产真实乱了老女人视频| 99热这里只有的精品视| 亚洲久热| 婷婷在线日韩综合| 伊人激情影院| 久久精彩免费视频| 日日干干天天干| 久久久九九视频精品18| 99热日韩| 日本在线噜噜| 超碰在线视屏| 久久一级AV| 五月丁香婷婷六月| 99热成人精品| 免费AV在线| 网站免费一站二站| 五月丁香中文| 日本精品。999| 黄色AAAA韩国guochansanji| 99热在线精品观看| 婷婷五月免费视频| 囯产精品一品二区三区| 婷婷天堂站| 精品国产一区二区三区四区阿崩| 色在线99| 天天成人综合视频| 天天插天天狠| 婷婷久久精品| 婷婷五月丁香亚洲| 99热18| 色色色色色色色色色色色色色色,网站| 色婷婷精品| 亚洲无码成人| 日韩精品无码AV| 欧美色色色色色| 五月婷婷AV| 亚洲激情网| 国产在线网址1| 人人摸人人| 五月综合婷婷五月| 婷婷激情六月天视频| 另类图片天天影视在线观看| 五月丁香趴趴| 97超级啪啪在线观看| 日韩欧美一级大黄网站| 99riAv1国产在线观看| 思思99热这里只有精品6| 五月丁香婷婷色色| 丁香五月情| 日韩熟女啪啪视频| 色一色综合| 丁香五月婷婷影院| 婷婷五月天色色| 丁香六月久| 久热这里只有精品66| 丁香六月婷婷| 亚洲超碰在线| 国产91视频| 丁香六月激情国产| 五月丁香龟婷婷| 蜜桃婷婷丁香五月天狠狠久久综合| 91青娱乐青青草| 91a片爽| 五月天激情综合网| 九九热精品| 亚洲中文字幕网| 俺去也综合| 伊人五月成人| 天天爽天天摸| 开心五月婷婷在线| 激情宗合网激情五月天| 性生活视频98791| 激情开心五月婷婷| 激情婷婷五月天在线观看| 五月天婷婷三级黄| 成人五月天在线视频在线观看| 91日本在线观看| 97精品在线| 亚洲婷婷五月| 九月丁香| 色。 婷婷婷| 色在线五月天免费| 五月丁香狠狠| 色婷婷六月| 激情丁香五月婷婷| 色综合久久天天综合网| 亚洲色婷婷| 久久婷婷精品| 操逼综合激情网| 激情超碰网| 日本三级色| a色婷婷| 久9热视频在线观看| 日本WWW九九九| 成人网站免费在线播放| 久久五月视频| 天天摸日日舔狠狠添婷婷婷| 五月丁香黄色视频| 亚洲综合婷婷| 99视频这里有精品| 99热插| 五月花激情| 婷婷大香蕉| 99久久超级| 久久色午夜在线导航| 婷婷五月丁香超碰| 2025最新亚洲激情在线| 五月六月婷| 婷婷色网站| www.久久| 玖玖婷婷五月| 操逼福利视频| 五月婷婷六月激情| 国产精产国品一二三在观看| 中文字幕av在线播放| www99热| 丁香六月婷婷综合麻豆| 天堂综合久| 天天干一干| 狠狠色噜噜狠狠狠777奇米| 99精品97| 欧美丁香六月在线观看视频| 丁香六月综合| 色偷偷AV亚洲男人的天堂| 97碰碰叉| 久久久精品99亚洲综合| 婷婷射丁香| 热99这就是精品视频| 婷婷碰碰| 五月天六月丁香| 色色亚洲五月天| 青青草五月天| 操逼巨乳91| 五月丁香婷婷久久| 婷婷五月激情综合| 99视频网址| 中文不卡一二三区| 丁香六月激情综合| 五月丁香综合成人社区| 久久深爱激情网| 丁香五月自拍| 天堂网色婷婷| 五月丁香激情欧洲啪啪| 婷婷91| 色色色色色色五月婷婷| 五月激情基地| 丁香五月天激情综合| 96色婷婷| 丁香美女主播视频在线观看| 内射干少妇亚洲69XXX| www.超碰在线| 97碰碰人人视频| 色99视| 99干视频| 另类精品视频在线观看| 色五月在线播放| 精品一二三区久久AAA片| 九九99精品视频| 婷婷中文字暮| 婷婷五月综合丁香久久| av人人操| 99久久欧美| 日日操,日日爽| 天天综合网站| 99精品无码视频| av网址在线| 五月婷婷色播| 99热精品超碰| 天天影院色| 青草视频在线观看视频| 色久在| 国产激情久久| 大香蕉啪啪啪| 丁香五月Av| 五月久久婷婷| 强伦轩人妻一区二区电影| 4399欧美另类视频| www.色婷婷| 久热99久热| 婷婷五月天狠狠| #NAME?| 色爱终和网| 丁香五月亚洲综合| 五月天激情小说欧美激情| 九九色网专区| 天天日夜夜拍| 伊人丁香五月婷婷潮吹| 五月天色五月| www.久久99| 色99视频| 九九机热| 婷婷娌伦网| 五月香蕉婷婷| 亚洲情色一区| 国产在线6| 少妇被下春药玩弄A片| 国产色色网址网站| www99精品日韩| 久热A| 综合亚洲AV| 女人被男人吃奶到高潮| 五月丁香| 99精品综合在线| 六月份天丁香婷婷| 婷婷激情五月天在线视频| 变态 另类 在线 | 99热都是精品| 激情婷婷五月天在线观看| 99热最新国内| 亚洲成人AV在线观看| 婷婷五月天最新综合你懂的| 江苏少妇性BBB搡BBB爽爽爽| 色播五月天激情| 超碰91av| 九九婷婷激情综合网| 久久色五月天| www.婷婷| 久久婷婷亚洲五月天| 六月婷婷色色色| 亚洲视频二区| 亚洲综合婷婷| 激情性爱五月| 综合色、色综合| 思思热精品在线| 99操| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 婷婷五月天直播| 久久se 综合网| 久re热视频| 久久婷婷丁香五月一二三| 天天插天天| 99综合入口| 99精品自拍视频| 天天干天天 亚洲| 高清国产AV| 婷婷五月天综合网| 色99热| 婷婷深爱色五月| 色 五月 天 婷婷 丁香 九月| 狠狠综合| 五月天播播中文字幕| 丁香五月网站| 99热加勒比| 丁香香蕉射射射| PORNY九色9l自拍视频成人| 激情丁香五月激情婷婷| 第四色激情网| 亭亭五月基地在线| 五月婷婷综合在线视频| 国产va在线视频| 日本大逼91| 亚洲无AV在线中文字幕| 亚洲人妻av| 久草五月天| 色噜噜狠狠色综合日日免费| 六月婷婷色综合| 69人人操人人爽| 婷婷五月色| 九九久久综合| 亚州操操| 精品99在线| 天天看夜夜看| 婷婷激情蜜桃玖玖丁香| 天天色图| 五月丁香花视频| 久热re视频在线观看网站| 日本人妻伦在线中文字幕| 久久99激情| 色色色色色色色色色色色色色色,网站| 在线观看中文字幕| 久9热视频| 婷婷五月六月| 五月色丁香激情| 激情综合五月.....| 色播综合| 激情久久久| 伊人网大香| 亚洲AVwwwwwww| av婷婷六月丁香社区在线观看| 九九色综合| 九九色逼| 丁香五月天激情| 色综合伊人网| 久久婷婷五月天| 天天色视频| 色婷婷香蕉| 综激情网| 思思re99视频在线观看| 五月丁香六月婷婷网| 色婷婷影视| 九九色综合| 五月天色综合| EEUSS鲁片一区二区三区| 高清无码网址| 国产AV一区二区三区日韩| 成人国产欧美大片一区| 99九九精品视频推荐| 丁香操逼| a九九热www| 色情五月综合婷婷| WWW.桔色成人.COM入口| 99久久免费精品| 99热这里只有精品在线播放| 亚洲天堂aaaa| 婷婷精品| 超碰成人公开| 色婷婷五月成人网| 99综合视频在线| 这里只精品| 五月丁香六月欧美| 97操碰在线视频| 久色网| 99在线免费观看| 日本一級黃色一級片| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | Www99热| 色色五月天网站| 色色色综合网| 99热99这里免费的精品| 色婷婷亚洲婷婷| 青青草激情网| 六月婷欧美丁香综合| 婷婷七月丁香色色| 婷婷综合五月激情| 六九色综合婷婷五月天| 五月激情小说| 俺去婷婷 丁香| 亚洲精品视频在线| 亚城区在线| 超碰chaompinm| 福利视频在线播放| 无码橾| 久久久久久草黄色片AV在线观看| 婷婷五月天免费99| 97狠狠色| 欧美人妻一区二区| 综合色99| 99热欧美偷拍| 精品皮股午夜AV| 五月丁香琪琪| 九月婷婷在线观看| 婷婷五月天xxx| 天天做天天爽| 色一色综合| 婷婷久久大香蕉| 日日做夜夜爱| 精品人妻伦一二三区久久| 亚州色综合| 另类激情五月天。| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 国产婷婷五月中文字幕高清| 99热这里只有精品99| 天天插天天插| 97在线视频人妻九色| 丁香六月成人网| 成人AV在线网站| 99碰碰碰| 激情婷婷六月| 久久五月综合| 久久久激情| 色婷婷丁香五月天在线观看| 大地9中文在线观看免费高清| 亚洲综合另类| 五月丁香婷爱在线| 午夜天堂一区人妻| 蜘蛛女免费观看完整版高清电影 | 野战J办公桌椅H| 成人视频一区| 午夜成人网站在线观看| 婷婷久久婷婷| 婷婷瑟瑟五月天| 激情五月天网站| 色综合久久888| 亚洲va成人va成人va在线观看| 97久久久久久久久久久| 69五月天视频| 99精品在线观看| 99热9| 欧美色色色色色| 欧美WW在线网| 五月婷婷啪啪| 久久久久久久久久久44| 色播激情五月天| 国产女18毛片多18精品| 五月开心深深爱激情综合| 日日躁夜夜躁狠狠久久AV| 久久五月视频| 开心激情五月天网| 激情视频婷婷五月花| 丁香五月激情棕合| 久久久无码精品成人A片小说| 久久无意婷婷| 性高潮久久久久久-九九九九九九九九九九热-成人AV | 9久久网| 亚洲日日操| 99欧美精品99日本精品| 一级操逼内射在线视频| 疯狂做受XXXX高潮A片动画| 996er在线观看| 99久在线| 婷婷久久午夜网| 五月天偷拍| 国产成人AV人人爽人人澡Va| 日韩一区二区A片免费观看| 丁香久色| 91制片厂久久久国产电影| 五月成人网天天| 在线中文字幕免费视频| 狠狠色噜噜狠狠狠狠综合| 欧美色色色色色| 99久久婷婷国产综合精品草原| 久久久久久9| 亚洲综合色色| 99精品无码网站| 91久久国产自产拍夜夜91久久精品文字>91麻豆精品国产 | 丁香五月在线| 久久这里只有精品16| 日韩野外 无套| 激情综合激情综合| 日本三级大片| 五月婷三级片| 黄色一级影片| 插插插丁香五月婷婷| 久草热8精品视频在线观看| 久99久热只有精品国产99| 中文字幕日本最新乱码视频 | 久久成人亚洲欧美电影| 久久人人妻| 丁香五月婷婷啪啪| 婷婷色网址| 久久与婷婷| 7月婷婷六月丁香| 精品一区久热| 五月天精品视频| 婷婷丁香激情五月天色色| g00d人体西西| 亚洲亚洲人成综合网络 | 91色婷婷综合久久中文字幕二区| 五月天六月婷婷电影| 婷婷丁香九月| 人妻有码乱操| 亚洲六月婷婷| 狠狠狠色激情综合适合| www..com色爱| 日本久热| 九久热| 天天草天天爽| 久人操| 青青福利网| 91九色精品熟女内射| 69热91天堂| 综合色五月| 婷婷五月六月丁香| 婷婷五月丁香激情色情| 色玖玖综合网| 欧美啪啪五月天| 婷婷成人基地| 天天干夜晚夜操| 天天爱综合网| 婷婷五月骚厕所| 色婷婷成人丁香| 伊人婷婷91| 久婷婷视平| 日韩成人综合网| 性色婷婷| 激情综合网五月激情| 激情综合五月色在线| 啪啪99| 午夜九九九九九九| 色哟呦av| 俺去也五月| 深爱综合网| 色射影院| 亚洲婷婷五月| 99综合网| 五月天综合| 激情五月婷婷网| 思思热久久婷婷五月天| 婷婷六月丁香久| 深爱五月月天| 99无码视频| 97性视频| 久一网站| 狠狠色噜噜狠狠| 中文字幕婷婷在线| 亚洲视频在线网| 91热视频| 婷五月天| 五月天堂色色| 98色丁香五月婷婷综合网| 9久热在线视频| www.第四色99| 97成人丁香| 久久XX日本综合| 久久女伦| www九月婷婷| 69精品无码一区二区三区| 激情文学 综合 九月| 色婷狠狠| 人人操操| 九九九日本熟女| 色综合久久天天综合网| jiujiu热在线视频| 欧美婷婷六月丁香综合色连续高潮抽搐| 九九热a| 激情五月天噢美| 国产日批视频| 久久99热精品a片在线观看| 日日日影院| 99热日韩| 中文字幕av在线播放| 成人在线精品| 五月丁香影院| 久久这里只有精品视频15| 色婷婷综合在线| 婷婷午夜精品久久久| 色五月婷色彩免播放器| 色五月婷婷丁香国产在线| 9999色色色色| 人人草人人舔| 五月丁香六月激情在线| 风流少妇A片一区二区蜜桃| 在线五月婷| 五月天综合色| 另类亚洲2| 欧美成人热| 综合久色五月| 成人丁香五月| 婷婷天天色| 婷婷五月天AV| 亚洲欧美国产A片免费观看| www..999热久| 可以直接看的av网站| 色色 亚洲| 亚洲操人| 久久综合五月天激情小说网站 | 婷婷六月丁香激情综合| 日日插日日干| 婷婷操逼| 91碰免费视频| 超碰人人草| 婷婷五月天日日日干干干| 五月天婷婷色| 黑人巨粗进入警花疼哭A片| 色婷婷综合电影| 97亚洲色 torrent magnet| 久久这里有精品在线观看| 噜噜狠狠色综合久| 99riav 亚洲| 五月天丁香婷| 狠狠色噜噜| 开心深爱激情网| 99玖玖视频| 五月天天丁香婷婷在线中| 久久久久思思热| 天天干天天日天天操| 久久久五月天婷婷| 婷婷色五月噜噜| 五月天婷婷影院| 少妇水多A片太爽了| 在线看片av| 蜜桃五月天| 噜噜噜狠狠色综合| 九九热自拍| 五月天六月婷婷电影| 婷婷久久五月| 欧洲亚洲免费视频9| 婷婷丁香五月综合激情小说| 日韩一级片| 91久久综合| 色婷婷裸体色性在线| 国产亚洲在线观看| 日韩啪啪视频| 9九色首页| 丁香五月婷婷总啪啪| 亚洲天天免费| 99网| 六月激情婷婷| 伊人色综合久久久| 综合久久综合综合| 亚洲激情综合五月婷婷啪啪| 色啪网| 日夜操B| 欧美色九| 五月间天堂综合| 五月第四色| 久99久视频精品| 色五月天综合| 九九热最新| 大香蕉九九| 婷婷五月天久久| 色色色婷婷五月| 日韩另类在线观看| 精品网站:999WWW| 色五月av| 金品在线视频99| 99爱视频在线观看| 婷婷五月色情| 色婷五月天| 亚洲xx网| 香蕉操亚洲| 久久性刺激| 中文字幕激情综合| 99久久www| 五月丁香啪啪啪综合网| 丁香婷婷久久| 免费视频WWW在线观看网站| 99在线视频在线观看| 超碰免费人人肏| 久久天天| 丁香婷婷激情综合五月激情 | 午夜日日| www.jiujiujiu| 99自拍视频网站| 99热在线观看精品| www久久五月com| 亚洲综合激情五月久久| 五月天色婷婷视频| 成人国产网| 9这里只有精品| www.第四色99| 六月丁香网| 粉嫩av懂色av蜜臀av熟妇| 五月天色丁香| 五月丁香亚洲五月| 任我干视频在线观看| 激情六月综合| yellow视频在线观看91| 26uuu精品国产| 色天天久婷婷| 九久热| 991精品在线视频| 99视频内射三四| 亚洲视频一区| 欧美成人色婷婷| 影音先锋一区| 精品99在线观看| 另类在线| 综合 蜜月 婷婷| 色五月av| 丁香五月天激情视频| 激情五月天在线观看婷婷| 久久女伦| 另类激情中文| 天天婷婷综合亚洲亚洲| eeuus五月婷| 94干大香蕉| 99在线精品免费视频| 激情AV在线| 天天日天天日天天搞| 丁香五月激情综合| 久久五月婷婷视频| 国产毛片精品一区二区色欲黄A片| 狠狠干在线| 丁香六月视频免费观看| 五月丁香六月久久| 婷婷九色| av操B网站| 九九色色| 亚洲综合99| 天天摸天天做天天爱天天爽| 深爱激情九九五月天 | 91婷婷丁香| 99精品福利视频| 丁香五月天在线直播观看| 91色涩| 超碰99热在线观看| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 99综合久久| 九九婷婷五月天| Va另类视频| 丁香五月在线伊人| 婷婷久久久| 久久九九中文字幕| 欧美色偷偷大香| 日日噜噜夜夜狠狠久久丁香五月| 99精品在线| 99热大香蕉| 色综合五月天| 五月天成人网在线观看| 337午夜福利| 99色播| 狠狠肏综合网| 天天色情站| 欧美极品999| 亚洲美女高潮久久久久久69| 五月天婷综合| 九九久久高清| 亚洲精品网址| 亚州激情九月| 婷婷丁香www视频日本韩国| 67194中文在线| 亚洲操女| 美女爆乳18禁www久久久久久| 日日噜噜夜夜狠狠久久丁香五月| 免费视频WWW在线观看网站| 欧美成人精品A片免费一区99| 久热久| 这里只有精品在线观看视频| 337p大胆噜噜噜噜噜91Av| 超碰大香蕉网| 99亚洲天堂| 夜夜撸日日操| 99热只有| 字幕网AV中文字幕| 亚洲色99综合天堂| 伊人成综合五月婷婷| 91九九精品| 草榴视频网| 久久大香蕉同僚| 亚洲综合1024| 噜综合| 亚洲综合丁香婷婷六月天| 襙比视频| 丁香婷婷六月在线资源观看| 中文在线视频久1| 另类激情五月在线视频欧美| 日本色图综合| 免费视频99| 国产看真人毛片爱做A片| 五月婷婷黄色网址| 天天操精品| 婷婷色情网| 韩日在线熟女| 久久婷婷一级片| 婷婷五月天中文字幕| 182TV大香蕉| 噜噜视频| 99热综合在线观看| 色色色在线观看| 天天爽夜夜爽夜夜爽精品| 久久婷婷五月综合激情国产| 色J香五月天| 97人人操| 亚洲中文字幕在线观看| 色碰97| 男女99免费视频| 极品 少妇 内射| 天天透天天爱| 在线只有精品| 中文AV网站| 9色在线视频| 视频这里只有精品16| 99热综合| 欧美成人精品A片免费一区99| 丁香婷婷影院| 97人人射| 99热在线观看亚洲区| 婷婷97碰碰| 538在线精品| 亚洲性视频| 亚洲丁香五月美女| 超碰人人91| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 99热碰碰热| 无码G高清天| 播五月,色五月,开心五月播放器| 99爱视频免费| 五月婷中文娱乐综合| 久久这里都是精品免费| 丁香五月亚综合图片| 夜夜躁爽日日| 欧美日韩五月婷婷| www.狠狠操.con| 久久久大香蕉| 日韩AC在线免费观看| 99色色爰| 99久久网站| 99视频| 99九九久久| 久久美女五月天| 国产精品18久久久| 婷婷五月香蕉| 婷婷五月天黄色小说| 国产精品美女久久久久AV超清| 免费看成人747474九号视频在线观看| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 无码九九九九| 婷婷五月天激情视频| www.超碰| 2016日日夜夜操| www久热com| 白人荫道BBWBBB大荫道| 久久99精品视频| 婷香五月激情视频| 黄网在线免费| 开心五月激情| www.婷婷| 五月天婷综合| 99热精品在这里| ztEJj| 思思99re这里只有| 99精品久久| 99超级碰免费视频| 久久婷婷91| 六月大香蕉| 人人摸人人摸| 永久天堂日本| 99re这里只有精品在线观看| 久久小说| 国产婷婷五月中文字幕高清| 久久伊人五月天| 综合性爱网| 天天噜| 久热久操久热久草国产91| 丁香六月婷婷综合在线| 五月天操逼激情| 欧美色色色| 666555。COm毛片| 婷婷色五月亚洲| 裸睡玩奶头(高H)| 九九热这里都是精品6| 美日韩成人| 狠狠另类视频| 欧美性生交XXXXX无码小说| 亚洲美女婷婷五月天| 96丁香六月婷婷蜜桃综合久久| 91丨九色丨东北熟女| 婷婷五月无码| 人人玩人人橾| 丁香六月激情| 五月色欧洲| 激情五月黄色| 色99热| 吾爱AV导航| 香蕉人在线香蕉人在线 | 99在线视频免费| 成人婷99最新| 影音先锋按摩| 九九热在线精品视频| 99热精品网| 91人久| 成人视频婷婷| 99色日本| 九九热超碰| 丁香五月综合久久八| 天堂无码人妻精品AV一区| 激情婷婷狠狠干| 免费日本aⅴ中文字幕| 婷婷五月天激情电影小说| 超碰99资源站| 六月丁香婷| 都市激情五月婷婷综合| 69热91天堂| 色五月亚洲| 日韩啪啪网| 国产欧美精品AAAAAA片| 婷婷五月精品中文字幕| 一本九九色| 色婷婷综合视频| 狠狠干2007| 大香蕉在线观看9| 粉嫩av懂色av蜜臀av熟妇| 久久在这里有精品| 91 久热| 91综合国免费久入| 激情五月六月婷婷综合啪啪| 色天使久久综合| 99热天堂| 丁香五月六月婷婷自拍| 4399精品一区二区| 色色婷婷五月天| 国产又黄又爽又激情不遮挡视频在线观看| 日本色99网站| 亚洲成人在线免费| www.伊人天堂偷偷婷婷| 9色天堂| 97精品综合久久| 丁香六月天色婷婷| 婷婷月综合| 岛国在线观看91| 色色免费网站| 日逼免费视频 | 做爰丰满少妇1313| 狠狠穞A片一區二區三區| 五月亭亭六月色| 久久久婷婷色五月资源网| 99热这里只有精品在线观看| 激情婷婷五月基地| 激情五月综合网| 日本道久久91| 色婷五月| www.9797国产| 日韩久久这里只有精品| 人人摸人人操人人爽| 日韩一级| 午夜丁香| 色色五月婷婷久久| 欧美日本一区二区三区| 色色五月婷| 激情淫乱男女| 亚洲精品又粗又大又爽A片| 色婷婷天堂| 99青青草| 男人天堂亚洲综合| 人人97碰| 91大神在线免费看视频全集男男一起操| 天天综合精品| 99久精品视频| 99热99热不卡| 天天婷婷天天| 五月丁香色色网| 99九九中文字幕视频| 五月丁香综合精品欧美| 色五月丁香五月| 123草逼网| 四月婷婷丁香五月| 午夜电影网VA内射| yazhou seshipin| 久久久人妻不卡| 综合网啪啪| 亚州综合色| 狠狠色丁香久久综合婷婷亚洲成人福利| 丰满女老板BD高清A片| 色色色色色色网站| 日韩成人中文字幕| 五月丁香六月天| 丁香五月激情在线| 久热精品视频| 久久久99精品| 色情五月天se| 亚洲在线激情婷婷五月| 亚城区在线| 丁香六月激情国产| www五月婷婷88导航| 亚洲无码色| 欧美色频| 丁香五月手机在线| 丁香色婷婷| 九九色综合| 亚洲综合久| www.99久| 大香蕉综合| 九九99在线免费在线观看视频| 成人视频在线免费播放| 五月丁香六月| 噜噜色五月| 一起草Av| 亚洲五月婷婷| 婷婷丁香色五月| 色五月丁香婷婷| 色99视频| 免费视频WWW在线观看网站| 亚洲第一综合| 国产午夜精品一区二区三区嫩草| 国产精品第一国产精品| 中文字幕按摩做爰| 清纯唯美 激情四射| 99色人| 九月大香蕉| 日本欧美国产| 五月婷婷综合网| 天天日日人| 深爱激情网婷婷| 岛国av电影网站| 噜噜噜噜综合在线| 日本WWW九九九| www.狠狠| 国产JK精品白丝AV在线观看| 99热在线观看| 99热黄| 99热在线资源| 伊人久久婷婷| 五月天开心色情网| 婷婷六月激情在线视频| 五月天婷婷丁香| 婷婷视频网| 最近中文字幕大全免费版在线 | 天天干在线播放| 九色地址91视频| wwwss在线观看| 婷婷色丁香五月| 天天做天天爽| 99热这里精品| 久久综合婷婷激情| 日韩免费99| 五月丁香婷婷爱激情综合网| 婷婷综合成人五月天| 丁香五月综合AV在线| 色综合久久88色综合天天99| 五月天色丁香| 婷婷99视频全集高清| 成人网在线视频| 琪琪理论片| 久久99激情丁香婷婷小说网| 色射影院| 五月丁香婷婷五月色| 91九色精品| 色天天狠狠干| 国产这里只有精品| 色婷婷综合网站| 五他月天啪啪啪| 激情五月天黄色小说| 99愛国产| 俺去也五月| 五月婷婷婷色| 五月婷婷另类| 色五月婷婷五月天激情综合| 激情五月丁香五月| 香蕉99网| 婷婷伊人无码| 色五月av| 免费看成人AA片无码视频吃奶| 看全色黄大色大片| 99久久思思| 久热91| 最熟少妇乱码| 久热2025无码| 超碰在线9| 99久| 婷婷丁香77777| 日日爽夜夜爽| 久草婷婷网 | www.色五月.com| 99久在线精品99re8| 殴美日韩成人| 亚洲精品性色| 99只有精品| 午夜九九九九九九九九九九九九九| 狠狠色五月| www.激情五月| 丁香激情五月| 99r这里只有精品在线观看| 99九九久久| 丁香九九九九| 色五月播五月| 99久久婷婷精品视频| 亚洲五月丁香综合网| 五月天丁香网站| 99热超| 深爱婷婷丁香五月激情|