欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,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
返回資訊列表
狠狠草在线观看| 天天插天天射| 色五月 激情婷婷 综合五月天| 婷婷五月天天| 亚洲激情AV| 色噜噜狠噜噜视频| 亚洲av骚货| 久久五月天激情婷婷| 亚洲欧美日韩另类| 視频福利乱色| 国产精品久久久久久久久久免费| 人人操五月天| 亚洲无码11| 91互操| 开心六月婷| 热99色| 九九aV| 亚洲狠狠操| 日韩欧美五月丁综合| 七月丁香婷婷 色色| 色婷婷六月| 裸体美女丁香五月天。| 天天综合在线网| 久久婷婷六月天| 色九九七七| 黑人巨粗进入警花疼哭A片| 亚洲乱码日产精品BD| 亚洲天堂色色| av在线免费网站| www,五月天激情| 色五月婷婷777| 丁香 久久| 大香焦A∨| 91啪啪视频| 97色永久免费视频| 激情网五月天| 欧美内射AAAAAAXXXXX| 狠狠色综合网| 色五月婷婷在线| 五月丁香黄色视频| 亚洲熟妇AV乱码在线观看| 小视频久久久aaa| 庭庭久久内射| 79色色色色| 五月婷婷综合激情| 婷婷五六日| 五月天婷婷六月激情网| 五月丁香婷婷激情在线| 天天做夜夜爽| 色五月色图| 97碰 在线视频观看| 性生生活大片又黄又| 五月丁香啪啪啪| 亚洲激情综合| 久久精品A片777777| 开心婷婷五月| 99视频综合| 色啪久| 九色99视频| 九九在线热九九在线热99热| 狠狠色噜噜狠狠亚洲A∨| 丁香激情网| 久热大香蕉| 人人干人人看| 91919191919久久成人视频| 熟妇无码乱子成人精品| AV电影在线播放| 色婷婷综合久色AV五色最新| 丁香六月婷婷综合激情欧美 | 五月天色婷婷网| 淫荡综合网| 亚洲久久婷婷| 色欲午夜无码久久久久久张津瑜 | 97操操操| 风流少妇A片一区二区蜜桃| 国产亚洲精品久久久久久郑州| 欧美大片| 丁香五月婷婷五月| 夜色.cnm| 性爱在线播放av| 欧美搡BBBBB摔BBBBB| 第四色激情网| 射婷婷中文字幕| 综合久久综合五月天婷婷| 五月丁了香蕉综合| 丁香五月综合亚洲| www久| 婷婷五月欧美综合| 欧美六月| 五月激激激情综合网| 色五月播五月| 天天摸天天做天天爱天天爽| 五月天综合| 国产AV一区二区三区最新精品| 婷婷激情五月天桃花网| 婷婷六月丁香在线| 久狠日av| 成人一级片| 久久网站免费亚洲| 激情久久综合网| 久久精彩视频| 伊人九热| 91婷婷视频| 91成人看片| 欧美噜噜免费观看| 97色天堂| 亚洲AV电影av| 丁香五月天婷婷久久| 自拍盗摄 另类| 极品少妇高潮啪啪AV无码| 国产午夜精品一区二区三区四区| 欧美精品999| 99热精品在线观看| 一区二区成人电影免费播放| 久久之人妻| 精品免费99| 婷婷色五月噜噜| 亚洲十月婷婷综合| 亚洲人妻av伦理| 亚洲成人网站在线| 五月天六月婷| 丁香激情四射| 久久伊人婷| 天天色激情| 九九AV在线| 亚洲春色奇米影视| 开心婷婷五月激情网小说| 狠狠干综合网| 精品久久婷婷五月天| 五月婷婷精品无在线| 九九99精品视频在线观看| 亚洲网综合在线| 7777激情基地| 丁香五月性| 久久一级免费黄色片| 色五月激情五月丁香五月婷婷啪啪综合 | 啪啪激情网站| 国产精品日本一区二区在线播放| 色婷婷婷av| 丁香婷婷久久| 五月婷婷欧美| 日韩在线一级| 五月婷婷色色色| 99在线视频精品| 99精品一二三四视频| 99天天操夜夜操| 色婷丁香五月| 伊人激情AV一区二区三区| 六月婷婷久久| 中文字幕丰满乱孑伦无码专区 | 爆乳熟妇一区二区三区爆乳照片| 色五月五月婷婷| 五月婷婷六月丁香在线| 九九色之九九色88| 色播激情婷婷| 热99re| 无码少妇高潮喷水A片免费| 丁香五月色| 久久婷婷五月综合97色一本| 热九九精品| 色婷婷播放| 91欧美日韩综合| 综合色五月| 欧美一黄一色一乱一伦| 天天综合在线网| 色天使色综合| 五月婷婷五月色| 嫩草视频。| 思思re视频在线| www久久久久久久久久久| 午夜理论片最新午夜理论剧| 国产黄大片在线观看画质优化| 久久婷婷成人视频| 五月婷久久综合| 天天日,夜夜爽| 婷婷五月在线影院| 人人干女人| 久99婷婷色综合| 色色丁香色五月| 九九99精品视频在线观看| 午夜丁香久久久久久| 丁香五月激情澎湃一区| 97在线日韩| 久久婷婷久久| 婷婷五月六月丁香综合| www.zbzhongsen.com| 五月丁香啪啪| 99成人无码| 99精品无码| 99er6| 欧美性生交XXXXX无码小说| 丁香五月激情六月| 婷婷色吧| 九九十99视频| 五月天激情国产综合婷婷婷| 99热只有| 五月婷婷网久久| 性爱久久| 思思久ren热| 婷婷五月丁香基| 五月婷婷激情综合网| 97五月综合网| 婷婷99狠狠| 五月天久久www| 国精产品一区二区三区| 96丁香六月婷婷蜜桃综合久久| 丁香五月大片| 另类天堂| 色色999三级片| 六月99天天婷婷激情综合| 色播五月丁香| 超碰资源在线| 伊人久久丁香狠狠婷婷综合香蕉| 婷婷色色丁香五月天| AV大香蕉| 99ri精品在线| 91中文狠狠综合| 欧美日朝成人| 色色色色色热| 日韩人妻无码专区| 99亚洲视频| 99热最新国内| 欧美A片在线视频免费观看| 激情五月婷在线精品| 五月婷婷深深爱| 亚洲成人综合在线| 九九re精品视频在线观看| 人人爱天天摸摸天天爱| 思思色播| 97成人在线视频精品| 色吊丝中文字幕| 五月激情综合网| 天天弄天天爽| 9精品视频在线观看| 亚洲精品久久久久久久久久飞鱼| 99欧州偷拍视频| 天天插轮理| 婷婷射图五月天| 成人短视频在线免费观看| AV激情五月| 综合激情九月婷婷,激情综合婷婷中文字 | 色色婷婷五月| 另类视在线| 丁香五月激情五月色综合| 99热这里有精品| 九色PORNY自拍成人精彩视频| 丁香五月影院| 久久婷婷视频| 99热资源在线| 欧美婷| 91九色精品熟女内射| 亚洲无aV在线中文字幕 | 日亚二欧美| 六月婷婷五月天| 婷婷色欧美激情| 五月丁香六月婷婷亚洲| 久久婷婷五月综合伊人| 久久机热思思热| 九九热这里只有精品556| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 丁香六月婷婷开心| 亚洲综合五月天综合| 亚洲中文无码成人| 天天肏天天爽夜夜爽| 色五月婷激情| 五月婷婷六月色| 欧美成人色婷婷| 开心激情久久久久久久| 99色色最新视频| 久久人妻久久久久| 色天天综合天天综合频道。| 综合色色网| 五月天伊人久久久久| 久久婷网| 亚洲不卡| 婷婷色五月色妇| 九九色热视频| 五月婷婷综合激情| 五月丁香婷婷欧美色图视频五月丁香777电影 | 婷婷五月天激情综合| 久久久999精品| 99碰碰中文| 99热精品在这里| 人妻精品久久久久久| 天天高潮夜夜爽| 99色在线| 欧美激情综合五月色丁香| 五月天操逼激情| 97色视频网| 丁香五月色五月| 九九色婷婷| 秋霞学生妹一二级| 99在线免费视频| 五月丁香综合激情| 香蕉久久国产av一区二区| 人五月天婷婷喷水| 五月丁香婷婷啪啪网| 毛v一区二区视频| 九九精品re免费视频| 色综久久久| 超碰五月婷婷五月天| 色吊操色妞| 亚洲视频在线网| a毛片二逼wwwwwwwwww| 五六月婷婷久久| 国产操逼网站| 丁香六月婷婷开心| 无码G高清天| 五月亭亭六月激情| 五月婷婷基地| 在线超碰91| 美女激情综合| 日本天天色| 久久草大香蕉| 五月天婷婷色小说| 久久久久婷 | 五月婷天天搞视频| 欧美顶级少妇做爰HD| 天天肏高清在线| 欧洲日韩一区二区三区| 99国产在线| 性爱激情久久| 99热99色| 精品无码色| 五月丁香花激情综合网| 九九re精品视频在线观看| 99热老网站| 日日夜夜干| 九九视频在线观看视频6| 九九XX视频| www.久久婷婷| 丁香五月婷婷久久久| 六月色国内综合| 亚洲综合激情五月久久| 天天射影院| 四色五月婷婷| 天天做天天爱高潮片| 综合色天天| 激情五月婷婷网| 激情婷婷| 91干在线视频| 五月在线婷色| 五月天丁香综合久久国产| 色播五月天激情| 午夜丁香久久久久久| 超碰三级片| 天天摸天天舔天天爽| 日韩AV大全| 丁香五月在线| 婷婷综合日本| 丁香五月激情澎湃一区| 激情五月丁香五月| 五月综合丁| 热99热9| 亚洲另类在线观看| 九九成人精品免费视频| 久热大香蕉| 噜噜噜狠狠色综合| 99精品在线播放| 激情五月综合视频| 色五天综合| 天天干天天干天天干天天干天天干天天 | 精品一区久热| 99热在线看| 丁香五月综合首页| 91九色|疯狂|高潮|对白|| 亚洲无码成人网| 色色99| 9久热在线视频精品| 婷婷综合五月天| 久久婷婷五月综合色丁香| 久久ab| 五月天社区婷婷丁香社区| 色色com| 婷婷狠狠97| 狠狠色97| 五月天婷婷在线观看精品男人| 俺去也婷婷| 亚洲综合网激情小说| 第九色区av天堂| www.五月天婷婷姐姐| 91丁香色| 激情综合99| 五月婷亚洲精品AV天堂| 六月成人网| av中文网站| 五月丁香视频色色| 九九激情网| 人妻操日日| nvrentiantang av| 久色网| 狠狠精品干练久久久无码中文字幕| 久久五月人人摸| 疯狂做受XXXX高潮A片动画| 狠狠干2007| 97色射| 五月天亚洲色| 俺来也综合网精品一区| 国产成人精品一区二三区熟女在线 | 欧美婷婷综合| 人人操人人爱丁香五月| 丁香婷婷六月天| 人妻中文在线| 九九热免费| 91丨九色丨熟女丰满| 99热这里全是精品| 丁香午夜天| 色婷婷97| 国产av网| 精品久久久人妻| 五月丁香六月婷婷婷婷| 26uuu精品一区二区| 久9视频| 欧美综合五月丁香五月天| 五月天丁香久久| 大香蕉av在线| 五月天社区婷婷丁香社区| 91se在线视频| 五月婷婷,六月婷婷| 九九激情网| 人妻尝试久久久久久久久久久久| 超碰人人干| 三年高清大片免费观看国语| 9精品在线| 婷婷五月天无码视频| 久久超级碰视频| 狠狠综合网| 99re6久热只有精品6在线直播| 9.1综合网| 91狠狠色丁香婷婷综合久久狠丁香综合久久精品| 丁香五月人妻| 99久久99久久综合| 天天干天天拍| 久久成人天| 色级停停| 中文av网站| 色婷婷狠狠色| 五月丁香婷婷色| 最新婷婷五月丁香| 人与禽A片啪啪| 狠狠狠狠狠狠狠狠| 99狠狠色| 五月天综合在线观看视频| 日本精品99网站| Caop在线| 男女av免费看| 欧美日本免费一道免费视频| 精品影院| 色香蕉影院| 日韩久久色| 色婷婷色五月天| 丁香五月网| 蜜臀AV在线成人| 91久久免费| 99热日韩| 天天综合天综合| 六月丁香啪| 中文字幕日韩成人| 玖玖综合色| 综合www色| 丁香亚洲色综合| 丰满少妇猛烈A片免费看观看 | 26uuu欧美日本| 99热免费在线| 激情婷婷网| 青青草蜜臀| 另类五月婷婷| 五月色情网| 日韩av干| 五六月丁香激情视频| 色欲婷婷夜夜| 色青五月天| sewuyuejiqingwang| 丁香五月天啪啪| 67194国产| 久久精彩视频| 伊人在线视频| 国产一级黄色影片,| 五月丁香另类网| 超碰婷婷五月| 狠狠色九月| 婷丁香五月天| 九九九这里只有精品| 色婷| 色丁香五月| 在线看片av| 丁香五月天激情| 色婷网| 深爱 五月天| 第四色色六月色综合| 成人天天爽| 五月婷婷激情69| 欧美色色色| 婷婷五月色播放| 第二色AⅤ| 在线观看av网站| 秋霞AV吧| 丁香九月激情| 26uuu精品一区二区| 思思热在线精品视频| 亚洲国产精品SUV| 色色综合网www| 午夜福利成人AV91| 欧美性二区| 颜射 精品性爱av| www.色擼擼.com| 日本色婷婷| 久热9| 色情终和网| 亚洲激情| 丁香六月天婷婷色| 婷婷六月色| 五月婷婷AV| 丝袜熟女一区二区三区| 亚洲无线视频| 思思久久96热在精品国产,| 亚洲五月天婷婷在线| 六月婷婷激情图片| 五月综合人妻| 激情综合五月天| 第四色婷婷五月| 天天久| 色五月天综合网| 偷偷与邻居做爰完整视频| 五月天婷婷丁香人人操91| 色五月婷婷基地| 极品五月天| 97人人射| 精品九九婷婷| yazhou seshipin| 天天插天天插| 9|人妻人人操| 噜综合| 五月丁香六月婷婷在线| 91久久久久久久| 操婷婷基地| 久久五月天激情婷婷| 综合成人小说婷婷| 日韩欧美不卡| 丁香五月天在线视频| 2025色婷婷| 激情五月天综合网| 五月丁香啪啪婷婷| 婷婷五月丁香五月综合网| http:色情日本com| 色丁香五月| 色玖玖| 色色性爱视频| 91丨九色丨43老版熟女| 中文字幕视频在线播放| 天天爱天天做综合| 五月婷婷激情中文字幕| 1024欧美看片| 丁香五月天无码| 久草大| 一本大道熟女人妻中文字幕在线 | 亚洲婷婷婷| 大香蕉久操| 第五婷婷伊人丁香| 久久这里只有精品视频1| 亚洲热综合| 丁香影院五月综合| 色月丁| 天天开心AV色综合婷婷五月天| 五月天色图| 97精品欧美91久久久久久久| 1区2区视频| 99碰| 丝袜激情网| 婷婷五月丁香四射| 思思热国产在线| 日韩精品视频中文字幕| 五月婷婷co.m| 五月丁香六月激情欧美综合| 成人视频一区| 大香蕉久久| 色5月婷婷色| 思思热视频在线观看| 六月99天天婷婷激情综合| 天天插天天插天天插天天插| 欧美丰满熟妇BBB久久久| 七七色综合| 五月丁香六月婷婷成人| 五月婷婷色丁香| 色婷婷丁香| 丁香六月激情| 在线观看国产高清视频免费网站| 91高潮喷水久久久久久久久| 丁香婷婷五月色成人网站| 99色区| 婷婷丁香五月天欧美| 日韩色色视频www| 五月婷婷六月情| 成人丁香五月天| 一区视频网站| 青青草免费公开视频| 亚洲成人av在线观看| 婷婷中文字幕| 毛片色五月| 一级性爱视频| 久激情| 丁香色六月婷婷| 天天操天天爱天天玩| 99热碰碰热| 中文字幕无码人妻少妇免费视频| 小骚穴电影| 色五月丁香激情视频| 开心婷婷中文字幕| 怡红院AV亚洲一区二区三区H| 日本理论久久| 天天做天天要天天爽| 色婷婷色99国产综合精品| 综合网色| 五月婷婷久久大香蕉| 五月丁香六月婷婷不卡免费无码 | 色婷操逼| 亚洲a色| 超碰九色| 伊人玖玖精品| 凹凸操Av| 婷婷伊人久久无码色五月| 久热黄色| 久久婷婷成人综合色怡春院| 亚洲中文字幕AV在线| 4399亚洲视频| 热99这就是精品视频| 99精品在线观看| 欧美性爱一区| 人妻操逼视频| 久久精品一区二区三区四区| 天堂网啪啪| 色色网站免费观看| 五月婷婷九| 99热这里是精品| 秋霞AV美国| 99热这里只有精品最新| 色综合激情| 综合99视频| 丁香五月激情五月| 五月丁香啪啪网| 99无码黄色视频| 五月亭亭六月激情| caop在线视频| 国产在线视频1234| 亚洲电影在线观看| 色婷婷婷婷| 99丁香五月婷| 婷婷夜夜操| 99久久a线观| 中文字幕97超级碰| 一区操| 伊人激情AV一区二区三区| 激情婷婷五月天| 五月丁香综合精品| 五月天另类小说亚洲| 婷婷丁香www视频日本韩国| 色色五月丁香| 丁香六月综合激情| 快色t v在线入口| 秋霞午夜理论| 色啪网| 日韩啪啪视频| 蜜桃婷婷狠狠久久| 影音先锋91在线资源站| 久久五月天综合| 色五月天丁香婷婷| 五月情综合| 五月天丁香六月综合| 久久总和99| 9热在线视频精品| 懂色av粉嫩AV蜜臀AV| 少妇被下春药玩弄A片| 五月丁香综合激情网| 亚洲视频操| 精品久久99码| 色五月婷婷大香蕉| 人人草人人看| 99久久这里只有精品| 热久久99热欧美国产亚洲| 五月天激情.com| 激情综合婷婷五月| 久久久久久草黄色片AV在线观看| 91色涩| 亚洲网站999| 任你日热视频| 丁香六月婷婷综合欧美| 色丁香五月| 97人凄人人操人人爽| 91日日日| 99综合视频一体| 婷婷五月丁香基地在线视频官网| 黄色一极大片| 婷婷99| 夜夜人妻五月天| 播五月婷婷开心| 久久与婷婷| 天天摸日日舔狠狠添婷婷婷 | 丁香五月色五月| 99在线资源| www.av视频xx999.com| 精品国产va久| 亚洲一区二区无码蜜乳av| 97五月天婷婷| 99热视精品| 色播五月| 99久久99久久综合| 成人精品视频99在线观看免费| 三级片AAA久久久AAA久久久AAA | 久久精品熟女亚洲AV麻豆| 西西4r午夜剧场| 成人一区在线观看| 天天想夜夜爽天天爽| 亚洲性爱99| 狠狠色婷婷| www.色婷婷.com| 十区AV| 亚洲色图五月丁香| 影音先锋 91工厂| 99久久激情视频| 亚洲精品久久久久久久久久吃药| 丁香六月综合激情| 五月婷婷视频啪啪美女| 亚洲成人在线播放| 粉嫩av懂色av蜜臀av熟妇| 99色婷婷视频| 中文字幕在线视频播放| 婷婷六月天国产综合| 伊人久久大香线蕉AV最新午夜| av在线免费网站 | 六月激情婷婷综合| 色婷五月丁香久亚洲| 五月丁香六月激情视频| 99精品免费视频| 老师高潮流白浆喷水的A片| 九九色院| 婷婷丁香五月综合激情小说| 色婷五月天| 青青草大香| 色五月综合在线| 成人做爰A片免费看网站找不到了| 日本不卡高字幕在线2019| 丁香五月天天| 五月激情开心婷婷| 亚洲AV人人操| 国产精品电| 97资源碰碰| 五月激情婷婷丁香天堂| 99这里都是精品| 色色色色色九九九九九| 99热 这里只有精品 国产 日韩| 色综合网综合| 99热网站| www.99久| 操人久久| 996re热精品视频| 天天日天天插天天操| 少妇人妻人伦A片| 久久久天堂国产精品女人| 天天爱天天日| 99操碰| 1024在线一区| 日亚二欧美| 夜夜操激情| 五月色导航| 97色色色色| 丁香五月影视| 久久免费丁香| 91精品国产综合久久蜜芽解析速度| 久久精彩免费视频| 成人片在线播放| 久久丁香综合| 99热99美国在线观看| 日本色色视频| 五月婷婷中文字幕| 操射国产日本| 丁香五月婷婷少妇| 九九av| 五月色婷婷影院| 日本久久婷婷| 超碰免费大香蕉| 99久操| 天天肏高清在线| 日韩无码乱轮| 久久天堂精品| www,com,五月色色| 久久五月婷婷丁香| 久久久久99精品成人网站| 激情五月天99色| 欧美婷婷九月| 69精品人人人人人人| 婷久久综合| 五月丁香趴趴| 婷婷九月亚洲| 99五月丁香丁| 这里只有精品视频视频在线观看| 婷婷 久综合| 五月丁香在线视频观看| 国产伊人五月天| 婷婷色色播五月天| 色情免费视频播放| www.国产色| 99精品在线观看| 丁香五月久久| 色色99| 国产乱人偷精品人妻A片| 亚洲V国产V欧美V久久久久久| 99精品国产在热久久| 51精品国自产在线| 一级内射毛片| 国精产品一区二区三区| 九九热99精品| 视频一二区| 久久婷婷五月丁香网| 丁香五月香蕉| 无码啪啪| 五月天婷爱综合| 丁香五月亚洲| 91精品久久久久久| 色婷婷丁香五月天| 色婷婷AV久久| 久久免费丁香| 婷婷色九月| 色七色九九| 色狠狠色狠狠| 亚洲第一综合| 伊人久久婷婷| 性做爰1一7伦| 婷婷丁香五月天操逼| 久久久全国免费视频| 一起草无码| 高清无码.com| 婷婷五月精品在线| 久久久这里有精品| 五月天啪啪啪| 99久久超级| 婷婷色基地在线看 | 国产午夜一区二区三区| 99久久国产宗和精品1上映| 伊人激情网| 丁香九月婷| 日本不卡五月婷婷丁香| 综合性爱网| 久九色| 国产免费性爱| 人人操人人干AV| 欧美色色色色色色色色色色影视| 久久婷婷激情视频| 婷婷99狠狠| 亚洲AV成人无码精品| 青青艹b| 九色 在线| 丁香婷婷基地| 婷婷五月AV| 久久婷婷综合基地| 久草热8精品视频在线观看| 视频1区2区| 久久激情综合| 国产精品A片| 丁香五月激情五月| 五月天婷婷激情四射综合| 五月天婷婷黄色视频| 婷婷综合精品视频97| 涩涩五月天| 五月婷婷黄色毛片| 欧美成性色| 婷婷狠狠干| 97在线精品视频| 激情五月天婷婷播播久久综合91| 丁香 亚洲 久久| 四色女婷婷| 婷婷亚洲天堂| 亚洲人人操| 久久激情视频99| 五月色综合| 国产精品18久久久| 99久久久久| 五月色俺婷婷| 国产精品18久久久| 男人視頻站| site:jszngf.com| 久久丁香五月天| 日本9区视频| 天天射影视综合网| 天天日日夜夜| 五月婷婷av| 99爱视频免费| 蜜乳AV成人| 婷婷狠狠久久| a在线观看| 五月天婷婷免费| 亚洲激情网| 色婷婷在线电影| 欧洲婷婷五月天| 自拍偷窥99热| 先锋资源婷婷| 亚洲视频图片婷婷五月| 黄网在线免费| 三区激情四射av| 婷婷丁香五另类网站| 欧美亚洲成人在线| 99亚洲色色| 一二线视频 另类| 深爱五月激情网| 久久98| 99爱99操| 99.色| 99热 精品在线| 婷婷五月丁香啪啪| 9久久久久| 丁乡久久| AV成人在线播放| 日韩黄色AV无码| 人人草开心五月天| 97成人视频| 色欲久久久久| 久久久久久久久久久久久久久久一道本| 99热久只有| 欧美99热| 亚洲夜五月| 五月丁香五月综合欧美| 中文字幕在线观看视频www| 精品久久9| 亚洲熟女乱色综合亚洲网站| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 热99免费在线| 亚洲av成人在线| 亚洲精品影视| 嫩草AV久久伊人妇女超级A| 级情九色| 欧美va国产va| 嫩草AV久久伊人妇女超级A| 天天舔天天| 丁香五月花影院| 五月婷婷成人网首页| 色婷婷成人做爰A片免费看网站 | 九月婷婷色色| www99在线观看视频| 日本色超碰| 亚洲综合色网| 9久久久久| 日日爽日日| 99精品自拍视频| 精品五月天| 婷婷丁香色五月天久久88| 极品少妇高潮啪啪AV无码| 热热久久久久久久久| www五月婷婷88导航| 狠狠色噜噜狠狠| 亚洲色色五月| 999婷婷综合| 玖玖99福利| 懂色av粉嫩av蜜臀av| 人妻啪啪啪| 99九九在线精品热动漫| 欧美日综合| 99色热综合| 日91高清无玛| 婷婷丁香五月激情| 色操b| 综合爱久久| 99热综合网| 六月婷婷七月丁香| 色很久综合| 999热在线视频| 99超在线| 极品五月天| 成人一级片| 色9色| 久久综合9| 久久新地址| 2w在线视频| 99五月婷| 五月婷婷基地| 成人婷婷深爱综合网| 亚洲人妻电影| 99色热| 啄木鸟丝袜美女福利视频| 亚洲综合草草| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 激情激情激情网| 亚洲热久| 99热久| 精品色| 丁香午月AV中文字幕| 葵花AV在线| 性一交一乱一交A片久久四色| 欧美丁香六月激情视频| 激情国产综合| 大香蕉520| 天天天日天天天干| 五月五婷婷网| 五月黄色婷婷| 大香蕉综合在线| 久久精品视频9| 伊人99热| 色婷综合| 婷婷久久大香蕉| 婷婷五月激情在线| av在线资源| 丁香婷婷激情四射五月| 亚洲热视频| 六月综合在线| 狠狠人人| 国产精品扒开腿做爽爽爽A片唱戏| 66成人网| 婷婷五月俺要去| 超碰a女人的天堂| 91九色偷拍| 99热亚洲| 精品色色| 婷婷五月天视| www99久久| 亚洲成人网址在线观看| 日韩aaa| 99精品在线| 久热这里只有精品66| 91久久婷婷| 婷婷综合偷拍| 成人做爰黄A片免费看直播室男男| 九九色逼| 这里只有精品视频在线| 丁香社区婷婷五月| bbwcuckold精品熟妇| 久久婷婷五月综合啪| 五月婷色| 亚洲六月色| 欧美日比视频| www,99热| 欧美日韩大黄| 色色操| 香蕉综合在线| 国产精品成人AV在线观看春天| 99激情视频| 丁香婷婷色色| 日本高清综合网五月丁香| 激情五月六月丁香| 热热久久精品视频| 婷婷综合在线| 日韩婷婷| 777久久久| 99色嘟嘟精品网站| 欧美日本韩国亚洲| 99热成人| 亚洲精品99| 色婷婷五月综合| 五月色婷| 综合久久久| 激情丁香九九五月综合网| 色色网站| 天天色,天天日,天天做| 日日操,夜夜爽| 五月色婷婷综合色| 丁香五月婷婷AV| 国产精品人妻在线网址| 婷婷五月六月| 欧洲电影在线观看免费版英语版| 婷婷色六月| 婷婷午夜天| 天天干夜夜想| 日本99视频| 99久久激情视频| 精品色色| 九九碰九九爱97超碰| 狠狠操狠狠| 亚洲五月婷婷| 婷婷开心青青草| 深爱五月激情网| 婷婷六月色丁香视频在线观看| 五月天色婷伊人| 亚洲色情免费网| 色情一区二区播放| 天天成人综合视频| 五月中旬婷婷丁香六| 99精品无码网站| 噜噜五月天综合| 99九九视频| 五月狠狠| 人妻操逼视频| 任你艹| 在线看的免费网站| 综合久久狠狠| 五月丁香婷婷色播无码| 免费超碰在线| 99碰网站| 综合激情肏逼网| 99 re视频一区| 色噜噜狠狠色综| 精品国产va久| 六月婷婷亚洲| 深爱五月激情| 综合色99| 日韩在线一级| 婷婷五月天影院| 操99| 国产精品久久久久久久久久| 久久五月婷婷综合网| 中文字幕高清av| 97人人操在线| 九九蜜臀精品| 五月丁香六月色婷婷| 天天操天天干天天日| 婷婷无码视频| 国产69久久久欧美黑人A片| 国产精品久久久海的味道| 就爱射中文字幕资源网| 婷婷五月激情六月| 99网99热| 婷婷五月综合在线| 日韩ww| 五月天狠狠色| 五月婷婷在线视频免费观看| 婷婷 亚洲图片 丁香| 激情五月婷婷六月丁香| 久热一本| 中国女人内射6XXXXX| 色婷婷亚洲综合av| 97成人丁香婷婷| 久99久精品| 人妻系列久久久久久久久久久| 天天色五月| 99成人| 97综合在线| 91丨九色丨老熟女激情| 爱性综合网| 99热在线观看这里只有精品| 91丨九色丨熟女丰满| 一本色道久久88加勒比| 超碰爱爱爱| 99久热这里有精品| 久久激情天堂| 久久99综合| 888久久久| 色八月婷婷| 天天爽,夜夜爽| 国产成人片| 人人搡人人| 91偷拍视频| 丁香五月开心婷婷| 97人妻碰碰中文无码久热丝袜| 亚洲成人在线观看av| 成人一区在线观看| 天天噪夜夜爽| 亚洲激情综| 亚洲激情四谢| 五月综合丁| 四虎成人精品永久免费AV九九| 99国产这里只有精品| 5月婷婷六月丁香| 婷婷五月激情网| 97成人丁香| 五月婷婷偷拍| 九九热这里只有精品31| 大香蕉520| 日韩成人电影Av| 99热这里只是精品| 久久丁香五月婷婷| 六月婷色| 丁香婷婷色五月| 91av传媒高清在线视频网| 激情九月婷婷| 99爱视频在线| 91人久| 久久这里这里有精品免费视频| 五月丁香六月婷婷激情视频在线观看免费| 五月色婷婷中文字幕| 九九美女视频| 久久婷婷欧美| 91久久久久久久久18| 亚洲综合1024| 噜噜吧天天爱| A片试看120分钟做受图片| 99ri在线视频| 五月丁香色综合| 欧美,日韩成人在线| 久这里只有精品| 99热免费观看| 五月丁香激情婷婷| 操操操Av| 亚洲一二三网| 99热久久最新地址| 思思99热| 久久久久久久丁香五月天婷婷| 婷婷五月天日日日干干干| 狠狠干综合| 无码啪啪| 久色中文| 日韩成人中文| 五月激情六月| 99在线热视频| 99精彩视频在线观看| 婷婷激情五月天亚洲综合| 高清无码网址| 欧美日韩婷婷五月天| 99精品视频在线| 99久视频| 99热这里只有精品10| 亚洲操b| 婷婷五月丁香六月| 大香蕉中文| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 欧美性猛交99久久久久99按摩| 九九热这里只有精品6| 六月婷综合| 色10月婷婷视频| 在线99热| www久久久久久| 一起草性爱不卡视频| 中文字幕婷婷在线| 五月婷婷激情69| 中文字幕有多少字| 丁香婷婷伊人| 色色丁香色五月| 五月天激情久久| 色婷婷9| 亚洲永久四色| 9久热| 亚州操人在线视频| 六月激情婷婷色| 色五月综合| 亚洲成人乱码av网站| 成人做爰A片免费看视频| 人人人人人人人人人草| 丁香五月大香蕉在线99| 五区毛片七区毛片| 超碰成人在线免费观看| 日本色视| 91九色在线视频| 婷婷91| 伊人天天色| 97大香蕉五月天| 五月婷婷视频在线观看| 欲求不满的人妻| 99综合网| 人妻爽爽爽久久久久久久久| 亚洲日韩一页精品发布| 天天综合网亚洲综合网| 一区二区你懂的| 午夜激情婷婷| 婷婷五月天成人五月天| 99原创自拍视频在线观看| 五月天激情日色在线| 免费观看18视频网站| 久狠日av| 9|无码久久久久久| 午夜丁香| 久99久热只有精品国产99| 啪啪东京热| 久久女婷| 停停色综合伊人| 97男人天堂| 色五月五月婷婷| 五月天婷婷久色| 婷婷五月欧美| 亚洲情欲| 欧美日韩99| 黑人巨粗进入警花疼哭A片| 婷婷开心激情五月激情网| 超碰在线免费| 日日夜夜天天| 婷婷激情社区| 欧美99| 欧美色偷偷大香| 色婷久| 五月丁香六月婷婷在线小说视频| 大香婷婷| 激情丁香五月天|