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

ARTICLE DETAIL

資訊詳情

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

手把手教你實現(xiàn)MCU上的最小搶占式調(diào)度器

手把手教你實現(xiàn)MCU上的最小搶占式調(diào)度器 很多人寫裸機程序都是從一個大循環(huán)開始的讀傳感器、處理按鍵、刷新屏幕、發(fā)送數(shù)據(jù)全塞在while(1)里。功能少的時候倒還好但只要功能一多代碼就開始互相拖后腿——按鍵按下要等半秒才響應(yīng)通信數(shù)據(jù)偶爾就超時丟包。這時候你就會想能不能讓系統(tǒng)自己決定先跑哪個任務(wù)、跑多久、什么時候換下一個搶占式調(diào)度器解決的就是這件事。它負(fù)責(zé)在多個任務(wù)都處于“可運行”狀態(tài)時決定誰先上CPU、運行多長時間、被誰打斷、以及如何切回。這篇文章我會把一個最小可運行的搶占式調(diào)度器從頭到尾拆開講包括任務(wù)控制塊怎么設(shè)計、上下文切換到底在切什么、SysTick和PendSV如何配合、以及我在實測中踩過的各種坑。適合剛接觸RTOS、或者想深入理解操作系統(tǒng)調(diào)度機制的開發(fā)者看完你完全有能力自己手寫一個跑在MCU上的調(diào)度器。1. 先想清楚搶占式調(diào)度器的設(shè)計邏輯1.1 為什么必須要“搶占”而不是讓任務(wù)自己讓位調(diào)度器有兩種典型形態(tài)協(xié)作式和搶占式。協(xié)作式調(diào)度的核心邏輯是“每個任務(wù)主動放棄CPU系統(tǒng)才切到下一個任務(wù)”。聽起來簡單但工程上非常脆弱只要有一個任務(wù)里存在長循環(huán)、阻塞等待或者意外死循環(huán)整個系統(tǒng)就卡在那個任務(wù)里其他任務(wù)完全沒有翻身機會。我早年做的一個數(shù)據(jù)采集模塊就吃過這種虧一個串口等待應(yīng)答的循環(huán)沒加超時結(jié)果整機其他功能全部掛起只能靠看門狗復(fù)位。搶占式調(diào)度則是把“何時切換”的控制權(quán)從任務(wù)手里收回來交給調(diào)度器本身。系統(tǒng)通過定時器中斷強行打斷當(dāng)前正在運行的任務(wù)保存現(xiàn)場然后按優(yōu)先級策略決定下一個該跑誰。特別典型的一個場景就是高優(yōu)先級任務(wù)在等待某個外部事件低優(yōu)先級任務(wù)正在做批量計算這時候外部事件到了中斷里把高優(yōu)先級任務(wù)喚醒調(diào)度器立刻暫停低優(yōu)先級任務(wù)先讓高優(yōu)先級任務(wù)把關(guān)鍵動作做完再回來繼續(xù)算。這件事用生活中的場景類比就是醫(yī)院急診分診。協(xié)作式像普通門診排隊前面的人聊了二十分鐘后面的人就只能干等搶占式像急診分診救護車送來的危重病人一到立刻插到最前面處理。嵌入式系統(tǒng)里“危重病人”就是那些有實時性要求的任務(wù)比如電機控制、協(xié)議超時處理、安全保護邏輯。1.2 調(diào)度器要管的三大核心結(jié)構(gòu)一個典型的搶占式內(nèi)核無論手寫還是商用RTOS核心都離不開三個部分任務(wù)控制塊數(shù)組、就緒隊列、時基中斷源。任務(wù)控制塊叫TCB每創(chuàng)建一個任務(wù)就分配一個TCB它用來存放這個任務(wù)的所有“身份信息”任務(wù)當(dāng)前的棧指針、優(yōu)先級、狀態(tài)、入口函數(shù)、私有棧底地址等等??梢园阉斫獬擅總€任務(wù)的檔案袋調(diào)度器做任何決策之前必須先翻檔案袋。就緒隊列負(fù)責(zé)表達(dá)“當(dāng)前有哪些任務(wù)是能跑的”。最簡單的設(shè)計就是按優(yōu)先級分成多個隊列同優(yōu)先級的任務(wù)鏈在一起。調(diào)度時只需要找“最高優(yōu)先級里排在最前面的任務(wù)”即可。就緒隊列的更新時機很講究任務(wù)創(chuàng)建時、任務(wù)延時結(jié)束時、任務(wù)被信號量喚醒時都要把對應(yīng)TCB掛到就緒隊列上。時基中斷是搶占的“節(jié)拍器”。沒有外部中斷周期性打斷搶占就沒有觸發(fā)源。常用的是定時器中斷比如配置一個1ms的周期性中斷每次中斷都觸發(fā)一次調(diào)度檢查當(dāng)前任務(wù)時間片到?jīng)]到有沒有更高優(yōu)先級任務(wù)就緒任務(wù)狀態(tài)機也很重要一個任務(wù)只會有三種基本狀態(tài)運行態(tài)、就緒態(tài)、阻塞態(tài)。跑著的叫運行態(tài)被搶占的其實回退成就緒態(tài)等待延時、信號量、事件的時候叫阻塞態(tài)。調(diào)度器干的事說白了就是不斷在這三個狀態(tài)之間做搬運工。1.3 一個任務(wù)切換的完整足跡我畫不出流程圖直接用文字描述把整個切換足跡走一遍。某時刻低優(yōu)先級任務(wù)B正在運行。外部設(shè)備觸發(fā)中斷在中斷服務(wù)函數(shù)里把一個高優(yōu)先級任務(wù)A等待的事件置位。中斷服務(wù)函數(shù)退出前發(fā)現(xiàn)“A任務(wù)已經(jīng)就緒而且A的優(yōu)先級比B高”于是設(shè)置一個切換請求標(biāo)志。退出中斷后系統(tǒng)進入PendSV異常處理PendSV是專門用來做上下文切換的異常在PendSV里把B的當(dāng)前寄存器現(xiàn)場全部壓入B自己的棧保存好B的棧指針到B的TCB里然后從A的TCB里取出A的棧指針把A之前保存的現(xiàn)場全部彈出到寄存器里最后退出異常CPU接著跑的就是A任務(wù)的代碼。這里有一個容易想歪的點所謂的搶占不是中斷服務(wù)函數(shù)里直接跳去執(zhí)行任務(wù)A的代碼而是“中斷退出之后順著異常返回機制自然切到另一個任務(wù)的上下文”。理解了這個后面看匯編代碼就不會懵。2. 四個關(guān)鍵設(shè)計點TCB、上下文切換、就緒隊列與臨界區(qū)2.1 任務(wù)控制塊TCB里的字段不是隨便定的我寫調(diào)度器的時候TCB結(jié)構(gòu)體的字段順序都是刻意安排的。第一版我把棧指針放在第一個字段理由很實際上下文切換的匯編代碼需要頻繁訪問當(dāng)前TCB的sp如果sp在結(jié)構(gòu)體偏移為0的位置匯編里只用一個基地址加零偏移就可以讀寫代碼最緊湊也最不容易錯。后面加字段也只是往后追加前面的偏移不會變。一個直接可用的TCB設(shè)計大概長這樣typedef struct tcb { uint32_t *sp; // 當(dāng)前任務(wù)的棧指針必須位于偏移0 uint8_t priority; // 優(yōu)先級數(shù)值越小優(yōu)先級越高 uint8_t state; // 任務(wù)狀態(tài) uint8_t delay_ticks; // 剩余延時tick數(shù)0表示就緒 void (*entry)(void *arg); // 任務(wù)入口函數(shù) void *arg; // 任務(wù)參數(shù) uint32_t *stack_bottom; // 棧底地址用于溢出檢測 uint32_t stack_size; // 棧大小 struct tcb *next; // 指向同優(yōu)先級隊列的下一個任務(wù) } tcb_t;每個字段背后都有坑。delay_ticks用uint8_t意味著最大延時255個tick如果你把tick配置成1ms那一個任務(wù)最多只能延時255ms不夠用用uint16_t或者uint32_t才穩(wěn)妥。stack_bottom和stack_size是我后來加上的原因后面排查章節(jié)會說——任務(wù)棧溢出是跑調(diào)度器最常遇到的硬故障有這兩個字段可以在每次切換時做一次邊界檢查。任務(wù)狀態(tài)字段我習(xí)慣定義成枚舉運行、就緒、阻塞各一個值。運行態(tài)其實可以并入就緒態(tài)的語義中因為一個CPU上永遠(yuǎn)只有一個任務(wù)在跑其他就緒任務(wù)都處于“隨時可以接手”的狀態(tài)。2.2 上下文切換到底在“切”什么上下文切換是整個調(diào)度器的靈魂。所謂上下文指的就是CPU在一瞬間執(zhí)行任務(wù)所需的全部狀態(tài)——通用寄存器、棧指針、程序計數(shù)器、程序狀態(tài)寄存器。切換的本質(zhì)就是把當(dāng)前任務(wù)的所有寄存器從一個地方搬到它自己的棧里再把它對手任務(wù)的所有寄存器從對方的棧里搬回來。在很多通用MCU上這個搬運動作是由硬件和軟件配合完成的。以Cortex-M為例一個任務(wù)正在被中斷打斷時CPU硬件會自動把一部分寄存器壓棧包括R0到R3、R12、返回地址LR、程序狀態(tài)寄存器xPSR和PC這會占用棧里的24字節(jié)。但R4到R11這八個寄存器硬件不壓棧必須由軟件在PendSV里自己保存和恢復(fù)。這正是手寫調(diào)度器最容易出錯的地方漏保存任何一個寄存器任務(wù)恢復(fù)運行后寄存器值被改掉輕則運行出錯重則直接HardFault。在Cortex-M上做上下文切換有一個極好的工具叫PendSV這是設(shè)計者專門留給操作系統(tǒng)做上下文切換的異常。它的優(yōu)先級可以在NVIC里配置成最低優(yōu)先級這樣任何中斷搶占它之后都會先完成自己的處理最后才輪到PendSV做切換。為什么一定要用PendSV而不是直接在SysTick中斷里切換因為如果SysTick正在跑的時候又被其他高優(yōu)先級中斷打斷打斷了就得服務(wù)于那個中斷之后還要返回SysTick處理完才能輪得到別的任務(wù)換任務(wù)的操作如果塞在SysTick里會把整個中斷時序搞亂。PendSV的“低優(yōu)先級”特性恰好把切換動作推遲到所有中斷處理完之后避免嵌套地獄。2.3 就緒隊列的檢索位圖比鏈表快一個數(shù)量級找“當(dāng)前最高優(yōu)先級的就緒任務(wù)”這個操作在每次調(diào)度時都會執(zhí)行必須盡量快。我見過最簡單粗暴的寫法是從0到最大優(yōu)先級數(shù)遍歷一遍找到第一個非空隊列。如果優(yōu)先級總數(shù)就8個、16個那這種線性掃描完全夠用。但如果你想做一個稍微像樣的內(nèi)核位圖法是更專業(yè)的做法。思路是這樣的為每個優(yōu)先級維護一個非空的標(biāo)志位用一個32位整數(shù)就可以覆蓋32個優(yōu)先級。當(dāng)某個優(yōu)先級對應(yīng)的隊列有任務(wù)時對應(yīng)位置1。檢索最高優(yōu)先級就緒任務(wù)時只需要把整個就緒位圖取出來然后數(shù)出最低位為1的位置或者直接查一張預(yù)計算的表。數(shù)前導(dǎo)零的指令在Cortex-M上是一條指令搞定的比遍歷快得多。我實際在項目里用一種拆分位圖的方式第一層是優(yōu)先級組位圖32位對應(yīng)32個優(yōu)先級組每個組內(nèi)部還有第二層位圖表示該組內(nèi)有任務(wù)的具體任務(wù)編號。這樣兩層位圖配合可以應(yīng)對大量任務(wù)而不拖慢檢索速度。優(yōu)先級數(shù)量不多時不需要做兩層一層就夠。就緒隊列的插入與刪除有個細(xì)節(jié)在任務(wù)切換時當(dāng)前任務(wù)如果只是被搶占它的狀態(tài)應(yīng)該回退到就緒態(tài)并放回就緒隊列如果是主動延時退出運行則放到阻塞態(tài)不進就緒隊列等延時結(jié)束再插入。這個區(qū)分判斷錯了調(diào)度器就會把已經(jīng)阻塞的任務(wù)又調(diào)度上去跑白白消耗CPU。2.4 臨界區(qū)保護別讓調(diào)度器自己打斷自己調(diào)度器內(nèi)部修改就緒隊列、TCB鏈表這些共享數(shù)據(jù)結(jié)構(gòu)時必須保證操作的原子性。問題在于中斷隨時可能觸發(fā)一旦中斷里也去操作同一個就緒隊列就緒鏈表就可能被撕成兩截狀態(tài)錯亂任務(wù)就再也切不回來了。最常見的保護手段是關(guān)中斷。進入臨界區(qū)前調(diào)用關(guān)閉中斷的指令操作完再打開。在Cortex-M上最粗暴的寫法就是直接操作PRIMASK寄存器把全局中斷全關(guān)了。這種寫法保護效果最好但關(guān)中斷的時間一長系統(tǒng)的實時性就會被摧毀關(guān)鍵外部中斷響應(yīng)會延遲幾個微秒都正常。更優(yōu)雅的做法是BASEPRI寄存器操作只屏蔽優(yōu)先級低于某個閾值的中斷高優(yōu)先級的中斷比如電機控制FOC采樣依然可以響應(yīng)。操作系統(tǒng)的內(nèi)核源碼里經(jīng)常提到“鎖調(diào)度器”而不是“鎖全局中斷”指的也是類似思想——中斷還能進但它進不去會改動內(nèi)核數(shù)據(jù)的API從而保持內(nèi)核數(shù)據(jù)安全。另外有一個必須提醒的點中斷服務(wù)函數(shù)里不應(yīng)該調(diào)用帶阻塞性質(zhì)的調(diào)度API。中斷上下文里沒有任務(wù)的概念調(diào)用類似“任務(wù)延時”的函數(shù)會把當(dāng)前任務(wù)掛起但實際上當(dāng)前執(zhí)行流并非任務(wù)最終結(jié)果大概率是內(nèi)核自己卡死。后面排查章節(jié)我會給一個具體場景。3. 從0到1實現(xiàn)一個最小搶占式調(diào)度器3.1 創(chuàng)建任務(wù)時的“偽現(xiàn)場”設(shè)計任務(wù)創(chuàng)建是整個調(diào)度器里最巧妙的一步。一個新任務(wù)從來沒有運行過它沒有“現(xiàn)場”可以保存但我們希望調(diào)度器第一次切換到它的時候像切換老任務(wù)一樣直接“恢復(fù)現(xiàn)場”就好。思路是創(chuàng)建任務(wù)時在它的私有棧里人為構(gòu)造一個跟“剛被中斷打斷”一模一樣的假現(xiàn)場把棧指針指向這個假現(xiàn)場之后調(diào)度器用通用的恢復(fù)流程就能順理成章地把新任務(wù)跑起來。在Cortex-M上任務(wù)入口函數(shù)的地址放在假現(xiàn)場的PC位置程序狀態(tài)寄存器xPSR里要預(yù)置Thumb模式位這一個bit忘掉就是災(zāi)難CPU恢復(fù)這個任務(wù)時默認(rèn)為ARM模式很多MCU并不支持從異常返回直接進ARM模式于是硬故障立刻觸發(fā)。R0位置放任務(wù)參數(shù)LR位置放一個用于任務(wù)結(jié)束的兜底函數(shù)地址或者直接放一個死循環(huán)函數(shù)保證任務(wù)哪怕跑完了也不會失控往下亂跳。核心代碼類似這樣void task_stack_init(tcb_t *tcb, void (*entry)(void *arg), void *arg) { uint32_t *p (uint32_t *)((uint32_t)tcb-stack_bottom tcb-stack_size); *--p (uint32_t)0x01000000; // xPSR: 必須置Thumb位 *--p (uint32_t)entry; // PC: 入口地址 *--p (uint32_t)task_exit_handler; // LR: 返回兜底 *--p (uint32_t)0xFFFFFFFD; // 異常返回使用的EXC_RETURN *--p (uint32_t)arg; // R0: 參數(shù) *--p 0x00000000; // R3 *--p 0x00000000; // R2 *--p 0x00000000; // R1 *--p 0x12121212; // R12 // 下面是PendSV里需要軟件保存的寄存器 *--p 0x11111111; // R11 *--p 0x10101010; // R10 *--p 0x09090909; // R9 *--p 0x08080808; // R8 *--p 0x07070707; // R7 *--p 0x06060606; // R6 *--p 0x05050505; // R5 *--p 0x04040404; // R4 tcb-sp p; }有幾個值不是隨便寫的。EXC_RETURN的值必須是0xFFFFFFFD它告訴CPU“返回線程模式并且使用PSP進程棧指針”這是用MSP和PSP分離的典型RTOS設(shè)計。每個任務(wù)跑自己的私有棧而中斷服務(wù)函數(shù)統(tǒng)一用主棧這樣任務(wù)?;ハ喔綦x一個任務(wù)棧溢出不會立刻污染另一個任務(wù)的現(xiàn)場。3.2 SysTick與PendSV的配置優(yōu)先級不能搞反時基我習(xí)慣選SysTick因為它本來就是設(shè)計給操作系統(tǒng)用的周期定時器。Cortex-M內(nèi)核里SysTick定時器有獨立的寄存器配置周期可以這樣算假設(shè)系統(tǒng)時鐘72MHz要1ms中斷一次那么重裝載值就是72000000除以1000再減1即71999。如果系統(tǒng)時鐘更高比如168MHz那重載值是167999。這個計算是純數(shù)學(xué)但很多人會忽略SysTick的時鐘源可能不同于系統(tǒng)時鐘在部分芯片上SysTick用的時鐘可能是系統(tǒng)時鐘的分頻值必須查對應(yīng)芯片手冊確定否則你配置出來的tick周期跟預(yù)期差好幾倍。NVIC里PendSV和SysTick的優(yōu)先級配置決定調(diào)度是否正常。我的配置習(xí)慣是SysTick優(yōu)先級中等偏下PendSV優(yōu)先級設(shè)為最低數(shù)值最大。這樣做的好處是SysTick中斷即使發(fā)生時CPU正在跑更緊急的中斷服務(wù)也不會立刻打斷而PendSV永遠(yuǎn)最后一個執(zhí)行保證切換動作在所有中斷服務(wù)都處理完畢之后干凈開展。SysTick中斷服務(wù)函數(shù)要做的事情很簡單就三件全局tick計數(shù)加一遍歷所有阻塞態(tài)任務(wù)把它們的delay_ticks減一減到零就移入就緒隊列然后檢查當(dāng)前運行任務(wù)是否還有時間片、是否有更高優(yōu)先級就緒任務(wù)有則置PendSV掛起位觸發(fā)切換。3.3 任務(wù)延時與主動切換的鏈路任務(wù)延時是最基礎(chǔ)的阻塞操作。它把當(dāng)前任務(wù)從就緒隊列摘下來狀態(tài)改成阻塞態(tài)給delay_ticks賦一個目標(biāo)值然后立即觸發(fā)一次調(diào)度。注意這里必須觸發(fā)調(diào)度因為當(dāng)前任務(wù)自己阻塞自己之后CPU不能停留在任務(wù)里繼續(xù)往下跑必須馬上切到別的任務(wù)。對接下來的SysTick中斷來說每次tick都對阻塞任務(wù)統(tǒng)一做減法操作減到零就恢復(fù)就緒。這種實現(xiàn)方式簡單可靠但有個效能問題如果任務(wù)數(shù)量很多每個tick都遍歷全部任務(wù)列表并且延時是比較稀疏的事件那大部分遍歷都是無效的。更高效的辦法是維護一個按延時到期時間排序的定時器隊列每個tick只檢查隊首的最近到期任務(wù)。不過對學(xué)習(xí)用的最小調(diào)度器來說線性遍歷足夠清晰方便你觀察整個調(diào)度鏈路的運轉(zhuǎn)。任務(wù)主動讓出CPU也就是時間片輪轉(zhuǎn)的同優(yōu)先級切換實現(xiàn)上比搶占更簡單直接把當(dāng)前任務(wù)放回就緒隊列尾部然后觸發(fā)調(diào)度即可。這樣的結(jié)果是同優(yōu)先級任務(wù)輪流跑每個任務(wù)跑一個時間片。這個功能在代碼里通常叫task_yield。3.4 一個可以直接抄作業(yè)的完整用例寫一個最小系統(tǒng)的初始化與調(diào)度啟動流程用偽代碼描述更直觀int main(void) { // 初始化硬件時鐘、串口、LED引腳等 board_init(); // 創(chuàng)建兩個任務(wù) task_create(led_flash_task, NULL, 2, 256, tcb_led); task_create(uart_report_task, NULL, 1, 512, tcb_uart); // 設(shè)置SysTick 1ms中斷PendSV最低優(yōu)先級 systick_config(1000); nvic_set_priority(PendSV_IRQn, 0xFF); // 啟動調(diào)度器永遠(yuǎn)不會返回 scheduler_start(); }scheduler_start做的事情是找到當(dāng)前最高優(yōu)先級就緒任務(wù)把它的棧指針裝載到PSP然后把CONTROL寄存器的bit1置位從線程模式切換到使用PSP最后觸發(fā)一次異常返回指令讓CPU跑起來。這之后CPU就不會再按main里的順序往下走了而是完全由任務(wù)與中斷驅(qū)動。兩個任務(wù)的內(nèi)容可以非常簡單void led_flash_task(void *arg) { while (1) { led_toggle(); task_sleep(500); // 阻塞500個tick即500ms } } void uart_report_task(void *arg) { uint32_t count 0; while (1) { printf(count: %lu\n, count); task_sleep(1000); } }串口任務(wù)優(yōu)先級比LED任務(wù)高所以調(diào)試時你能看到的現(xiàn)象是兩個任務(wù)都能按各自周期運行即使其中一個任務(wù)內(nèi)部有長時間計算另一個任務(wù)也不會被拖垮因為SysTick每1ms就會檢查一次是否需要搶占。4. 實測中的常見問題與排查方法4.1 任務(wù)跑飛或進入HardFault這是新人寫調(diào)度器最常撞的墻沒有之一。我印象最深的一次所有任務(wù)建好以后調(diào)度器一啟動就進HardFault跟著調(diào)試器看了半天才意識到任務(wù)初始棧里xPSR的Thumb位沒置位。調(diào)這種問題沒有捷徑基本是靠調(diào)試器和細(xì)心。排查步驟我建議固定順序。先用調(diào)試器打開HardFault Handler查看異常的出入棧內(nèi)容特別是壓棧保存的PC值這個PC大概率就是錯誤發(fā)生前的執(zhí)行位置。如果PC指向一個很離譜的地址優(yōu)先懷疑棧指針錯亂如果PC指向0xFFFFFFFF那基本是異常返回指令的EXC_RETURN設(shè)置錯了如果PC指向內(nèi)存里的隨機區(qū)域就要去檢查當(dāng)前任務(wù)棧底有沒有被踩穿過。棧溢出檢測也很實用。在每次上下文切換保存現(xiàn)場之后檢查當(dāng)前任務(wù)棧指針sp有沒有越過stack_bottom邊界如果越界就給一個錯誤標(biāo)志并停下來。我實際用下來這個方案能有很高的捕獲率特別是配合在每個任務(wù)棧首尾填充固定魔數(shù)比如0xDEADBEEF在切換時檢查魔數(shù)有沒有被改寫立刻就能知道誰在偷吃鄰居的棧空間。4.2 調(diào)度不切換或者切換時機錯亂表現(xiàn)是任務(wù)A一直在跑任務(wù)B永遠(yuǎn)輪不到或者任務(wù)每次切換都比預(yù)期慢很多。出現(xiàn)這種情況先查NVIC的優(yōu)先級配置。一個典型錯誤是SysTick和PendSV優(yōu)先級配反了——PendSV優(yōu)先級比SysTick高那么SysTick中斷觸發(fā)后還沒完成它該做的標(biāo)志量更新PendSV就搶著切換了最終切換到的可能是還沒完全就緒的任務(wù)整個系統(tǒng)邏輯亂套。還有可能是調(diào)度請求根本沒有被觸發(fā)。我見過一種情況任務(wù)延時函數(shù)里確實調(diào)用了調(diào)度觸發(fā)但忘了把當(dāng)前任務(wù)從就緒隊列移除結(jié)果當(dāng)前任務(wù)延時期間依然被調(diào)度器選中運行于是它自己切給自己看起來就像調(diào)度死了一樣。排查時可以在PendSV入口和SysTick入口各放一個全局變量計數(shù)器每次進入都自增。用調(diào)試器觀察這兩個值如果SysTick一直在加但PendSV一直零說明掛了切換請求但PendSV沒響應(yīng)如果兩個都在加但任務(wù)就是不切換去查TCB的sp更新是否成功。4.3 優(yōu)先級反轉(zhuǎn)問題優(yōu)先級反轉(zhuǎn)是搶占式調(diào)度里一個經(jīng)典的副作用。場景是三優(yōu)先級的任務(wù)低優(yōu)先級任務(wù)C拿到了一個互斥信號量正在執(zhí)行臨界區(qū)代碼高優(yōu)先級任務(wù)A等著這個信號量被阻塞中優(yōu)先級任務(wù)B不需要信號量持續(xù)就緒。結(jié)果A雖然優(yōu)先級最高卻只能等C跑完釋放信號量而C被B搶占得不到CPU整個系統(tǒng)看起來就像“中優(yōu)先級任務(wù)把高優(yōu)先級任務(wù)堵死了”。實際調(diào)試中優(yōu)先級反轉(zhuǎn)的直接表現(xiàn)是高優(yōu)先級任務(wù)的關(guān)鍵動作周期性超時。解決辦法的主流方案是優(yōu)先級繼承當(dāng)?shù)蛢?yōu)先級任務(wù)持有信號量且高優(yōu)先級任務(wù)在等待時把低優(yōu)先級任務(wù)的優(yōu)先級臨時提升到等待者的優(yōu)先級執(zhí)行完臨界區(qū)再恢復(fù)。更簡單粗暴的方案是優(yōu)先級天花板進入臨界區(qū)直接把任務(wù)優(yōu)先級提到一個預(yù)設(shè)的天花板值。這兩個方案我建議作為調(diào)度器的后續(xù)擴展編寫它們能讓你加深對“優(yōu)先級只是相對概念”的認(rèn)知。4.4 中斷里調(diào)用阻塞API導(dǎo)致內(nèi)核掛死場景是這樣的外部中斷服務(wù)函數(shù)里為了等待某個條件直接調(diào)用了任務(wù)延時函數(shù)。視覺上是中斷服務(wù)函數(shù)正常執(zhí)行但內(nèi)部它試圖把“當(dāng)前任務(wù)”從就緒隊列移除并觸發(fā)調(diào)度。中斷上下文里所謂的當(dāng)前任務(wù)還是被打斷前那個任務(wù)把無辜的任務(wù)移到阻塞隊列之后調(diào)度器回頭發(fā)現(xiàn)那個任務(wù)在延時中就徹底不知道該運行誰了。我自己踩過這個坑以后給工程定了一條規(guī)矩中斷服務(wù)函數(shù)里的處理邏輯越短越好寧可只做“置標(biāo)志、丟事件、喚醒任務(wù)”把業(yè)務(wù)邏輯全部搬到任務(wù)里做。喚醒操作本身只是把等待信號量的任務(wù)放入就緒隊列這個操作必須做到原子性同時它不會阻塞中斷是中斷與任務(wù)通信的唯一正確姿勢。這類問題還有一個很隱蔽的變種在關(guān)中斷的臨界區(qū)里調(diào)用調(diào)度API。臨界區(qū)已經(jīng)關(guān)了全局中斷調(diào)度觸發(fā)要求PendSV立即掛起但PendSV的中斷優(yōu)先級此時也被屏蔽了切換請求只能干瞪眼等著。解決這類問題的思路是臨界區(qū)里只做對內(nèi)核數(shù)據(jù)的快速修改離開臨界區(qū)之后再統(tǒng)一處理調(diào)度請求。最后分享一個調(diào)試小技巧手寫調(diào)度器看代碼不如看波形。我在全局搞一個調(diào)試用的GPIO在任務(wù)切換函數(shù)里讓這個引腳翻轉(zhuǎn)一次用示波器或邏輯分析儀掛著每個方波下降沿就是一次切換事件。這樣你不用打斷程序運行就能直觀看到調(diào)度器是不是在穩(wěn)定工作切換頻率有沒有異常比單步調(diào)試省太多時間。還有一個值得注意的細(xì)節(jié)是任務(wù)延時函數(shù)的參數(shù)如果按tick數(shù)算不同芯片、不同系統(tǒng)時鐘下同樣的參數(shù)實際延時時間不一樣所以設(shè)計API時最好按毫秒為單位傳入內(nèi)部再換算成tick數(shù)這樣上層代碼移植的時候才不會出錯。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
熟女激情综合网| 男人把坤坤插入女人的下体| 男女啊啊啊啊啊| 真实高潮91| 久久精品国产亚洲AV无码做| 婷婷久月| 噜噜瑟| 亚洲 欧美 中文 日韩超碰| 伊人久久综合影院| 日韩射精| 欧美亚洲韩国视频十五区| 91日日| 久色网| 天天干天天舔| 97天天日| 色五月AV| 亚州欧美在线| 中国熟女91| 96AV久久久| 免费看久久久性性| 亚洲天堂中文字| 亚洲色图欧美一区二区不卡| 屁股久久久久久| 色色97爱| 久久东京热成人| 欧美91在线+|+欧美| 97干日韩| 亚洲情色电影网| 99热在线观看| 免费视频a级毛片免费视频| 精品国产无码中文| 日韩欧美成人午夜福利| 伊人丁香五月婷婷| 亚洲性爱成人| 亚洲日韩视频二区| 成人免费福利网站国产| 五月天激情小说| 亚洲偷拍自拍在线视频| 亚洲码专区| 岛国激情视频在线观看| 国产精品久久久久久片| 91亚州日韩高清| 91久久久久久久| 欧美顶级黄片AAAAA在线免费看| 日韩av不卡在线观看| 人妻一区视频| 手机在线看片免费人成视频| www.99视频| 婷婷丁香五月综合| 丰满人妻-区二区三区免费| 国产做?爰片久久毛片?片美国| 麻豆啪啪啪视频| 99re国产中文字幕| 久久久工口| 刺激性视频黄页| 亚洲丝袜B诱惑| 91天射| 青青草国产一区二区三区| 啊啊啊啊好大好硬啊啊啊啊啊| 视频在线97| 久色网| 国产操逼网站亚洲一级黄色| 精品九九九九九九| 色婷婷一区二区三区久久| 大学生美女口爆| 91色人妻| 成人三一级一片aaa| 特级丰满少妇一级AAAA爱毛片| 丁香啪啪| 骚女高跟AV在线| 欧美性少妇| 日本视频在线中文字幕| 手机在线人成免费视频| 人人超碰在线观看黄| 亚洲第91页 | 日日干男人的天堂| 热热色青青草| 成人三一级一片aaa| 99只有精品| 久久动漫精品视频这里只有精品| 美女上床网站| 超碰97人妻免费在线| 伊人久久综合精品欧美| 久久亚洲不卡| 午夜久久久| 777超碰| 亚洲av无码成电影在线播放| 久久五月丁香| 亚洲精品97中文字幕| 麻豆成人影音在线| 日韩成人大片一区二区| 偷拍亚洲高清图片| 传媒在线观看一区二区三区| 2019久久久久久久久福利| 婷婷久久久| 国产美女激情| 国产精品人妻无码久久久互動交流 | 校园春色亚洲色图| 手机在线观看不卡无码av| 国产精品一区人妻精品阁在线| 无码视频一区二区| 欧美色青| 9九九九九视频在线观看| 欧美 日韩 婷婷 五月| 大香蕉狠狠爱| 国内三级自拍小视频在线观看| 亚州精品丝袜-不卡成人免费| 综合欧美色图| 视频在线观看一二三区| 夜夜爽夜夜| 91在线精品| 久久中文色图| 国产无码久久高清| 图色综合网| 九九热三级片| 91超级碰碰| 伊人久大| 操一区| 可以在线观看的黄色网址| 99国产人成精品| 亚洲性高潮| 丁香五月影院| 99国产女人| 中文字幕在线免费观看视频| 丝袜美腿操av| 九九九九九九九精品视频| 久久婷婷一区| 爽爽淫人网| 精品久久97| 麻豆国产尤物AV| 91人妻人人澡人人爽人人精品| 久久精品性| 96超碰网| 狠狠图片青青草| 国产精品网址| 国产精品久久久久久夜夜夜夜| 国产成人精品必看 | 久久婷婷苹果| 色吧综合网| 一区二区三区一亚洲中文字幕、综合区灬 | 国产成人综合网| 99热这里都是精品| 久久久性爱视频| 国产性爱在线视频一区二区| 亚洲天天影视色综合| www..com操老师| 欧美日本国产日韩激情视频| 丰满人妻一区二区三区免费 | 啊啊啊啊在线播放| 精品一区二区啪啪啪| 99re98| 久久久999网站| 国产又粗又大硬免费色网视频| 蜜臀亚洲中文| 久久久久九九九| 人妻精品一区二区三区| 日韩欧美丝袜诱惑| 欧美黑人性猛交91| 欧美精品日韩久久久九| 91人妻人人澡人人爽人人精品| 有码免费观看| 欧美一区二区亚洲天堂| 大色综合| 亚洲男人天堂视频| 色精品极品| 淫荡少妇免费| a片自拍直播视频| 亚洲一区制服诱惑| 中日无幕一二三四区| 欧美极品性爱天天射| a啊啊啊啊啊啊啊啊一区二区| 亚洲男人天堂Av| 无码免费在线观看黄色片| 夜夜嗨免费视频| 丰满人妻-区二区三区免费| 色综合V| 一二三区精品视频| 欧美日韩国产人人| 亚洲中文制服诱惑| 啪啪啪综合网| 国语对白在线播放视频| 蜜臀无码视频在线观看| 激情五月天婷婷| 国产精品日本无码A片| 久久综合久色欧美综合狠狠| 亚洲人在线成线成人| 影音先锋中文字幕日本好一区二区| 成人免费性爱视视| AV女资源| 成人小电影网站tex| 97操在线| 国产精品久久久久久夜夜夜夜| 久久精品欧美一区蜜桃| 五月丁香婷婷色| 精品中文字幕一区二区| a片 xxxx受爽视频| 欧美综合色,www| 免费97视频| 亚洲码和欧洲精品激情系列| 啊啊啊啊啊操我视频| 人妻少妇一区二区| 极品内射| 日韩中文字幕宗合在线| 亚av顶级裸体一区二区三区四区五区 | 欧美色干| 中文字幕在线免费观看| 超碰九7免费| 国产深喉| 97资源亚洲| 9Ⅰ老熟女| 亚洲综合色男人网| 性欧美另类高清| 色婷婷久久| 啊视频在线| 激情四射五月天| 亚洲国产欧美中日韩成人综合视频| 国产成人午夜视频网址| 日本成人电影资源网| 老司机深夜18禁污污网站| 国产精品不卡高清在线观看| 天天谢天天干| 亚欧高清v| 99综合免费视频| 天天干天天做| 荡小穴在线观看| 97久精品| 男人把坤坤插入女人的下体| 久久精品操| 抽插亚洲无码| 久久久久亚洲| 五码视频在线观看| 国产亚州高清国产拍精| 一级性爱aaaa| 99.色网| 精品然女一区二区| 91欧美巨乳| 好湿好紧视频| 韩国免费播放一级毛片| 在线无码视频| 国产精品色| 久久久久精| 人妻插插人妻人| 97精品97| 高清视频一区| 爱妻综合网| 中文字幕熟女人妻丝袜丝| 男女啊啊啊| 日本羞羞的视频在线播放| 国产女人与拘做受视频免费| 久草免费在线一区二区| 熟女性视频| 97这里都是精品| 蜜桃臀AV在线| 18禁无码永久免费无限制| 国产精品999zyz| 国产玖玖| 久久久神马影院| 淫荡网址| 强免费黄色网址| 色婷婷综合久久久久中文一区二区| 操淫穴亚洲五月丁香 | 97伊人网| 91在线无码精品秘 软件| 综合网,亚洲,欧美| 综合情欲网| 成人午夜高潮av猛片| 亚洲激情在线一区二区| 色九九九九| 色色九区| 五月婷婷大香蕉| 亚洲Av噜噜一区二区三区妖精| 日韩啪啪视频| 竹菊影视国产一区二区| 校园春色中文字幕AV| 五月综合激情| 天天干夜夜| 久久久久亚洲熟妇熟女| 色色婷婷五月| 婷婷20月天青娱乐| AAAAAAAAA黄片| 婷婷五月天无码| 日本506070| 日本3级一区二区免费| 嗯嗯,好大,好爽,好骚| 国产一级高清免费观看| 99在线免费观看| 日韩本不卡视频在线观看 | 久草综合视频| 中文字幕精品免费一区二区| 1024亚洲中文字幕久在线看片你懂的| 97综合在线| 人妻熟女一区在| 蜜臀久久99精品久久久久久成人小说| 亚洲天堂 视频你懂的| 色臀aV| 一区操逼日比视频| 国产天天噜一噜久久久| 最新日产中文在线麻豆| 国产视频97| 粉嫩av在线一区二区| 99精品久久久久久| 黑丝自慰喷水网站| …中文字幕亚洲乱,97人妻无码费视…| 国产99精品一区二区三区免费| 超碰 另类 欧美 | 欧美色图校园春色| 综合网色| 伊香蕉综合久久久久久久噜噜噜 | 亚洲激情欧美色图| 人人爱操| 秋霞怕怕片| 色综合潮| 国产偷拍自拍在线视频| 国产suv一区二区三区6| 天天流夜夜操| 国产精品麻豆免费视频| 嗯嗯啊啊的视频| 欧美网站免费| 激情欧美97| 暖暖精品二区三区观看| 亚洲天堂中文字| 天天舔天天日天天射| 亚洲成熟国产精品美女| 日韩大香蕉AV影片| 99re这里只有精品3| 久久成年片色大黄全免费网站| 高清不卡国产| 国产日本久久免费精品| 美女操逼A A| 久久久久921| 九九久久综合| 成人av性爱电影在线观看| 欧美成人色| 国产一级αv免费看片| 97综合久久| 日日夜夜噜| 我爱大香蕉| 欧美欧美啪啪视频| 97视频播放| 亚洲成人色情五月天丁香花| 99视频自拍| 男人女人18禁片免费看网站| 欧美第五页| 嗯嗯,啊啊,国产精品| 人妻81p| 99在线精品视频| 亚洲天天影视综合网| 影音先锋中文字幕日本好一区二区| 亚洲视频精选| 欧美综合网站999| 亚洲网自拍| 欧美一级色| 做爱A级亚欧| 久久久久久久九九九九| 欧美日韩国产人人| 蜜桃视频精品一区二区三区| 日本中文字幕在线电影| 日熟女| 色香综合| 人人妻人人澡人人爽人人精品浪潮| 国产精品制服丝袜中文字幕日韩一区二区三区 | 欧亚性爱啪啪| 69av一区二区三区| 成年人黄色| 黄站在线免费观看| 日韩精品人妻中文字有码在线 | 精品免费一区| 97神马久久| 综合天天。| 另类 综合 日韩 欧美 亚洲| 超碰午夜在线| 蜜臀AV一区二区三区激情综合| 日韩av影片在线观看| 亚洲国产精品99久久久| 色黄污美女啪啪啪免费网站| 亚洲本色精品一区二区久久| 亚洲欧美日韩偷拍色图| 9久精品| 60秒不遮不挡| 亚洲视频精选| 插入逼91| 网站A V在线| 蜜桃av色偷偷av老熟女| 91香蕉国产尤物视频| 欧美亚洲首页| 中文字幕97| 少妇久久久久久久| 日韩福利电影网| 深夜福利黄片| 婷婷色色五月天福利| 亚洲欧美日韩偷拍色图| 国产精品女aA片爽爽视频| 97在线视频免费观看| 加勒比海人人操超碰在线| 午夜传煤十二区精品| 天天射天天色成人| 中日韓欧美高清| 97超碰色色| 免费人成毛片乱码| 国产精品露脸在线观看| 亚洲91在线播放影院| 无码最新| 五月丁香六月激情综合| 天天享受天天看| 亚洲网污污污污| 超碰色美女| 日韩综合97p| 91中文字幕| 乱操乱伦AV| 国产精品美女久久久久AⅤ国产馆| 久久黄色性爱视频| 精品-91人妻子系列| 防屏蔽在线视频| 日韩精品高清资源在线| 欧亚揄拍偷拍精品视频| 欧美亚洲手机在线| 蜜臀AV秘一区翔田千里| 怡红院一区二区熟女人妻| 色色色综合网| 国模不卡一本二本三电影| 亚州综合AⅤ| 激情文学小说一区二区| 色五月AV| 黑人无码一区二区| av婷婷色网| 综合97久久| 超碰2017| 亚洲中文字母在线播放| 天天做天天爱天天爽AV| 92大香蕉| 一二三四视频中文字幕在线看| 亚洲乱码尤物193YW| 偷拍伦理视频| 操死我了啊啊啊| 97极品无码| 国产综合网站在线播放| 亭亭丁香激情| 99re这里只有精品2| 日天天九九天堂666| 999熟女精品| 精品久久久久综合无码| 婷婷在线视频在线观看| 欧美中出1| 国产传媒美日韩av| 99精品人妻| 黄色性爱网网| 欧美香蕉视xxx| 九九九不卡| 在线观看高清AV| 国产精品交换一区二区| 夜夜嗨一区二区三区三州加勒比| 日韩高清黄片| 久视频在线观看| 大香蕉草草| 26uuu国产成人综合| 蜜臀人妻少妇久久在线观看| 色妇综合网| 亚洲AV成人无码一区二区三区在线观看 | 96超碰网| 久久精品成人| 成年女人黄网站| 骚乳在线| 麻豆国产视频精品观看| 国产美女91视频| 男人天堂电影院| 91精品久久久久久综合五月天| 97久久国产亚洲精品超碰热| 国产精品无码久久久久2028| 超碰在线97国产| 国产精品视频自拍在线| 蜜桃精品视频一区| 免费观看国产不卡av| 91久久国产综合精品| 三级日韩一区二区三区| A啊啊在线观看| 国产肏逼网站| 男人的天堂在线| 国产AV精久久| 死我十八禁| 亚洲欧美国产其他二区| 久久亚洲一区二区色婷婷| 五月丁香激情综合| 亚洲精品欧洲色| 丁香五月天视频| 日韩欧美女求操每天更新| 高清国产av无码| 97视频免费播放| 九九热免费国产视频婷婷伊人五月 | 国产精品久久发布| 亚洲欧洲日韩天堂av| 一区二区视频你懂的| 国产宅男宅女在线观看| 懂色av中文字幕一区二区三区天美| 免费亚洲黄色视频在线观看| 久久久一二三四区| 97精品国产97久久久久久户外免费| 国产亚洲色婷婷久久99精品91 - 百度| 国产精品情侣啪啪| 日本无码1| 九九热re99re6在线精品| 精品一区二区三区蜜桃臀赵总 | 91人妻丝袜无码| 亚洲AV成人无码一二三久久| Aa东京男人的天堂| 免费视频无码| 97超久碰| 国产一级αv免费看片| 人人妻人人爽一区二区三区| 精品人妻夜夜草| 太久视频| 搡老女人911熟妇老熟女| 超碰午夜| 美女露胸露屁股| 多毛小伙内射老太婆| 久热最新在线杭州| 亚洲性图91| 26uuu国产| 强奸乱伦免费网站| 国产精品农村妇女| 色阁阁AV综合网| 嗯嗯啊在线视频| 黄骗免费| 欧美欧美啪啪视频| 美女91在线| 亚州高清av| 99r九九| 国产福利第一视频| 日韩欧美成人综合在线| 久9九综合在线| 智利AV在线网| 欧美夜色| 激情露脸爱| 91精品国产麻豆国产自产在| 天天激情干| dy888午夜老子影视达达兔| 国产又大又粗又长视频| 欧美日本天堂| 少妇诱惑视频| 大香蕉免费中文| 被体育老师抱着c到高潮| 精品无码久久久久久国产浪潮| 亚洲男人天堂AV| 伊人96在线| 东北女人| 色诱avtt| 欧美少妇第一页| 天天日日舔舔| 久久这里只有精品9| 本道在线| 性交一区二区在线播放| 91性感网站| 欧美视频第二页| 久热久一区二区三区| 亚洲天堂区| 99∨VTV| 色婷婷丁香五月| 天天干,夜夜爽| 色综合99| 91无码中出人妻视频| 97精品综合久久| 中文字幕jul-617人妻熟女| 东亚亚洲无码高清| 日本理论在线| 婷婷五月天成人网| 99精品无码| 亚洲五月丁香花狠狠干一区二区三区 | 激情久久av一区av二区av| 操逼片中文| 无码乱人伦中文视频| 亚洲无码?第一页| 夜嗨影院| 日本天天操| 熟女人妻久久中文字幕一二区| 99热久| 999日韩中文精品观看视频。| 欧美嗯啊……在线观看视频免费| 九九热免费国产视频婷婷伊人五月 | 欧美日韩丝袜| 国产一区二区三区不卡手机在线| 国模不卡一本二本三电影| 97视频www| 久久禁| 好爽免费视频| 中文字幕乱码人妻二区三区| 操逼操网| 艹我哪美一区无码| 中国黑人三级片网站上区| 是还免费视频1727我| 超碰在线综合97| 日本媚薬中文字幕在线| 天天干天天舔| 国产AV高清AV无码| 91美女视频| 国产美女销魂在线观看不卡| 精品v日韩欧美国产| 五月香婷婷| 操操操操网黑人| 玖玖资源视频一区二区三区| 国产高清自拍视频| 欧美日韩 强奸乱伦| 丁香婷婷色五月| 亚洲第一色页夜| 女人18精品一区二区三区| 超清中文乱码字幕| 亚洲天堂人妻熟妇视频| 殴美,日韩国产伦精品| 色网1| 免费国产视频| 国产 v乱码一区二| 国产五码丝袜屁眼| 男同专区一区二区三区在线| 精品欧美А∨无码黑人大荫蒂| 亚洲激情综合| 嗯~啊~快点 死我视频免费看网站| 夜夜躁狠狠躁日日躁av| 精品亚洲黄色片 国产精品导航一区二区| 久久五月天婷婷| 91超碰碰在线| 91在线精品一区二区三区| 综合色99| 韩日自拍| 欧美性爱第一区| 女色视频社区| 综合少妇网| 操逼无码一区| 久久、1234| 国产1024在线播放| 91在线色综合| 久久粉色| 97人人草| 精品免费囯产一区二区三区| 操B在线观看| 久久久久久久久久久999| 色逼综合| 天美传媒av 在线| 亚洲色电影在线| 黄网在线播放| 91女色| 自拍鲍鱼一区在线高清观看免费| 国产女人9999| 顶级丝袜熟女一区二区三区| 久久日本熟女精品一区| 黄色av网站在线播放| 三上制服丝AV| 国产多人在线观看视频| 九九热超碰97亚洲最新香蕉| 久久亚洲中文字幕视频| 91精品人妻一区二区三区蜜桃臀| 少妇久久| 丝袜综合| 亚洲精美粉嫩嫩泬在线观看| 在线观看午夜婷婷久久久久清性观看| 欧美性爱日韩性爱| 97视频新免费| 静品嫩模一区二区| 日日躁夜夜躁狠狠躁超爽| 狠狠狠狠狠干| 蜜臀在线视频| 日韩人妻网站| 亚洲制服aⅴ中文字幕| 欧美激情久| 99久久精品无码一区二区| 91无摭挡| 久久乐| 久久精品一区二区一8| 日本天堂网| 操婢日韩| 蜜桃网熟妇| 夜色五月天| 亚洲 小说 欧美 激情 另类| 东京热熟女亚洲视频网站| 首页中文字幕中文字幕免费| 97在线视频免费看| 精品大久久| 日韩欧美成人综合在线| 午夜视频久久久| 欧美日韩国产传媒在线精品| 日本十八禁免费看污网站| 隔壁邻居波多野结衣中文字幕| 日韩丝袜高跟制服在线观看| 日韩中文字幕二区| 人人操,人人液| 九九九九九九九九九五码| 一区二区三区精品视频| 91亚洲综合| 少妇内射www在线观看视频| 能直接看AV的网站| 国产品精品自在在线午夜免费| 操B久久| 99性视频| 日本成人A片网站| 欧美韩日精品99综合| 美女露胸露尿口| 久久亚洲AV无码专区国产精品| 激情小说激情视频| 亚洲一二三| 亚洲一区深夜| 玖玖资源综合在线视频| 亚洲 暴爽 AV人人爽日日碰| 97视频新免费| 性色高清在线| 99色在线视频| 韩国一级AAA| 国产精品国产精品国产| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | www亚洲免费| 国语精品对白| 狠操91,com| 天天亚洲综合| 极品色社| 日本岛国黄色网址| 思思热久久成人| 欧美97| 91丝袜人妻| 亚洲色悠悠久久88| xxx亚洲午夜天堂| 五月丁香| 大香蕉久| 自拍偷拍2025在线观看| 99国产在线 精品 视频| 国产无码精品久久久久久| 97伊人超碰| 国产丸一视频| 91nbbbbbb| 欧美中文字幕一区 | 9999久久久久| 91老熟女老女人国产老太| 日本人妻一区二区| 人妻天堂综合网| 亚洲欧美经典一区二区 | 好舒服视频| 亚洲狼狼干综合1| 欧美性天天影视| 99热超碰在线| 日本道人妻久久久在线不卡色视频| 东北女人的毛片| 综精品久久久aaaa| 北条麻妃99精品青青久久| 东京热亚洲一区二区| 久久草大香蕉| 婷婷五月激情综合| 超碰99在线| 国产亚洲99久久精品| 久久99亚洲精品久久99果| 欧美性爱伊人| 欧美顶级黄片AAAAA在线免费看| 欧美黑人精品一区二区| 在线精品福利免费播放| 日本高清有码网址视频| 欧美很很操视频| 91|九色|国产熟女| 丁香五月性爱| 91麻豆天美国产欧美日| 国产蜜臀精品一区免费尤物| 国产精品青青草| 亚洲一二三精品久久网| 欧美黄色图片| 久久久99999久网站| 夜夜骑操视频| 91美女视频直播| 麻豆91熟妇人妻中文字幕茄子| 狠狠躁伊人中文字幕| 欧美综合另类| 日日操免费视频| 秋霞免费AV| 色色婷婷丁香| av优播| 久久国产精品熟女人妻| 少妇特黄一区二区三区| sewuyueav| 国产成人亚洲精品无码最新在线| 精品国产91av一区二区三区| 久久久免费的精品| 99热色精品| 日韩99神马视频片| 中文字幕一品色图| 91少妇| 久操凹凸视频| 天天爽天天操| 欧亚日韩三区| 5252色欧美在线男人的天堂| 免费操逼91| 51一区二区三区| 亚洲一区二区麻豆影院| 亚洲少妇色图自慰直播| 中文有码9| 18啪啪手机免费性爱| 国产伦精品一区二区三区在线观| 台湾佬中文娱乐自偷自拍| 国产1727欧美| 黑人综合网| 久久久亚洲欧美综合| 九九九九久久久| 中文字幕久久亚州无码| 极品色| 天天精品| 精品国产人成在线| 丁香激情五月天| 欧美精品双插| 大奶的诱惑| 91人妻素女| 天天弄欧美| 人人澡人人干| 强奸乱伦大香蕉网| 成人老鸭窝人人在线视频| 亚洲玖玖爱| 亚洲综合另类小说色区亚洲成av人片在www| 国产自偷自拍一区| 98精品国产乱码久久久久久| 综合夜夜| 激情丁香五月婷婷| 怡红院亚洲怡春院av| 午夜亚洲WWW湿好大| 午夜免费视频1000| 日韩欧美中文字亚洲慕| av天堂精品久久| 日韩二级| 国产日本一区二区三区蜜臀在线观看| 亚洲精品乱码久久久久久蜜桃麻豆| 69精品人人人人| 亚洲色图欧美色图另类图片| 超碰人人在线| 天天干人妻视频| 91强热人妻| 亚洲色图 图片| 午夜视频好爽啊| 9超碰免费| 国产家庭乱伦表演| 九九玖玖精品| 97操| 高清不卡国产| a片在线播放| 亚洲最大黄网| 91春色| 青青爽| 免费A片三p视频| 91逼逼女人91| 成人精品无码| 东北女人的毛片| 国产乱伦亚洲色图高清无码| 亚洲免费日韩在线一区二区| 少妇熟女1区2区3区| 有码人妻系列| 久久日韩精品一区二区| 97爱爱影院| 偷拍亚洲熟女视频播放| 久久伦理视频久久大香蕉视频| 欧美性爱无码一区二区三区| 亚洲熟久久| 欧美性巨大╳╳╳╳╳高跟鞋| 久久 久久国内精品亚洲| 久久99午夜精品一区人妻| 热热色青青草| 欧美日韩国产在线| 综合另类| 欧美激情久| 午夜福利视频在线一区| 久久久久久人| 69精品在线| 天天谢天天干| 天天情欲宗合网| 熟妇人妻丰满久久久久久久无码 | 美女好片色日本| 丝袜熟女2P| 欧美日韩性爱电影在线| 屁股久久久久久久久| 黑人黄片在线免费观看| 天天综合官网| 妇人噜噜| 91久久久久久久| 国语av狠狠色丁香婷婷综合激情| 麻豆AV96熟妇人妻| 日韩人妻 中文字幕| 国产白丝网站| 久久一留热品黄| 亚洲精品中文字幕一区在线视频| 蜜臀AV一区二区三区| 快点操死我| 秋霞曰韩R级| 欧美狠狠| 欧洲性人爱视频| 爆乳免费黄网站| 欧美熟女操屄| 99无码狠狠久久| 黄色av播放免不| 美国美女AV在线| 午夜寂寞欧美| 日本中文熟女视频| 久久久久久久久久久精| 按摩中文字幕| 亚洲av无码成人精品国产| 日本αv| 国产久9| 美欧老女人97| 水澄无码AV| 国产91啪| AV乱伦专区| 久久精品无码一区二区三区| 97欧美日韩中文| 欧美久久草熟女| 国产又色又爽又舒服的三级视频| 中文字幕日韩专区精品系列 | 激情久久久| 欧美成人A√在线一区二区| 国产精品农村妇女精品| 亚熟hd视频在线| 日本伦理一区二区| 99无码视频| 首页中文字幕中文字幕免费| 三级精品三级在线观看| 91天堂| 色噜噜人妻av中文字幕| 午夜后入| 91国产大片| 亚洲色欲一区二区三区| 天天操夜夜操| 五月天色图| av天堂5| 国产精品久久久久亚洲av| 色吧5亚洲| 久久加勒比| 夜夜欧美 | 天天草夜夜草高潮片| 亚洲不卡三级手机播放| 黄页av| 97超碰欧美手机| 国产一线二线三线av| 亚洲久草AV色图| 欧洲自拍第一页| 性色高清..……| 日韩射图| 国产精品乱码久久久久久久久| 超碰在线1234区| 久久久91福利姬| 欧美性视频二区三区| 色拍偷亚洲| 欧美青青草视频| 热久久无毒不卡| 97视频在线免费| 精品无人区麻豆乱码1区2区图片| 欧美综合传媒| 天天搞欧美| 久久久久幕乱码| 午夜福利 成人 91| 91制服丝袜| 久久人妻熟女一区二区| 91综合站| 国产强奸乱伦欧美| 美女熟妇色| 国产精品麻豆视频网站| 亚洲av淫乱| 91站街按摩店老熟女熟女| 婷婷伊人网| 91麻豆天美国产欧美| 四虎永久在线精品免费网址| 中文有码第五页| 黑人与人妻| 碰人碰碰人人开房人肉| 欧美操逼录像国产黄色国产| 午夜爽爽爽| 国产精品高清2021在线| 国产高清26uuu| 久操不卡视频| 天天影视网综合少妇| 少妇天堂网络| 加勒比性爱成人在线| 啊啊啊啊好疼| 欧美一区二区三区不卡高清视频| 日韩激情毛片一级久久久| 精品偷拍13p欧美dodk视频| 亚洲风情综合网| 国产乱子伦一区二区三区在线观看| 亚洲国产综合视频| 操逼逼中文字幕| 无套内射性感少妇视频| 欧美超碰9798| 少妇内射www在线观看视频| 九九九国产精品| A级在线视频| 日本性爱不卡视频| 久7色| 欧美亚洲宗合色性图| 九久久精| 欧美的性爱网站免费| 亚洲精品美女久久久久久久久| 97天天爽| 亚洲自拍青操视频| 91欧洲国产成人久久精品网站| 韩国成人精品久久久免费看 | 大肥女高潮bbwbbwhd视频| 亚洲AV噜噜狠狠网址蜜桃动漫| 97色婷婷| 人妻熟妇久草在线| 欧美 亚洲 第一页 | 欧美淫乱视频| 国模私拍一区二区三区神乳| 插欧洲美女欧美精品| 91国产丝袜足交精品视频| 久操视频在线| 9丨亚洲一区二区在线| 人妻熟女一区在| 九九九热精品| 日韩一级久久毛片| 91狠狠色丁香婷婷综合久久| 久噜噜| 国产精品国产亚洲区艳妇糸列| 亚洲精品国产精品乱码不99| 久久精品一区| 97超碰久久| 色吧五月| 天天热精品| 人人 操人人 操人人| 熟女丰满人妻一区| 一卡二卡三卡| 91足交| jiujiujiujingpin| 美国日韩黄片| 丰满欧美少妇| 欧美人妻制服| 91GD.COM| 爱丝福利| 久久一级无码精品毛片6| 亚洲熟女乱熟乱熟妇综合网二区| 久久青青草在线视频| 男女一级A片大黄,一进一出| 国产乱码久久久久久| 日韩人妻有码免费视频| 亚洲欧美中日韩| 91美女视频| 国产在线76页| 极品色综合| 五月丁香大香蕉| 欧美热图99| 大香蕉综合在线| 人妻激情视频| 色婷网| 成人九九| AV九九| 国产免费内射视频| 五月婷婷影院| 91综合网站| 亚洲另类久操网| 日韩欧美性吧婷婷乱伦大香蕉| 中文字幕一区 二区三四五 区日 日骚 | 翔田千里AⅤHD无码| 欧美另类自拍 | 亚洲密乳AV| 超碰这里只有精品| 天天操天天干一区二区| A男人的天堂| 色噜噜人妻丝袜a∨先锋影| 天天在线91| 婷婷九月色| 97爱综合| 91电影色诱| 曰韩精品视频一区二区| 精品美女久久一二三| 中日韩熟女| 欧美日韩不卡传媒| 狠狠干综合| 成人a v在线播放免费| 日韩午夜国产| 超碰在线综合97| 中文字幕在线免费观看视频| 成人国产二区三区在线,男女精品。| 六六久久日韩不卡| 国产精品免费1区2区视频| 欧美日韩精品久久| av凤凰久久久| 2019天天干| 亚洲情色在线| 久久香蕉综合一本到3atv| 久久精品国产亚洲av水密被窝| 久久伊人在线五区| A V视频日本| 91白嫩| 四季AV综合网址| 欧美专区日本专区| 大奶的诱惑| 热久久国产精品视频大陆精品| 日本人人操人人操| 欧美超碰97| 囯产精品强| 美国美女AV在线| 中国一区二区亚洲人妻| 亚洲一二三四区机械| 丰满少妇高潮无码| 婷婷性爱| 超碰97在线中文| 玖玖爱视频网站| 噜噜噜噜天天狠狠| 美女91色黄18| 欧美色图97| 日日躁夜夜躁狠狠躁超爽| 亚洲情色 自拍| 秋霞久久亚洲精品成人| 校园春色制服丝袜中文字亚洲| 欧美成人精品一区二区男人蜜臀| 日韩在线76| 成人 日本A片无码8888| 色香AV| 久久亚洲天堂| 福利风月五月天影院| 欧美性爱精品一区二区| 欧美gv在线观看| 黑人性欧美| 福利天堂| 成人AV素股で擦久久| 色青青久久影视| 摸奶性爱视频网站在线免费播放| 色九九久九九| 中文字幕视频免费| 欧美激情视频一区二区三区不卡| 丁香五月自拍| 亚洲AV无码AV吞精久久久久| 男人午夜天堂| 国产一区二区在线看| 丁香婷婷激情五月天无毒不卡| 天天操狠狠日夜夜干超碰撸com视频在线观看| 这里只有精品视频在线观看麻豆| 超碰九7| 欧美综合1性辶| 久草老司机| 91欧美性| 国产美女精品| 麻豆av一区二区三区| 性吧在线视频| 综合婷婷| 久9视频| 日韩精品视频在线观看一卡二卡| 大香蕉www.超碰| 日韩操啪| 无码人妻精品酒店| 精品视频久久| 熟女少妇视频| 美女好片色日本| 极品人妻少妇综合| 激情视频图片| 精品二区三四区五电影| 是还免费视频1727我| 超碰天天操你比| 日韩久久艹| laoshunv91| 另类视频在线| 久久久九九九九| 欧美亚洲厕所精品偷拍91| 四虎免费看黄| 加勒比日本在线| 亚洲欧洲久久天堂| A啊啊在线观看| 97色涩| 久操影视| 天天影视之亚洲综合网| 久久人妻一区二区三区高清| 麻豆区久久久久亚| 91痴汉| 久久这里只| 色综91| 国产精品久久久久久亚洲色欲| 精品亚洲一区在线观看|