99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

免費(fèi)在Windows模擬器上運(yùn)行FreeRTOS命令行工程:從任務(wù)調(diào)度到調(diào)試技巧

免費(fèi)在Windows模擬器上運(yùn)行FreeRTOS命令行工程:從任務(wù)調(diào)度到調(diào)試技巧 簡介一份面向STM32嵌入式開發(fā)者的FreeRTOS命令行演示工程基于Windows下的集成開發(fā)環(huán)境Keil下載解壓后即可打開、編譯并燒寫免去手工移植和配置的繁瑣步驟。該工程通過串口中斷接收數(shù)據(jù)進(jìn)而調(diào)用FreeRTOS命令行讓使用者在真實芯片上體驗任務(wù)創(chuàng)建、隊列通信、定時器管理等核心功能。資源總體積約七百七十七KB包含一百一十六個文件其中六十七個頭文件與三十八個源文件覆蓋標(biāo)準(zhǔn)外設(shè)驅(qū)動、FreeRTOS內(nèi)核源碼以及命令行解析邏輯另有工程配置文件、初始化文件、說明文檔和許可證等輔助材料目錄層次分明便于按模塊查閱。目前已有近兩百人學(xué)習(xí)或下載。配合作者撰寫的《FreeRTOS 體驗教程2.用命令行操作FreeRTOS》閱讀既能對照理解串口中斷接收與命令解析的結(jié)合方式也可直接研讀任務(wù)調(diào)度、隊列和定時器的源碼實現(xiàn)適合希望快速上手FreeRTOS并嘗試命令行交互的嵌入式初學(xué)者。1. Windows下開箱即編譯不接開發(fā)板把freeRTOS命令行工程跑起來在Windows上跑FreeRTOS和RTOS命令行很多人第一反應(yīng)是得先有一塊開發(fā)板——這套Keil uVision4的MDK demo工程證明不一定。我第一次拿到它時正在等板子到貨手頭的需求卻等不了要在一周內(nèi)把任務(wù)劃分、消息隊列、命令交互的框架定下來。這套demo解決得干脆——解壓、打開工程、編譯、進(jìn)調(diào)試器FreeRTOS內(nèi)核就在模擬器里跑起來自帶的freeRTOS命令行能直接交互敲task-stats看所有任務(wù)的棧余量和運(yùn)行狀態(tài)敲free-heap看堆剩余。不依賴真實硬件內(nèi)核行為與開發(fā)板一致。適合沒板子但想學(xué)RTOS調(diào)度機(jī)制的初學(xué)者適合硬件未到需要先驗證業(yè)務(wù)邏輯的工程師也適合研究命令行組件如何與RTOS任務(wù)共存的開發(fā)者。2. 工程解剖從目錄布局到配置項和啟動鏈路的完整骨架2.1 目錄結(jié)構(gòu)內(nèi)核、移植層、用戶代碼與CLI四塊分區(qū)拿到工程后第一件事不是點(diǎn)編譯而是先翻目錄。這套工程的目錄組織得很規(guī)矩大致劃成四塊每塊職責(zé)單一改起來不會串線。目錄主要內(nèi)容職責(zé)說明FreeRTOS/Sourcetasks.c、queue.c、list.c、timers.c、event_groups.c內(nèi)核核心代碼純C實現(xiàn)不依賴具體硬件FreeRTOS/Source/portableRVDS/ARM_CM3含port.c、portmacro.h移植層負(fù)責(zé)上下文切換、PendSV與SysTick處理FreeRTOS/Source/includeFreeRTOS.h、task.h、queue.h、semphr.h公共API頭文件用戶代碼只需包含這些Usermain.c、FreeRTOSConfig.h、啟動文件用戶業(yè)務(wù)代碼與內(nèi)核剪裁配置CLIFreeRTOS_CLI.c、FreeRTOS_CLI.hfreeRTOS命令行實現(xiàn)命令解析與分發(fā)核心先看內(nèi)核這幾份文件。tasks.c是調(diào)度器本體只干三件事任務(wù)狀態(tài)機(jī)切換、時間片輪轉(zhuǎn)、優(yōu)先級搶占。queue.c表面上只是隊列實際上信號量和互斥鎖的底層也是它——FreeRTOS的信號量是基于隊列機(jī)制實現(xiàn)的這點(diǎn)很多初學(xué)者不知道。list.c是內(nèi)核內(nèi)部的鏈表實現(xiàn)所有任務(wù)就緒表、阻塞表、延時表都靠它串起來。這些是純C代碼編出來后就是一組不依賴芯片外設(shè)的庫這也是FreeRTOS能橫跨幾十種芯片的原因。移植層是最容易被忽略又最不能錯的地方。ARM_CM3目錄下port.c用嵌入?yún)R編實現(xiàn)了PendSV_Handler和SysTick_Handler任務(wù)切換的實質(zhì)就是這兩段代碼在保存和恢復(fù)CPU寄存器上下文。你不需要改它但得知道任務(wù)怎么切走的答案全在這里——很多新手問調(diào)度器為什么能自動跳來跳去其實每次都是SysTick觸發(fā)中斷然后在PendSV里把當(dāng)前任務(wù)的寄存器壓棧、把下一個任務(wù)的寄存器出棧僅此而已。CLI那部分就是這套demo的亮點(diǎn)了。FreeRTOSCLI是官方命令解釋器組件不綁定任何外設(shè)只要求你給它一個字符輸入渠道和一塊輸出緩沖區(qū)。demo里把它接到UART上模擬器里的終端窗口敲命令直接回顯結(jié)果。第3章會專門拆它的內(nèi)部實現(xiàn)。2.2 FreeRTOSConfig.h這幾個配置項直接決定任務(wù)怎么調(diào)度FreeRTOSConfig.h是整個工程的大腦配置文件它不參與業(yè)務(wù)邏輯卻決定了內(nèi)核怎么剪裁、怎么跑。打開這份文件先盯這幾項#define configTICK_RATE_HZ ( 1000 ) /* 系統(tǒng)時鐘節(jié)拍單位Hz1000就是一秒1000次tick */ #define configMINIMAL_STACK_SIZE ( 128 ) /* 空閑任務(wù)棧深度單位是字而不是字節(jié) */ #define configTOTAL_HEAP_SIZE ( 16 * 1024 ) /* 內(nèi)核堆總大小任務(wù)棧和TCB都從這里分配 */ #define configUSE_PREEMPTION ( 1 ) /* 1搶占式調(diào)度0協(xié)作式調(diào)度 */ #define configUSE_MUTEXES ( 1 ) /* 使能互斥鎖帶優(yōu)先級繼承機(jī)制 */ #define configCHECK_FOR_STACK_OVERFLOW ( 2 ) /* 棧溢出檢測級別2任務(wù)切換時檢測并掛鉤子函數(shù) */configTICK_RATE_HZ設(shè)為1000意味著每毫秒觸發(fā)一次SysTick這是大多數(shù)實時性要求不苛刻的業(yè)務(wù)的通用選擇。如果任務(wù)是毫秒級精確延時需求這個值可以提到2000甚至更高但代價是內(nèi)核調(diào)度開銷增大——每次tick都要跑一遍調(diào)度器判斷是否需要切換。configMINIMAL_STACK_SIZE的128是「字」不是「字節(jié)」在32位Cortex-M上一個字是4字節(jié)所以128字等于512字節(jié)。這個值只用于空閑任務(wù)和demo任務(wù)業(yè)務(wù)任務(wù)棧要單獨(dú)算常見做法是給任務(wù)開256到512字。configTOTAL_HEAP_SIZE管著所有任務(wù)控制塊TCB和任務(wù)棧的內(nèi)存來源。這個值開小了會直接導(dǎo)致xTaskCreate失敗開大了又浪費(fèi)RAM調(diào)試期建議用xPortGetFreeHeapSize()打印剩余堆來反向校準(zhǔn)。configUSE_MUTEXES值得單獨(dú)說——互斥鎖和二進(jìn)制信號量的區(qū)別在于互斥鎖帶優(yōu)先級繼承能避免低優(yōu)先級任務(wù)拿著鎖不讓高優(yōu)先級任務(wù)執(zhí)行這種優(yōu)先級反轉(zhuǎn)問題demo里訪問共享資源時優(yōu)先用互斥鎖而不是信號量。2.3 啟動鏈路從Reset_Handler到vTaskStartScheduler這套demo的啟動流程和帶板子的工程完全一致只是執(zhí)行載體換成了Keil的模擬器。芯片上電后先走啟動文件里的Reset_Handler初始化棧指針、調(diào)用SystemInit做時鐘和外設(shè)的初步配置然后跳進(jìn)main()。main()里干的事可以歸納為三段初始化UART命令行要用、創(chuàng)建demo任務(wù)和CLI任務(wù)、最后調(diào)用vTaskStartScheduler()把控制權(quán)交給內(nèi)核。vTaskStartScheduler()一旦成功啟動就不會返回——它會創(chuàng)建空閑任務(wù)和可選的定時器任務(wù)然后觸發(fā)第一次上下文切換進(jìn)入調(diào)度循環(huán)。從這一刻起main()的代碼就不再被執(zhí)行了整個CPU時間片都由內(nèi)核管理。很多新手在main()后面繼續(xù)寫業(yè)務(wù)代碼發(fā)現(xiàn)永遠(yuǎn)執(zhí)行不到就是因為沒理解這一層。所以在demo里你會發(fā)現(xiàn)所有業(yè)務(wù)邏輯都被封裝進(jìn)任務(wù)函數(shù)main()只做初始化和點(diǎn)火兩件事。3. 核心模塊拆解任務(wù)調(diào)度與命令行從注冊到回顯的完整鏈路3.1 任務(wù)創(chuàng)建與調(diào)度器啟動代碼級拆解打開main.c最先看到的就是任務(wù)創(chuàng)建。這幾乎是所有FreeRTOS工程的模板寫法/* demo任務(wù)1周期性打印運(yùn)行信息 */ static void vDemoTask1(void *pvParameters) { for (;;) { vPrintStringLine(DemoTask1 running...); vTaskDelay(pdMS_TO_TICKS(1000)); /* 主動讓出CPU阻塞1000個tick */ } } int main(void) { /* 初始化UART命令行輸入輸出都走這個外設(shè) */ vUartInit(115200); /* 構(gòu)建設(shè)備對象創(chuàng)建demo任務(wù)和命令行任務(wù) */ xTaskCreate(vDemoTask1, Demo1, 256, NULL, 1, NULL); xTaskCreate(vDemoTask2, Demo2, 256, NULL, 1, NULL); xTaskCreate(vCLITask, CLI, 512, NULL, 2, xCLITaskHandle); /* 啟動調(diào)度器成功則永不返回 */ vTaskStartScheduler(); /* 走到這里說明調(diào)度器啟動失敗通常是堆空間不足 */ for (;;) { } }xTaskCreate的六個參數(shù)依次是任務(wù)函數(shù)指針、任務(wù)名純調(diào)試用途、棧深度單位是字、傳給任務(wù)的參數(shù)指針、優(yōu)先級數(shù)字越大優(yōu)先級越高、任務(wù)句柄輸出指針。這里CLI任務(wù)優(yōu)先級設(shè)為2兩個demo任務(wù)為1空閑任務(wù)優(yōu)先級是0所以CLI任務(wù)能隨時搶占demo任務(wù)——命令行交互的實時性就是這么保證的。vTaskDelay(pdMS_TO_TICKS(1000))里的pdMS_TO_TICKS是個宏把毫秒換算成tick數(shù)在configTICK_RATE_HZ等于1000時1000毫秒就是1000個tick。任務(wù)調(diào)用它之后會進(jìn)入阻塞態(tài)把CPU讓給其他就緒任務(wù)這是理解RTOS多任務(wù)同時跑錯覺的關(guān)鍵點(diǎn)。3.2 命令行實現(xiàn)命令表、解析器與逐字符處理freeRTOS命令行的核心是FreeRTOS_CLI.c它把命令字串→處理函數(shù)的映射關(guān)系做成一張表。demo里的命令注冊和內(nèi)核的任務(wù)創(chuàng)建是解耦的注冊過程在主程序啟動時完成/* 命令處理函數(shù)統(tǒng)一簽名輸出緩沖、緩沖長度、原始命令字串 */ static BaseType_t prvTaskStatsCommand(char *pcWriteBuffer, size_t xWriteBufferLen, const char *pcCommandString); static BaseType_t prvFreeHeapCommand(char *pcWriteBuffer, size_t xWriteBufferLen, const char *pcCommandString); /* 命令注冊表每一行是一條命令的名字、幫助文本、處理函數(shù) */ static const CLI_Command_Definition_t xCommandTable[] { { task-stats, task-stats: 顯示所有任務(wù)的棧與調(diào)度統(tǒng)計\r\n, prvTaskStatsCommand }, { free-heap, free-heap: 顯示剩余堆空間\r\n, prvFreeHeapCommand }, { help, help: 列出全部可用命令\r\n, FreeRTOS_CLIHelpCommand }, }; /* 在主程序初始化階段逐條注冊 */ void vRegisterDemoCommands(void) { for (int i 0; i sizeof(xCommandTable) / sizeof(xCommandTable[0]); i) { FreeRTOS_CLIRegisterCommand(xCommandTable[i]); } }這種表驅(qū)動的命令設(shè)計妙處在于新增命令不用改解析器的代碼只在數(shù)組里加一行。FreeRTOS_CLIRegisterCommand內(nèi)部會把命令節(jié)點(diǎn)掛到一個全局鏈表中運(yùn)行時每條命令按名字逐一匹配。參數(shù)說明一下命令字串區(qū)分大小寫如果用戶敲了大寫會匹配不到CLI會返回未知命令的提示幫助文本在敲help命令時統(tǒng)一列出所以新命令一定要寫好幫助文本否則別人看不出這命令是干嘛的。真正的解析過程發(fā)生在CLI任務(wù)里。CLI任務(wù)從UART逐字符讀取輸入攢夠一條完整命令后交給FreeRTOS_CLIProcessCommand處理/* CLI任務(wù)從UART讀字符、組裝命令、調(diào)用解析器、回顯結(jié)果 */ static void vCLITask(void *pvParameters) { char cRxChar; char cCmdBuffer[configCLI_INPUT_BUFFER_LENGTH]; char cOutputBuffer[configCLI_OUTPUT_BUFFER_LENGTH]; uint32_t ulInIndex 0; for (;;) { /* 從UART接收一個字符模擬器里對應(yīng)終端窗口的按鍵 */ if (xUartReceiveByte(cRxChar) pdPASS) { /* 回車或換行表示一條命令輸入完畢 */ if ((cRxChar \r) || (cRxChar \n)) { cCmdBuffer[ulInIndex] \0; /* 字符串終結(jié)符 */ ulInIndex 0; /* 索引歸零等下一條 */ /* 調(diào)用命令行解析器結(jié)果寫入cOutputBuffer */ FreeRTOS_CLIProcessCommand(cCmdBuffer, cOutputBuffer, configCLI_OUTPUT_BUFFER_LENGTH); /* 把解析器生成的輸出文本發(fā)回UART */ vUartSendString(cOutputBuffer); } else if (ulInIndex (configCLI_INPUT_BUFFER_LENGTH - 1)) { /* 非結(jié)束符存入輸入緩沖留一個位置給\0 */ cCmdBuffer[ulInIndex] cRxChar; } } } }這個循環(huán)的妙處是它本身也是一個FreeRTOS任務(wù)優(yōu)先級高于demo任務(wù)所以終端交互永遠(yuǎn)不被業(yè)務(wù)任務(wù)餓死。FreeRTOS_CLIProcessCommand會在內(nèi)部遍歷命令鏈表找到匹配項后調(diào)用對應(yīng)的處理函數(shù)把結(jié)果寫入輸出緩沖。configCLI_INPUT_BUFFER_LENGTH和configCLI_OUTPUT_BUFFER_LENGTH在FreeRTOS_CLI.h里定義demo里默認(rèn)給到120和1024字節(jié)——輸出緩沖要慎調(diào)task-stats的表格內(nèi)容在一長串任務(wù)名和數(shù)字的情況下很容易超出1024字節(jié)超了就會被截斷。3.3 隊列與信號量demo里任務(wù)間通信的三種姿勢demo里除了CLI交互還演示了任務(wù)間通信的典型寫法。先是隊列兩個demo任務(wù)通過一個隊列傳數(shù)據(jù)/* 全局隊列句柄 */ QueueHandle_t xDemoQueue; /* 發(fā)送任務(wù)每500ms向隊列寫入一個遞增的計數(shù)值 */ static void vDemoTask1(void *pvParameters) { int32_t lCount 0; for (;;) { xQueueSend(xDemoQueue, lCount, 0); lCount; vTaskDelay(pdMS_TO_TICKS(500)); } } /* 接收任務(wù)阻塞等待隊列消息收到后打印出來 */ static void vDemoTask2(void *pvParameters) { int32_t lReceived; for (;;) { if (xQueueReceive(xDemoQueue, lReceived, portMAX_DELAY) pdPASS) { vPrintStringLine(DemoTask2 received: %ld, lReceived); } } }xQueueSend的第三個參數(shù)是等待時間0表示隊列滿時直接返回不等待portMAX_DELAY表示無限阻塞隊列沒有數(shù)據(jù)時接收任務(wù)就掛起不消耗CPU。這里有個新手容易踩的坑xQueueSend拷貝的是指針還是數(shù)據(jù)默認(rèn)行為是拷貝數(shù)據(jù)本身按隊列創(chuàng)建時設(shè)定的元素大小所以傳lCount沒問題——但如果隊列元素是結(jié)構(gòu)體要確認(rèn)結(jié)構(gòu)體大小和隊列初始化時保持一致否則會越界寫壞堆。信號量和互斥鎖的用法在demo里通常體現(xiàn)在對共享資源的保護(hù)上。比如CLI的task-stats命令內(nèi)部要遍歷任務(wù)鏈表如果同時有別的任務(wù)在創(chuàng)建或刪除任務(wù)鏈表結(jié)構(gòu)正在變化遍歷就會讀到臟數(shù)據(jù)。常見做法是把命令處理邏輯放進(jìn)去臨界區(qū)或互斥鎖保護(hù)但這層細(xì)節(jié)demo通常簡化處理真實產(chǎn)品里建議用xSemaphoreTake/xSemaphoreGive包住所有會并發(fā)訪問內(nèi)核數(shù)據(jù)結(jié)構(gòu)的路徑。4. 編譯與運(yùn)行uVision4里從Build到敲命令的實操步驟4.1 打開工程與編譯選項核對工程文件是.uvproj后綴uVision4直接File→Open Project選它就打開了。打開后先做兩個檢查項別急著編譯。第一項在Options for TargetAltF7的Debug標(biāo)簽頁里左側(cè)單選按鈕必須選Use Simulator而不是某個調(diào)試器型號——這是不接開發(fā)板也能運(yùn)行的前提。選了模擬器后右邊還能設(shè)時鐘頻率對FreeRTOS來說這會影響SysTick的計時基準(zhǔn)demo默認(rèn)給的頻率不用改除非你發(fā)現(xiàn)延時行為異常。第二項在Target標(biāo)簽頁確認(rèn)Device或CPU型號已指定為Cortex-M3內(nèi)核這樣Keil才知道用哪套指令集編譯。編譯按F7輸出窗口如果出現(xiàn)0 Error(s)、0 Warning(s)是最理想的。如果報了warning別無視——最常見的是declared but never used這類多數(shù)不影響運(yùn)行但如果是implicit declaration of function就要當(dāng)回事說明某個頭文件沒包含或移植層文件漏加了。4.2 啟動模擬器與連接終端窗口編譯通過后按CtrlF5進(jìn)入調(diào)試會話模擬器把ELF加載進(jìn)虛擬的Cortex-M3內(nèi)核PC停在Reset_Handler。此刻按F5運(yùn)行main()會執(zhí)行UART初始化和任務(wù)創(chuàng)建然后vTaskStartScheduler()接管控制權(quán)三個任務(wù)開始輪轉(zhuǎn)。接下來關(guān)鍵一步打開View→Serial Windows→UART#1。這就是模擬UART的終端窗口CLI任務(wù)的xUartReceiveByte讀到的字符就是在這個窗口敲進(jìn)去的vUartSendString的輸出也會顯示在這里。注意UART#1窗口默認(rèn)可能不彈出需要在調(diào)試會話進(jìn)行中主動打開。打開后鼠標(biāo)點(diǎn)進(jìn)窗口輸入help回車如果能看到命令列表說明CLI鏈路完全打通了。4.3 用內(nèi)置命令驗證調(diào)度狀態(tài)運(yùn)行穩(wěn)定后終端里依次敲幾條命令驗證內(nèi)核行為help列出所有注冊的命令每條命令的幫助文本也會顯示task-stats輸出一張表格列是任務(wù)名、狀態(tài)、優(yōu)先級、棧余量、任務(wù)編號。狀態(tài)列的X表示當(dāng)前正在運(yùn)行B表示阻塞中R表示就緒。連續(xù)敲兩次你會發(fā)現(xiàn)X標(biāo)記在CLI和兩個demo任務(wù)之間跳來跳去——這是搶占式調(diào)度最直觀的證據(jù)free-heap顯示堆剩余字節(jié)數(shù)。剛啟動時記一個值跑一段時間再敲如果數(shù)值持續(xù)下降說明有內(nèi)存泄漏task-stats輸出的Stack列單位是字不是字節(jié)計算棧使用量時要乘以4。另外vTaskList的實現(xiàn)依賴configUSE_TRACE_FACILITY為1如果改配置時把這開關(guān)關(guān)了task-stats命令會輸出空表或異常字符排查時優(yōu)先檢查這個宏。5. 避坑指南MDK模擬器里跑FreeRTOS的五個典型翻車現(xiàn)場5.1 一進(jìn)調(diào)試就HardFault棧溢出的經(jīng)典偽裝現(xiàn)象編譯、鏈接都通過進(jìn)調(diào)試器運(yùn)行不到一秒程序卡死在HardFault_Handler里斷點(diǎn)位置毫無規(guī)律。原因某個任務(wù)的棧開小了。demo任務(wù)里的vPrintStringLine這類打印函數(shù)內(nèi)部會走格式化字符串和UART發(fā)送棧消耗能達(dá)到100字以上再加上函數(shù)調(diào)用鏈的現(xiàn)場保存256字很容易見底。解決先把configCHECK_FOR_STACK_OVERFLOW設(shè)為2這樣每次任務(wù)切換時內(nèi)核會檢查棧頂?shù)乃痪€標(biāo)記是否被踩掉同時把棧深度從256加碼到512再試。如果還不穩(wěn)用task-stats命令看Stack列的真實余量反向調(diào)到夠用再加20%余量。5.2 xTaskCreate返回pdFAIL堆空間不夠的癥狀與定位現(xiàn)象程序跑起來了但少一個任務(wù)點(diǎn)開調(diào)試器的Watch窗口看xTaskCreate的返回值是0pdFAIL。原因configTOTAL_HEAP_SIZE設(shè)置太小任務(wù)棧加TCB分配不出來。這個坑在新手把堆從默認(rèn)值往小調(diào)想省RAM時特別常見。解決臨時把堆調(diào)到32KB在main()里任務(wù)創(chuàng)建前調(diào)xPortGetFreeHeapSize()打印初始堆任務(wù)創(chuàng)建后再打印一次差值就是所有任務(wù)吃掉的總內(nèi)存。按這個數(shù)反向把configTOTAL_HEAP_SIZE精調(diào)到合適值別拍腦袋。5.3 模擬器里UART輸入不響應(yīng)先分清輪詢還是中斷現(xiàn)象UART#1窗口里敲help窗口沒反應(yīng)但demo任務(wù)的周期性打印還在刷屏。原因CLI任務(wù)可能用的是中斷方式接收UART數(shù)據(jù)而模擬器對UART中斷的行為和真實芯片有細(xì)微差別——中斷優(yōu)先級配置不對或外設(shè)時鐘模型沒配好導(dǎo)致中斷永遠(yuǎn)不觸發(fā)。解決把接收改成輪詢方式即在CLI任務(wù)里循環(huán)讀UART狀態(tài)寄存器的RXNE位讀到1才取數(shù)據(jù)。模擬器里輪詢比中斷更可靠。如果你就是想驗證中斷驅(qū)動模式先確認(rèn)NVIC的優(yōu)先級分組和FreeRTOS的configMAX_SYSCALL_INTERRUPT_PRIORITY配置一致否則內(nèi)核會把中斷關(guān)掉數(shù)據(jù)自然進(jìn)不來。5.4 開-O2優(yōu)化后任務(wù)和CLI亂跳volatile與編譯器優(yōu)化之爭現(xiàn)象優(yōu)化級別從-O0改成-O2后原本正常的任務(wù)調(diào)度變得神經(jīng)質(zhì)或者某個while循環(huán)永遠(yuǎn)跳不出來。原因跨任務(wù)共享的變量沒加volatile編譯器認(rèn)為循環(huán)體內(nèi)沒人改動它直接把讀變量的操作提到循環(huán)外。這種問題在自旋等待標(biāo)志位、共享計數(shù)的場景里幾乎必現(xiàn)。解決對所有在任務(wù)間共享、會被任務(wù)或中斷修改的全局變量一律加volatile修飾。這不是玄學(xué)C標(biāo)準(zhǔn)里明確寫了volatile就是告訴編譯器這變量可能被外部改別優(yōu)化掉。5.5 SysTick延時不準(zhǔn)模擬器時鐘與configTICK_RATE_HZ的對齊現(xiàn)象vTaskDelay(pdMS_TO_TICKS(1000))量出來實際間隔明顯不是1秒有時快有時慢。原因Keil模擬器的指令執(zhí)行速度和真實芯片時鐘不是嚴(yán)格對應(yīng)的而且調(diào)試器單步執(zhí)行時SysTick計數(shù)會被暫停。這在模擬器里是正常現(xiàn)象不是工程寫錯了。解決確認(rèn)Target設(shè)置里的時鐘頻率與configTICK_RATE_HZ的換算關(guān)系一致做時間測量時用在線運(yùn)行F5而不是單步要驗證精確延時時在任務(wù)里記錄一個tick計數(shù)器的前后差值來判斷別用墻上的秒表。6. 二次開發(fā)給命令行新增指令并驗證調(diào)度行為的改造實戰(zhàn)6.1 注冊一條自定義命令三步操作改造第一步模仿內(nèi)置命令寫一個處理函數(shù)。命令的統(tǒng)一簽名是三個參數(shù)輸出緩沖、緩沖長度、原始命令字串。假如我要加一條toggle命令讓一個共享計數(shù)加一/* 共享計數(shù)器跨任務(wù)訪問一定要加volatile */ static volatile uint32_t ulSharedCounter 0; /* toggle命令處理函數(shù) */ static BaseType_t prvToggleCounterCommand(char *pcWriteBuffer, size_t xWriteBufferLen, const char *pcCommandString) { ulSharedCounter; sprintf(pcWriteBuffer, counter %lu\r\n, ulSharedCounter); return pdFALSE; /* pdFALSE表示一次性輸出完畢 */ }第二步把命令加進(jìn)xCommandTable數(shù)組注意數(shù)組元素的順序不影響匹配因為解析器是按名字逐個查的{ counter, counter: 打印并遞增共享計數(shù)器\r\n, prvToggleCounterCommand },第三步重新編譯、進(jìn)模擬器敲counter驗證輸出。這里有個小習(xí)慣新命令的調(diào)試先用help確認(rèn)它被成功注冊了再跑實際命令能省掉不少命令明明是好的但就是不生效的排查時間。6.2 用互斥鎖保護(hù)命令中的共享資源上面那個counter命令在demo的簡單場景下夠用但一旦有另一個任務(wù)同時修改ulSharedCounter遞增操作就不是原子性的可能會丟更新。FreeRTOS里修正這個問題用互斥鎖/* 互斥鎖句柄在main()里創(chuàng)建 */ SemaphoreHandle_t xCounterMutex; /* 受保護(hù)的命令處理 */ static BaseType_t prvCounterCommand(char *pcWriteBuffer, size_t xWriteBufferLen, const char *pcCommandString) { xSemaphoreTake(xCounterMutex, portMAX_DELAY); /* 拿鎖拿不到就阻塞 */ ulSharedCounter; sprintf(pcWriteBuffer, counter %lu\r\n, ulSharedCounter); xSemaphoreGive(xCounterMutex); /* 釋放鎖 */ return pdFALSE; }xSemaphoreTake的portMAX_DELAY參數(shù)表示無限等鎖實際產(chǎn)品里建議給一個有限超時避免低優(yōu)先級任務(wù)拿著鎖長時間不釋放導(dǎo)致高優(yōu)先級任務(wù)永久阻塞。注意互斥鎖和二進(jìn)制信號量的區(qū)別互斥鎖帶優(yōu)先級繼承機(jī)制當(dāng)高優(yōu)先級任務(wù)等鎖時系統(tǒng)會把拿鎖的低優(yōu)先級任務(wù)臨時提到相同優(yōu)先級讓它盡快跑完釋放鎖這是解決優(yōu)先級反轉(zhuǎn)的標(biāo)準(zhǔn)做法。6.3 驗證方法調(diào)度行為與臨界區(qū)正確性的雙視角確認(rèn)驗證改造是否成功我習(xí)慣從兩個角度看。一是CLI視角連敲幾次counter看返回值是否嚴(yán)格遞增再開一個demo任務(wù)周期性地也去遞增這個計數(shù)器如果CLI輸出的數(shù)值出現(xiàn)跳變大概率是競爭條件沒覆蓋干凈。二是調(diào)試器視角給prvCounterCommand的xSemaphoreTake前后各下一個斷點(diǎn)運(yùn)行模式下一口氣觸發(fā)命令觀察另一個任務(wù)是否在同一個時刻也在修改ulSharedCounter——如果兩個任務(wù)同時停留在臨界區(qū)內(nèi)的斷點(diǎn)說明互斥鎖沒真正攔住這時候要檢查是不是用了信號量而不是互斥鎖或者鎖句柄被別的代碼誤刪了。從那以后我每次拿到新的FreeRTOS工程都會先過一遍FreeRTOSConfig.h里的堆棧和堆參數(shù)再跑一遍內(nèi)置命令建立基線數(shù)據(jù)最后才動手改業(yè)務(wù)代碼。這個小習(xí)慣幫我避開了至少五次和今天講的一模一樣的坑也希望這篇筆記幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷性爱视频在线| 日韩无码专区| 激情五月伊人婷婷| 6 9式性爱视频在线播放| 五月丁香香蕉| 六月丁香啪| 国产性av| 97人凄人人操人人爽| 黄色大片又大粗又爽| 激情内射人妻1区2区3区| 日本熟女内射| 性五月激情| 六月婷婷久久大全| 99热人人| 色婷婷av综合网| 久久人妻视频| 激情网开心网| 亚洲综合久| 99精品偷自拍| 开心五月综合激情网| 婷婷色五月天第7色| 99久久亚洲国产| 一本色道久久综合狠狠躁小说| 99色色最新视频| 狠狠色丁香久久综合婷婷亚洲成人福利 | 激情色视频| 婷婷操久久| 国产成人精品一区二三区熟女在线| 常久最新免费的色吊丝| 综合丁香婷婷五月天| 久久久久久9热不雅视频| 日韩成人无码人妻| 免费观看欧美成人AA片爱我多深| 婷婷五月天成人网| 嫩BBB搡BBBB榛BBBB| 成人丁香婷婷| 狠狠va| 久久午夜丁香| 强辱丰满人妻HD中文字幕| 激情都市丁香婷婷| 啪啪啪五月天| www.婷婷| 狠狠99| 九九热超碰| 91精品综合久久久久久五月丁香 | 99视频在线观看网址| 综合色色色| 欧洲第一久色| 九九综合视频在线观看| 久草九九| 欧美婷婷色| 日韩综合天堂| 色偷偷色婷婷| 天色综合网站| 18av天堂| 成人电影AV在线观看| 亚洲国产精品VA在线看黑人| 亚洲成人一区| 狠狠色狠狠操| 人人操人av| 九月激情网| 六月婷欧美丁香综合| 91人妻人人做人碰人人爽九色| 丁香五月激情站| 成人中文字幕在线| 草久私拍| 色狠狠色噜噜AV天堂五区| 色日本综合| 99热日本| 欧美狠狠一在草| 亚洲AVwwwwwww| 狠狠精品干练久久久无码中文字幕| 天天激情欧美美女| 激情网综合| 婷香五月网在线| 色噜噜五月天| 秋霞少妇毛片| 激情综合九| 五月丁香六月激情综合| 中文字幕av在线| 夜夜综合色| 久久这里只精品66| 婷婷亚洲影院| 99婷婷国产最新视频| 日韩啪啪视品| 操碰色一区就去操| 农村熟妇高潮精品A片| 婷婷久久亚洲| 夜夜躁婷婷AV| 激情综合五| 色五月婷婷啪啪五月| 狠狠爱婷婷丁香| 97搞在线| 在线观看免费观看在线9久| 天天爽夜爽| 大香蕉中文| 九九视频这里只有精彩| 丁香五月亚洲天堂| 色五月婷婷激情五月| 丁香无月在线观看| 日本九九九九| 婷婷久久网| 午夜丁香六月婷| 玖玖91| 噜噜在线| 99精品在线| 国产综合色婷婷精品久久| 久久99久久99精品免观看软件| 亚洲一个色| 超碰国产AV| 情色五月天 网站| 密着浓厚中出乚交尾GvG935| 精品爱欲五| 色五月av| 激情丁香五月| 成人午夜视频精品一区| 国产精品涩涩涩视频网站| 99热免| 中文字幕AV网址| 激情五月天婷婷丁香| 丁香五月天天高清在线| 五月婷六月婷婷| 五月天激情图| 国产,欧美,日韩,性爱| 69激情小说| 婷婷久久婷婷色五月| 97久久草草超级碰碰碰| 亚洲激情视频在线观看| 亚洲思思热久| 五月婷婷在线视频免费观看| 这里只有精品99视频| 日本99热| 久久老码第一| www 五月天 com| 亚洲精品操一操、噜一噜、摸一摸、爽 | 99久久网站| www.夜夜操.com| 亚洲六月色| 五月丁香色情| 九九色热| 思思热在线视频精品| 激情五月天社区| 综合色播| 久操欧美在线观看97| 久久AAAA片一区二区| 伊人综合网站| 玖玖九九超碰| 五月天丁香欧美激情| 安息电影在线观看完整版| www.久久爱| 专区无日本视频高清8| 26uuu日韩| 天天插天天插| 亚洲网在线观看| 欧美怡红院黄站| 五月天丁香久久综合| 亚洲V国产V欧美V久久久久久| 五月天操逼网| 色五月大| 五月99久久| 欧美日韩AAA| 99热热热99精品丁香| 婷婷免费精品视频| 色综合五月| 婷婷精品免费久久| 五月天啪啪| 久99热在线观看| 大香蕉院线| 婷婷久久综合| 国产六月婷婷| 婷婷五月花| 五月婷婷啪啪| 深爱婷婷网| 丁香六月色婷婷| 超碰人人99| 碰超在线九色| 久久丁香综合| 久久久久99精品成人网站| 亚洲99精品欧美一区| 男女激情久久| www激情五月天| 日本色啪| 99精品大片| 在线精品97| 婷婷日日天天| 久久月天堂| 天天操夜夜爱| 伊人香大香蕉视频| 日日插日日干| 色五月自偷自拍婷婷婷婷| 五月丁香六月婷婷操操操| 97婷婷久久丁香| 久久人妻www| 亚洲综合视频八| 婷婷五月色丁香在线看| 99久久久精品| 五月丁香婷婷综合网| 国产黄色av| 六月色色综合| 色综合视频在线| 久久亚洲婷婷| 色婷婷文字幕| 99久久久久| 丁香五月婷婷啪啪| 婷色五月天| 欧美激情五月天在线观看| 丁香五月AV| 天天拍夜夜爽日日| 久久免费高| 五月六月激情| 人人操操| 狠狠干综合| 丁香六月AV| 能看的AV| 日本操逼九九九九58日本操逼| 97碰91| 婷婷激情小说| 伊人网啪啪| 亚洲色频| caop在线视频| 婷婷五月花| 好好干av| 99热插| 色五月天堂| 色婷婷五月开心六月综合| 日本久久99| 五月天婷婷黄色| AⅤ在线播放网| 丁香五月天电影| 一区二区三区XXXXXX| 99热新网址| 五月天婷婷色色| 久久99视频| 五月丁香啪啪激情| 奇米色大香蕉| 国产成人av在线播放| 97色色色色色色色| 色欲AVV| 99视频精品全部观看10| 婷婷久热| 成人精品视频99在线观看免费| 丁香伊人激情| 久久9RE热视频精品98| 综合色99| 丁香五月综合在线播放 | 狠狠干综合| www.zbzhongsen.com| 超碰久热| 丁香色五月天| 人人澡天天色天天做| 不卡在线超碰| 玖玖在线视| 丁香婷婷五月激情综合| 日韩欧美婷婷丁| 伊人久久大香线蕉av最新| 丁香六月婷婷激情综合| 9视频在线成人网站| 五月天另类激情在线| 色五月大香蕉| 性色九九| 深爱五月激情| 人人舔人人| 91久久综合| 九九久久精品| 五月丁香五月综合欧美| 天天搽天天射| 99精品偷拍视频| www色色com| 国产一区男女| 色一情一乱一乱一区91| 久久人人添人人爽添人人片αV| 色97综合婷婷天天色| 99碰碰碰| 五月天激情婷婷| 日本熟女内射| 九九99在线观看视频| 香蕉影院色| 色五月婷婷在线| 色小说婷婷五月天天天| 99ri精品在线| 日日操夜夜擼| 91爱啪啪| Www.狠狠| 婷婷丁香五| 丁香五月婷婷av影院| 激情久久肏屄视频| 26uuu另类| 色婷婷亚洲| 操操综合网婷婷| 激情综合区| 九九热在线观看视频网站| 成人免费120分钟啪啪| 中文字幕色色| 婷五月天在线草| www.久久爱.c n| 日本色色网| 久久丁香综合| 色噜噜狠狠狠综合曰曰曰| 97操在线视频| 四川操逼站| 狠狠狠狠狠干| 婷婷午夜丁香| 女高怪谈在线观看| 五月丁香六月激情网| 日韩精品99久久| 欧洲色区| 五月丁香免费看| 996热re视频精品视频这里| 日韩成人av在线| 色播色丁香五月| 开心激情婷婷| 久热久| 五月婷婷六月少妇激情| 婷婷五月天少妇| 丁香五月影视| 精品无码片| 天天干天天干天天干天天干天| 夜夜夜夜撸夜夜操| 五月天伊人日日噜影片AV| AV在线观看网站| 丁香五月婷婷老师网站| 免费视频WWW在线观看网站| 97人人操在线| 欧洲99视频在线| 五月婷婷九九久久| 九九中文色色| 激情婷婷丁香| 99无码精品| 久久久免费精彩视频| 夜夜骑日日夜夜| 婷婷精品免费久久| 婷婷久久精品| 伊人狠狠丁香婷婷综合尤物| 激情五月婷黄版| 丁香婷婷五月综合欧美另类| 亚洲色无码A片一区二区麻豆| 国产成人网站在线观看| 91久久九久久九久久九久久九久久| 五月激情综合深爱| 欧美熟女乱又伦| 狠狠做六月爱婷婷综合aⅴ| 婷婷激情人妻| 亚洲色图在线视频| 性爱激情久久| 91操黄| www.99视频| 99色在线观看| 色色色婷婷五月天| 综合一区二区三区| 五月 激情视频| 色爱五月天| 伊人婷婷激情| 开心五月激情站| 激情 五月 婷婷 丁香| 国产99久久久| 91超碰在线观看| 五月天激情啪啪| 日本在线wwww| 丁香五月激情啪啪啪| 性按摩玩人妻HD中文字幕| 五月天婷婷在线视频| 日本综合久久| 久久9视频| 色狠狠999综合| 99热综合| 五月婷婷激情中文字幕| 丁香五月影院| 狠狠爱五月婷婷| 六月婷婷激情小说网| 欧爱综合视频| 思思久久思思| 五月丁香六月婷婷手机无线| 色情久久久| 97色伦另类图片小说视频 | 欧美S码亚洲码精品M码| 国产人妻人伦精品一区二区| 亚洲熟妇AV乱码在线观看| 日日干夜夜干| 五月丁香啪啪啪| 99ri精品| 嫩草AV久久伊人妇女超级A| 久久激情网| 日日夜夜干| www.zbzhongsen.com| 成人午夜无码视频| 精品一二三区久久AAA片| 激情五月婷婷综合| 免费观看全黄做爰的视频| 久久视频在线视频| 久久久宗合视频88| 鲁鲁色五月| 五月丁香成人小说| 精品久久久中文字幕大豆网推荐理由| 婷婷久久午夜网| 成人在线综合| 丁香五月婷婷偷拍| 综合在线色婷婷| 色综啪啪网| 五月丁香婷婷无码中文| 亚洲精品视频在线| 9久久久久| 天天色噜| 久久大香蕉伊人| 天天做天天爱天天玩夜夜爽| 9热网站| 久久色在线视频| 精品久久9| 午夜在线成人网站免费观看| 激情五月激情综合网一级丸片| 亚洲五月婷| 天堂网啪啪| 亚洲综合激情五月| 丁香六月婷婷激情| 久久思思精品| 日本天堂网站99| 99色视频在线观看| 免费视频WWW在线观看网站| 青青夜夜狠狠夜夜狠狠| 久久精彩视频| xxxx五月| 色婷婷成人做爰A片免费看网站 | 成人免费网站免费看| 色丁香婷婷| 色色综合网www| 五月丁香亚洲五月| 99久久九九视频| 四色 爱 婷婷 精品 亚洲 五月天| 色色色99| 激情深爱五月婷婷| 噜噜噜狠狠色综合| 婷婷五月天成人在线视频| 丁香成人五月天| 婷婷丁香www视频日本韩国| 五月播播| 久久综合播放| 五月婷婷AV| 欧洲亚洲免费视频9| √天堂资源在线人妻熟女| 婷婷丁香五月天影院 | 99视频自拍| 一区色色色色网| 无码操B| 色色精品色| 日日夜夜干| 天天爽天天爽天天爽天天爽天天爽| 九九精品热| 激情五月开心五月在线视频| 99热手机在线精品| 亚洲综合五月天婷婷丁香| 成人在线视频网| 婷婷伊人綜合中文字幕小说| 99精品在线观看| 五月婷婷和六月| 七月婷婷色香综合网| 婷婷丁香成人网址| 激情骚五月| 天天摸色吧天天摸色吧| 一起草无码| 五月天婷婷綜合院| 99精品视频免费在线播放| 婷婷色综合| 在线A色| 日韩五月婷婷久久| 综合色色婷婷| 丁香九月激情| 日本精品人妻无码77777| 激情精品久久| 99在线精品免费视频| 夜夜撸天天日| 激情久久久久久久久久| 五月婷婷久久综合| www.色五月天.com| 九九99热| 色色色网站| 丁香九月婷婷色| 五月开心啪啪| 黄网在线观看免费| 婷婷五月蜜桃成人桃色丁香| 一本到不卡高清DVD| 婷婷情爱五月天6| 激情五婷网| 99re在线观看| 色五月婷婷五月天激情综合| 97碰在线| 字幕网AV中文字幕| 六月 丁香 视频| 国产高潮白浆一区二区| 天天看A片| 六月丁香婷婷色综合| 9热久久在线| 丁香九月婷| 久热这里只有精品性色AV| www久| 日日狠狠久久偷偷四色综合免费| 久草五月婷婷| 玩熟女五十AV一二三区| 丁香五月综合激情性爱| 天天色视频| 玖玖@三月天天丁香婷婷| 999精品久久久久久久| 殴美综合激情五月天免费视频| 華人性愛AV在線| 国内9l视频自拍老熟女九色| 丁香五月色| 俺去啦综合网| 日本99热| 九月av在线| 在线中文亚洲| 色欲五月天| 99人妻碰碰碰久久久久视| 五月天激情四射| 激情六月天婷婷| 婷婷色五月噜噜| 久久综合五月婷婷| 99国产精品久久久久久久久久久| 婷婷五月天基地| 婷婷五月天伦理| 亚洲成人无码网站| www.丁香黄色五月天人与| 五月天色色网站| 精品,99| 操逼毛片国语对白| 99精彩视频网站在线| AV色婷婷| 色婷婷五月天视频在线| www,欧美干干干干干干| 久久丁香五月婷婷| 五月婷婷黄网站大全| 99热最新| 美国十月色婷婷在线观看| 天天色,天天操,天天射| 人妻AV在线| 久久久久久久五月| 在线看九一V图片| 噜噜网免费视频| 成人婷99最新| 热996精品在线观看| 99ER热精品视频| 丁香激情网| 五月播播| 九九在线免费观看| 就要爱综合| 91久久综合亚洲噜噜成人在线 | 久热中文字幕| 99视频精品在线| 亚洲五月婷天天操| 激情五月开心五月在线视频| 91精品久久久久久久久久久久| 九九成人电影婷婷| 国产亚洲精品久久久久久郑州 | 天天色爽| 丁香亭亭久久| 激情久久久久| 99热久久日本| 色播色丁香五月| 久热一区| 第四色在线观看| 丁香婷婷色五月激情综合| 无码动漫av| 国产午夜一区二区三区| 五月婷婷丁香五月婷婷| 天天爽日日搞| 久久久久这里都是精品| 久久综合中文| 激情六月丁香| 99爽视频| 五月丁香婷草| 九九精品热播| 亚洲av无码精品色午夜| 94干大香蕉| 日韩av高清| 九九99精品视品| 99久久人妻精品无码二区| 天天综合色| 久久这里有精品| 久久天天| 天天在线XXX| www.minyis.com【JT】实力收量可预付QQ2101460746 | 激情网第九色| 九九色热| 99视频色在线观看| 色五月丁香五月五月婷婷| 五月天婷婷色在线视频免费观看 | 丁香五月网站| 青草青草久热这里只有精品| 久久丁香| 婷婷国产综合| 99久久国产宗和精品1上映| 色久播播| 亚洲婷婷五月草久| 操逼福利视频| 亚洲 激情 中文| 久久成人天| 成人αV视频免费观看| 色综合综合色| 丁香五月人妻| 这里只有精品久久| 久激情网| 99爱视频在线观看| 国产精品第一国产精品| 99在线精品免费视频| 亚洲网综合在线| 色狠狠色综合久久久绯色aⅴ影视| 五月日韩中文字幕| 国产AV一区二区三区最新精品| 国产精自产拍久久久久久蜜| 爱爱网址9| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 狠狠色综合网站久久久久| 中文av网| 成人无码精品1区2区3区免费看| 欧美成人猛片AAAAAAA| 91夫妻视频| 婷婷五月天天激情| 成人av观看| 天天射美女| 六月激情久久婷婷| 99精品无码网站| 五月丁香六月婷婷在线| 久久亚洲无码| 婷婷六月丁香五月| 免看黄大片AA | 午夜少妇在线观看视频| 亚洲成人AV电影在线| 在线综合啪| 五月丁香婷婷成人版| 7超碰自拍| 26uuu四色| 精品久久久久久久久久久久人妻| 夜夜爽天天干| 91丨九色丨大屁股| 麻豆AV一区二区三区| 在线日本www| 色九月欧美| 婷婷五月天AV网| 五月花婷婷最新| 人人射av| 婷婷五月天堂一本在线| 人妻激情综合| BBWCUCKOLD精品熟妇| 91嫩草国产线观看亚洲一区二区| 9九色首页| 色久婷婷五月| 99热这里只有精品18| 有哪些A片网站| 五月天激情亚洲| Blackedraw视频一区二区| 欧美啪啪五月天| 色婷婷五月天中文字幕| 伊人9999| 久久性爱视频| 婷婷婷婷午夜| 久久婷婷综合网| 婷婷色色播五月天| 91凹凸在线| 婷婷六月激情| 丁香五月婷婷影视先锋| 99在线精品视频| 五月婷婷和六月| 丁香五月婷婷网| 五月天伊人| 久久您您综合网| 97碰久久| 精品三区影院| 五月天婷婷色综合| 激情五月婷色| 成人色站,在线视频,看片-SS1AV| 丁香久月| 五月丁香婷婷五月色| 久久精品五月天| 99er6| 天天爱天天操| 97caop| 国产成人+综合亚洲+天堂| 天天爽夜夜爽| 亚洲第一综合| 97久久五月丁香婷婷| 婷婷五月天美女| 日日夜夜噜噜爽爽| 精品人妻一区| 超碰高清在线| 五月色俺婷婷| www.99热| 99九九玖玖| 国产成人va在线| 久久婷婷成人综合色怡春院| 丁香色五月AV在线| 26uu| 欧洲毛片基地c区| 日本久久9| 丁香婷婷六月天| www.99色| 成人色图情色成人网 www.5b5b5bcom 五月天 | 亚洲婷婷五月天| www.婷婷| 91大神操美女| 国产视频婷婷| 天天日天天肏天天奸| 色婷婷基地| 99∨VTV| www...com黄在线观看| 五月丁香综合网色欲| 久久人人妻| 婷婷丁香九色| 五月情四婷婷| 99久久极情精品一区| 五月婷婷欧洲| 五月丁香六月色婷婷| 亚洲操B| 91超级碰在线视频| 人人草人人爱| 超碰免费电影| 精品成人无码A片观看香草视频| 97人人操人人爽| 嫩草国产| 婷婷五月天激情诱惑| 性做爰A片免费视频A片直播| 丁香色情五月天| 大香蕉综合| 久久99大全| 夜夜干 夜夜操| 久久丁香综合香蕉| 玖操97| 婷婷五月在线视频| 日日日,com| 99热综合网| 午夜丁香 婷婷| www,天天干| 99久久人人| 久久这里有精品在线观看| 国产SUV精品一区二区883| 99视频色在线观看| av人人干| 人人草成人视频| 亚洲情欲| 丁香六月婷婷缴情欧美| 丁香色婷婷| 激情五月天激情网| 国产亚洲色婷婷久久99精品91| 激情五月综合网| 婷婷性爱| 久热这里只有国产| 97在线视频观看| 五月天激情小说| 91丨九色丨东北熟女| 91视频免费后入强操| 午夜九九九九九九九九九九九九九| 天天综合91入口| 伊人在线视频| 色色色区| 色色五月丁香婷婷| 色色婷婷五月天| 婷婷精品| 色五月婷婷激情综合网| 视频在线免费观看欧洲乱码| 久久综合久色欧美综合狠狠| 亚洲国产精品VA在线看黑人| 婷婷五月伦理网站| WwW色婷婷| 婷婷五月天色综合| 亚洲殴洲精品Av在线| 五月天综合在线观看| 97成人超碰免| 五月 成人 婷婷| www.超碰在线| 色五月激情网| 亚洲男人的天堂婷婷色五月| 99综合入口| 另类图片五月天| 午夜激情综合| 婷婷综合久久| 丁香六月天色婷婷| 丁香五月ⅤA久久久| 六月婷婷激情| 亚洲乱啪| 亚洲国产成人综合| 国产裸舞福利资源在线视频| 免看黄大片AA | 99免费热视频| 色情婷婷。| 色五月激情| wwccc久久久| 99操网站| 丁香五月婷婷手机| 日本啪啪网| 日韩成人电影AV| 欧美日本一区二区三区| 天堂网色色| www.久久| 丁香五月婷婷亚洲另类| 黄色91在线观看| 91超级碰| 丁香五月电影| 新激情五月天| 久久久无码精品成人A片小说| 九色视频91| 色135综合网| 久久美女五月天| 成人精品在线| 激情综合色五月丁香| 丁香五月天资源网| 大香蕉婷婷丁香天堂AV| 狠狠爱成人综合网| 99热主页日本| 六月丁香婷婷网| 亚洲AV永久无码影院黑人| 五月丁香啪| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇| 丁香九色不卡aaa| 婷婷综合久久| 人人爱天天摸摸天天爱| 色婷婷香蕉丁丁网| 99久久久久| 天天婷婷综合亚洲亚洲| 色五月丁香六月资源站| 九月婷婷综合色干| 久热99| 丁香九月婷婷色| 91九色无码日韩| 少妇大叫太大太粗太爽了A片| 婷婷五月激情视频在线| 99re这里只有精品99| 91在线97视频| aa久久| 人妻尝试久久久久久久久久久久| 久久9热| 亚洲视频一区| 99精彩视频| 伊人婷婷五月| 91精品久久久久久77777| 激情综合网激情五月丁香五月俺也去| 婷婷五月天Av| 婷婷综合五月色播| 色五月综合网| 日本三日本三级少妇三级66| 日韩成人电影AV| 丁香六月婷婷色XXXX| 久久精品4| 丁香五月天堂亚洲社区| 五月激情小说| 天天射天天射一道本日本社区 | 99久久久久久www| 俺去也在线官网| 亚洲六月色婷婷| 色婷丁香91| 婷婷导航| 婷婷五月天伊人| 99热在线中文字幕| 99综合免费视频| 激情综合另类| 亚洲中文字幕在线观看| 操碰91| 99re热视频这里只精品| 免費亭亭成人| 国产熟女一区二区三区五月婷| 丁香五月亚洲综合| 五月丁香亭亭| 99热伊人| 天天干,天天日| 日韩人妻操逼视频| 婷婷五月天最新综合你懂的 | 五月婷婷丁香六月| 天天综合天天做天天综合| 天天插天天爽| 激情伊人| 五月天激情综合在线| 99惹在线精品免费观看| 国产激情综合五月久久| 亚洲午夜精品久久久久久人妖| 五月天亭亭俺也| 东京热五月婷婷| 综合xx网| 五月丁香久久呀| 亚洲热综合网在线观看| 99性感视频| 丁香五月天五码婷婷| 婷婷综合六| 丁香在线视频| 婷婷六月爽| 超碰资源在线| 情色婷婷五月天| 97超碰色| 狠狠色97| 婷婷久久国产视频| pom538精品视频| 玖玖无码中文| 激情 婷婷 插| 久久综合丁香激情五月| 婷婷五月天综合久久日美女| 操逼福利视频| 亚洲婷婷丁香五月| 色永久| 中文字幕成人版| 97色色色| 性爱激情五月| 五月丁香成年黄色| 五月天社区婷婷| 婷婷综合五月| av狠狠操| 91碰碰| 日韩操逼大片| 六月丁香色婷婷| 国产欧美熟妇另类久久久| 91婷婷搞| 久机视频这只有精品| 亚洲精品一区无码A片| 婷婷精品在线| 五月婷婷在线视频观看| 欧美交换配乱吟粗大25P| 午夜免费高清AV片| 色色婷五月天| 久久婷婷五月| 日本久久人| 久久色这里只有精品| 色伦专区97中文字幕| 91操人| 国产无人区大片| 中文字幕婷婷9月天| 日本三级第一页| 国产SUV精品一区二区883| 日韩成人无码| 伊人久久丁香狠狠婷婷综合香蕉| 色婷婷六月| 婷婷五月丁香青青草在线| 日本WwW色偷偷丁香花久久久京东热| www.99久| 五月丁花六月丁香综合| 久99久视频精品| 日本va网站| 俺去也五月| 亚洲黄色精品| 久久精品性爱| 琪琪狠狠干| 狠狠干2007| 狠狠操狠狠| 婷婷综合视频| 啊v视频在线观看| 五月丁香六月在线| a网站免费观看| 国产在线aaa片一区二区99| 亚洲视频综合网| www91色网站| 欧美色碰| 97资源碰碰| 国产精品人妻在线网址| 六月丁香婷婷色狠狠久久| 欧美美女国产日韩一区二区久| 亚洲尤物在线| 六月丁香综合网| 欧美日韩AAA| 大婷婷色呦呦噜噜色呦呦噜噜| 26uuu丁香婷婷五月| 久久香蕉网| 亚洲V国产V欧美V久久久久久| 国产精品久久久久久妇女6080| 九月婷婷在线观看| 亚洲色情网站| 99操网站| 亚洲色情网站| 亚洲综合碰| 天天xxxxxx天天日| 天天干天天av天天射| 激情宗合哪里能看| 五月婷婷丁香五月| 99热欧美在线观看| 天天做天天爽| 国产精品天天狠天天看| 91色综合久久| 大香蕉伊人爱在线| 任我鲁这里有精品视频| 五月熟妇婷婷久久| 直接看的AV| 婷婷六月色| 日韩黄色影院| 26uuu偷拍亚洲欧洲综合| 91狠狠色丁香婷婷综合久久| 丁香五月婷婷精品视频| 色99网站| 丁香五月激情五月| 五月天婷婷激情六月久久| 色九亚洲| 婷婷丁香五另类网站| 99热九九热| 亚洲AV网站| 婷婷性爱| 色综合香蕉视频| 五月色情婷婷| www.色五月.com| 99热久| 91久女| 婷婷激情四射五月天| 五月总合激情网| 激情伊人六| 色欲午夜无码久久久久久张津瑜| 五月丁香婷婷啪啪| 9在线9在线婷婷在线国产| 丁香五月亚洲激情婷婷射| 天天综合网亚洲综合网| 五月丁香亭亭操逼| 超碰成人公开| 九九色网| 激情五月天激情综合网| 天堂久久大香蕉| 欧美视频五区| 99久久综合| 五月天伊人| 婷婷五月天激情AV影院| 天天揷综合网| 视色综合| 超碰精品国产首页| 亚洲另类婷婷综合| 婷婷五月激情的图片| 大地资源色婷婷视频在线 | 无码视频国内精品久久久| 九色 在线| 九玖欧洲亚洲| 亚洲无码成人| 色九九中文字幕| 99热乎| 色色综合网络| 97在线观看| 五月天激情四射| 婷婷六月丁香欧美视频在线| 天天日天天插| 玖玖色综合网| 人人射人人高潮| 六月丁花香啪啪激情欧美| 久久精彩免费视频精彩免费视频| 这里只有精品在线视频在线观看| 国产成人精品亚洲线观看| 婷婷丁香激情综合色情| 狠狠色丁香婷婷基地| 免费97碰碰| 婷婷激情六月中文| 99爱免费在线观看| 天天射美女| 婷婷色基地在线看| 色婷婷色情| 婷婷九月激情| 99草视频在线观看| 26uuu另类| 国产肥白大熟妇BBBB视频| 免费婷婷| 五月婷婷六月丁香在线| 国产在线aaa片一区二区99| 久久久com| 色婷婷在线视频| 久久五月天激情| 激情q青青草在线婷婷| www.久久久久久久| 亚洲人成播放网站| 成人短视频在线观看| h在线看免费版在线看| 激情文学综合婷婷五月天丁香花| 99er这里只有精品| 五月天激情图片| 免费看成人747474九号视频在线观看| 狠狠五月天激情| 99人人干| 99日逼视频| 高清无码入口| 狠狠色综合无线观看| 六月婷婷色宗合| 精品一二三区久久AAA片| 中文字幕成| 天天干 夜夜爽| 午夜不卡久久精品无码免费| 国产精品色婷婷AV综合色色| 操操啪| 亚洲九九99精品视频在线播放| 五月婷婷偷拍| 激情五月激情综合网一级丸片 | 亚洲五月花| 噜综合| 一级性感毛片| 开心五月婷婷| 五月婷婷六月丁香综合在线| 4399亚洲视频| 久久五月婷天天干| 五月丁香久久网| sewuyuejiqingwang| 26.uuu丁香五月婷婷| 国产亚洲精品AAAAAAA片| 婷婷淫淫狠狠六月| 国产在线6| 99热色婷婷| 北京熟妇搡BBBB搡BBBB| 国精产品一区一区三区有限公司杨 | 五月天色综合| 五月综合视频在线| 色月丁| 年轻的妺妺伦理HD中文| 中文成人在线| www.五月天婷婷姐姐| 色色色综合色| 丰满少妇猛烈A片免费看观看 | 色综合婷婷| 激情爱爱网站| 五月婷婷与六月丁香图片激情| 色婷婷文字幕| 色噜噜狠狠色综无码久久合欧美| 男女免费视频999| 欧美成人五月天| 亲子乱av一区二区三区的| 五月丁香激情婷婷| 欧洲一区二区| 97超美国视频在线观看| 天天艹夜夜艹| 日日爽天天| 激情综合五月激情XXXX| 婷婷玖玖五月天| 久婷婷视平| 九九热在线视频观看| 99爱视频免费| 综合在线丁香五月| 啊V视频在线观看| 婷婷在线日韩综合| 激情五月天 婷婷| 九九精品亚洲| 99成人| 久久人人九| 91久操| 蜘蛛女免费观看完整版高清电影| 欧美性做爰大片免费看办公室| 丁香婷婷啪啪啪| 嫩草综合网| 伊人天天色| 久久婷婷五月天丁香| 丁香五月98| 综合久久激情久久| 六月丁香六月婷婷欧美| 色色六月| 这里有精品| 日本三级日本三级三级人妇四虎| 国产午夜一区二区三区| 欧洲S级在线观看| 色99网| 97人人草| 久久精品99国产精品日本| 丁香五月激情视频| AV大片在线观看| 香蕉国产2013| www色婷婷久久综合久色 | 国产成人片| 婷婷丁香人妻天天爽| 性天堂久久| 色丁香五月综合网| 天天人人天天爽| 丁香五月色| 五月天丁香婷婷社区| 九九九激情网| 日韩成人无码| 五月天婷婷中文字幕在线播放| 99久久久精品| 67194成I人在线观看线路1| 热这里只有精| 综合九九久久| 色色色干| 黄色99网| 国产免费av在线| 丁香五月成人| 丁香五月丁香伊人| 五月丁香亭亭电影久久| 久久思思热| 婷婷第六色| 六月色 亚洲| 五月激情啪啪| 五月激情精品视频| 色五月婷婷1| 色综合色| 亚洲激情网站| 91Chinese在线| 久久婷婷综合五月| 超碰99在线观看| 五月丁香青草综合啪啪| 操日本色| 日本色五月| 五月天婷婷导航| 国产精品日日躁夜夜躁| 996er热| 久久开心五月婷婷| www.日本91| 国自产拍偷拍精品啪啪一区二区| 综合婷婷五月天| 五月天婷五月天综合网在线观| 色久99| 午夜丁香| 久久视频这里99| 中文无码婷婷| 国内精品免费一区二区2009| 色婷久久| 开心五月深爱婷婷| 天天拍夜夜撸| 狠狠色丁香久久| 91.www综合| 亚洲人妻电影| 婷婷色五月噜噜| 97久久久免费福利网址| 色屌丝中文字幕| 五月天社区| 九九色婷婷| 激情综合五月| 婷婷99视频精品| 久久婷婷丁香六月天| 欧美精品999| 免费视频1区| 天天舔天天插天天爱| 一本色道久久综合狠狠躁小说| 五月婷婷五月| 亚洲精品视频在线播放| 免费视频99| 亚洲日韩欧美综合VA| 99re这里只有精品首页| 777久久综合视频| 婷婷久久欧美| 亚洲成人综合在线| 开心五月综合激情网| 久草婷婷视频| 99热观看| www.久操| 欧美123区免| 色丁香五月| 五月丁香啪。| 99在线观看亚洲| 永久的网站AAAA | AV成人在线播放| 99精品视频免费观看近期发布| 久久婷婷视频| 久久五月天婷婷| 青娱乐美女福利视频美臀| 久久久精品视频79| 激情婷婷22月间| 性欧美大战久久久久久久83| 欧美色婷婷| 婷婷五月天免费视频| 艹| 激情综合色| 一起肏在线视频| 激情五月婷黄版| av在线免费播放| 午夜天堂啪啪| aaaaaa片| 深爱五月亚洲| 丁香久色| 99热这里只有精品86| 婷婷情色五月天| 99视频精品在线| 无码免费人妻A片AAA毛片西瓜| 97超碰,人人舔,人人操,人人摸| 久久久9久| 人人妻人人澡人人爽| 丁香六月色婷婷| 精品久久人妻热| 五月丁香六月婷婷婷婷| 久久综合激情五月天| 国产精品视频免费看| 大香蕉九九操| 成人精品视频99在线观看免费 | 久久精品在线| 五月丁香六月婷婷啪啪综合| 色五月首页| 一区二区三区XXXXXX| 牛牛色av| 玖玖婷婷免费| 久久免费高| 熟妇人妻中文字幕无码老熟妇|