亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

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

免費在Windows模擬器上運行FreeRTOS命令行工程:從任務(wù)調(diào)度到調(diào)試技巧 簡介一份面向STM32嵌入式開發(fā)者的FreeRTOS命令行演示工程基于Windows下的集成開發(fā)環(huán)境Keil下載解壓后即可打開、編譯并燒寫免去手工移植和配置的繁瑣步驟。該工程通過串口中斷接收數(shù)據(jù)進而調(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解決得干脆——解壓、打開工程、編譯、進調(diào)試器FreeRTOS內(nèi)核就在模擬器里跑起來自帶的freeRTOS命令行能直接交互敲task-stats看所有任務(wù)的棧余量和運行狀態(tài)敲free-heap看堆剩余。不依賴真實硬件內(nèi)核行為與開發(fā)板一致。適合沒板子但想學(xué)RTOS調(diào)度機制的初學(xué)者適合硬件未到需要先驗證業(yè)務(wù)邏輯的工程師也適合研究命令行組件如何與RTOS任務(wù)共存的開發(fā)者。2. 工程解剖從目錄布局到配置項和啟動鏈路的完整骨架2.1 目錄結(jié)構(gòu)內(nèi)核、移植層、用戶代碼與CLI四塊分區(qū)拿到工程后第一件事不是點編譯而是先翻目錄。這套工程的目錄組織得很規(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)機切換、時間片輪轉(zhuǎn)、優(yōu)先級搶占。queue.c表面上只是隊列實際上信號量和互斥鎖的底層也是它——FreeRTOS的信號量是基于隊列機制實現(xià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的亮點了。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)先級繼承機制 */ #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ù)棧要單獨算常見做法是給任務(wù)開256到512字。configTOTAL_HEAP_SIZE管著所有任務(wù)控制塊TCB和任務(wù)棧的內(nèi)存來源。這個值開小了會直接導(dǎo)致xTaskCreate失敗開大了又浪費RAM調(diào)試期建議用xPortGetFreeHeapSize()打印剩余堆來反向校準(zhǔn)。configUSE_MUTEXES值得單獨說——互斥鎖和二進制信號量的區(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è)的初步配置然后跳進main()。main()里干的事可以歸納為三段初始化UART命令行要用、創(chuàng)建demo任務(wù)和CLI任務(wù)、最后調(diào)用vTaskStartScheduler()把控制權(quán)交給內(nèi)核。vTaskStartScheduler()一旦成功啟動就不會返回——它會創(chuàng)建空閑任務(wù)和可選的定時器任務(wù)然后觸發(fā)第一次上下文切換進入調(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ù)邏輯都被封裝進任務(wù)函數(shù)main()只做初始化和點火兩件事。3. 核心模塊拆解任務(wù)調(diào)度與命令行從注冊到回顯的完整鏈路3.1 任務(wù)創(chuàng)建與調(diào)度器啟動代碼級拆解打開main.c最先看到的就是任務(wù)創(chuàng)建。這幾乎是所有FreeRTOS工程的模板寫法/* demo任務(wù)1周期性打印運行信息 */ 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)用它之后會進入阻塞態(tài)把CPU讓給其他就緒任務(wù)這是理解RTOS多任務(wù)同時跑錯覺的關(guā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é)點掛到一個全局鏈表中運行時每條命令按名字逐一匹配。參數(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)在對共享資源的保護上。比如CLI的task-stats命令內(nèi)部要遍歷任務(wù)鏈表如果同時有別的任務(wù)在創(chuàng)建或刪除任務(wù)鏈表結(jié)構(gòu)正在變化遍歷就會讀到臟數(shù)據(jù)。常見做法是把命令處理邏輯放進去臨界區(qū)或互斥鎖保護但這層細(xì)節(jié)demo通常簡化處理真實產(chǎn)品里建議用xSemaphoreTake/xSemaphoreGive包住所有會并發(fā)訪問內(nèi)核數(shù)據(jù)結(jié)構(gòu)的路徑。4. 編譯與運行uVision4里從Build到敲命令的實操步驟4.1 打開工程與編譯選項核對工程文件是.uvproj后綴uVision4直接File→Open Project選它就打開了。打開后先做兩個檢查項別急著編譯。第一項在Options for TargetAltF7的Debug標(biāo)簽頁里左側(cè)單選按鈕必須選Use Simulator而不是某個調(diào)試器型號——這是不接開發(fā)板也能運行的前提。選了模擬器后右邊還能設(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ù)不影響運行但如果是implicit declaration of function就要當(dāng)回事說明某個頭文件沒包含或移植層文件漏加了。4.2 啟動模擬器與連接終端窗口編譯通過后按CtrlF5進入調(diào)試會話模擬器把ELF加載進虛擬的Cortex-M3內(nèi)核PC停在Reset_Handler。此刻按F5運行main()會執(zhí)行UART初始化和任務(wù)創(chuàng)建然后vTaskStartScheduler()接管控制權(quán)三個任務(wù)開始輪轉(zhuǎn)。接下來關(guān)鍵一步打開View→Serial Windows→UART#1。這就是模擬UART的終端窗口CLI任務(wù)的xUartReceiveByte讀到的字符就是在這個窗口敲進去的vUartSendString的輸出也會顯示在這里。注意UART#1窗口默認(rèn)可能不彈出需要在調(diào)試會話進行中主動打開。打開后鼠標(biāo)點進窗口輸入help回車如果能看到命令列表說明CLI鏈路完全打通了。4.3 用內(nèi)置命令驗證調(diào)度狀態(tài)運行穩(wěn)定后終端里依次敲幾條命令驗證內(nèi)核行為help列出所有注冊的命令每條命令的幫助文本也會顯示task-stats輸出一張表格列是任務(wù)名、狀態(tài)、優(yōu)先級、棧余量、任務(wù)編號。狀態(tài)列的X表示當(dāng)前正在運行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 一進調(diào)試就HardFault棧溢出的經(jīng)典偽裝現(xiàn)象編譯、鏈接都通過進調(diào)試器運行不到一秒程序卡死在HardFault_Handler里斷點位置毫無規(guī)律。原因某個任務(wù)的棧開小了。demo任務(wù)里的vPrintStringLine這類打印函數(shù)內(nèi)部會走格式化字符串和UART發(fā)送棧消耗能達到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à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ù)自然進不來。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ù)會被暫停。這在模擬器里是正?,F(xiàn)象不是工程寫錯了。解決確認(rèn)Target設(shè)置里的時鐘頻率與configTICK_RATE_HZ的換算關(guā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表示一次性輸出完畢 */ }第二步把命令加進xCommandTable數(shù)組注意數(shù)組元素的順序不影響匹配因為解析器是按名字逐個查的{ counter, counter: 打印并遞增共享計數(shù)器\r\n, prvToggleCounterCommand },第三步重新編譯、進模擬器敲counter驗證輸出。這里有個小習(xí)慣新命令的調(diào)試先用help確認(rèn)它被成功注冊了再跑實際命令能省掉不少命令明明是好的但就是不生效的排查時間。6.2 用互斥鎖保護命令中的共享資源上面那個counter命令在demo的簡單場景下夠用但一旦有另一個任務(wù)同時修改ulSharedCounter遞增操作就不是原子性的可能會丟更新。FreeRTOS里修正這個問題用互斥鎖/* 互斥鎖句柄在main()里創(chuàng)建 */ SemaphoreHandle_t xCounterMutex; /* 受保護的命令處理 */ 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ù)永久阻塞。注意互斥鎖和二進制信號量的區(qū)別互斥鎖帶優(yōu)先級繼承機制當(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前后各下一個斷點運行模式下一口氣觸發(fā)命令觀察另一個任務(wù)是否在同一個時刻也在修改ulSharedCounter——如果兩個任務(wù)同時停留在臨界區(qū)內(nèi)的斷點說明互斥鎖沒真正攔住這時候要檢查是不是用了信號量而不是互斥鎖或者鎖句柄被別的代碼誤刪了。從那以后我每次拿到新的FreeRTOS工程都會先過一遍FreeRTOSConfig.h里的堆棧和堆參數(shù)再跑一遍內(nèi)置命令建立基線數(shù)據(jù)最后才動手改業(yè)務(wù)代碼。這個小習(xí)慣幫我避開了至少五次和今天講的一模一樣的坑也希望這篇筆記幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产大片精久久久久久| 日韩激情啪啪啪| a男人的天堂| 乱伦日本色图AⅤ| 中日韓欧美高清| 欧美伦乱爱| a在线视频免费观看| 欧美国产精品久久九九| 国产91丝袜在线播放蜜月| 久久草草欧美精品| 国产三级中文有码在线视频| 国产色图乱伦| 亚洲欧美碰碰| 男人的天堂无码| 欧美天堂超碰97| 中文字幕精品一区二区精品| 囯产操逼片| 九色精品视频导航1| 天天日天天操天天射河南省| 综合网亚洲在线| 夜草欧美| 国产精品久久久午夜夜伦鲁鲁| 精品九九淫乱男| 亚洲综合113页| 97人妻色| 嗯~啊~快点 死我视频| 亚洲诱惑天堂 | 欧美色老汉| 欧美97日韩精品| 欧美三级一级| 亚洲欧洲视频小说在线观看| 亚洲综合色男人网| 激情丁香五月| 97WW精品| 国产成自自拍在线观看| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 激情终合网| 日韩偷拍色图| 好看的91视频| 97精品国产手机| 97超碰久| 欧美同性恋 的搜索结果 - 91n| 后入福利视频| 日韩欧美麻豆 | 9ⅰ久久久天天| 久久久久婷婷精品av电影| 午夜性| 二对二中文字幕。| 96精品一区| 老熟妇一区二区三区| 天天躁日日躁XXXXYY| 性开放中文AV高清无码免费看| 亚洲强奸乱伦影视网| 欧美成人黄网色网站| 日本 欧美 国产一区| 亚洲国产一区二区三区四区国产| 色色色五月婷婷| 亚洲高潮少妇| 日韩精品熟妇| 熟女久久久| 日韩精品一二三| 欧美亚洲图片| 国产精品无套内谢| 柠檬AV导航| 国产欧美日韩女同性恋ww喷水精品| 久久久久久久久久久久久久久乱码| 丝袜喷水在线| 男人的天堂三级| 蜜臀久久久99久久久久| 精品无码久久久久久国产浪潮| 免费精品人妻一区二区三| 97摸视频| 最新精品久久蜜桃 | 日韩天天综合| 色色毛片| 国产超碰| 淫淫综合网| 色哟哟 日韩精品| www.91理论| 激情五月综合网| 日韩欧美亚欧在线视频| 看一级特黄a大一片| 成人av动漫在线观看| 免费看污网站| 九t超碰| 91人妻精华帖| 玖玖爱综合| 色偷偷超碰亚洲| 久久老女人| 人人爱人人操人人性| 91麻豆天美国产欧美| 91l欧美在线| 亚洲男人在线观看天堂| 久久一区二区三区入口| 久久久久久九九九九-美女久久久久久久-成人AV| 人妻人妻天天碰| 麻豆视频国产一区二区| 麻豆人妻精品一区二区| 久久成人午夜狠狠| 日韩国产乱子伦App| 少妇同性| 日韩成人性日韩成人性爱视频在线免费观看 | www色色com| 久久99精品国产| 999热这里只有精品| 思思热影视| 日本啊啊啊啊啊视频| 日韩综合色图| 97蜜桃综合| 97亚洲自在精品在线观看| 国产十八禁视频| 97在线观看| 久久久久久久人妻| 亚洲人妻五月丁香婷婷| 丁香六月啪啪| 激情综合 婷婷五月 红杏 | 大香蕉92| 日本性爱网址| 九色 蝌蚪 熟女自| 国产日本久久免费精品| 中文字幕无码不卡啪啪| 性爱乱伦网址| 亚洲天堂资源在线| 97超碰国产精品| 9118禁| 久热九九| 97精| 啊啊啊好湿国产一二| 欧美狠狠| 屌妞视频久久久久久久| 欧美一级黄片视频在线| 欧美色图小说综合| 日韩精品区二区三区不卡| 亚洲区小说| 色99视频| 老司机深夜18禁污污网站| 伊人aaa| 久久性爱大全| 精品91| 久久e6只有精品| 91精品国产91久久福利| 久久精品99| 激情网五月天| 大香蕉一区二区在线观看.| 婷婷15月天青娱乐| 亚洲最大无码中文字幕网站| 日韩一二三区| 加勒比伊人综合| 国产精品成人无码av| 日韩欧美~中文字| 蜜臀久久99精品久久久老,,| 很黄很色的视频在线观看| 粉嫩AV一区夜夜嗨| 老鸭窝亚洲毛片| 肏逼视频日本| 人妻夜爽夜夜爽| 国产suv精品一区二区四| 久久精品一区二区三区四区五区| a人片中文字幕一区二区| 大香蕉av在线| 天堂中文日本在线观看| 欧美18老人禁| 亚洲脚交| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 国产久久一区二区三区野外在线| 特级毛片特黄久久免费看| 成人小电影网站tex| 久草综合京东| 国产精品久久久久久片| 中文字幕国产在线天堂| 欧美日韩色| 国产欧美日韩臀| www.丁香五月| 中文字幕交换人妻| 亚洲色欲一区二区三区| 婷婷伊人| 色五月婷婷中文字幕| 国产黄色影片在线观看| 天美91| 伊人在线大香蕉视频久久| 熟女丰满人妻一区| 激情专区综合| 无码免费精品高清| 高潮的A片激情扒开一区| 91狠狠狠| 黑人性欧美| 国产亚洲欧洲在线观看| 99re3这里只有精品| 中文字幕精品资源在线| 无码外流操逼视频| 亚洲无码视频免费在线观看网址!| 国产乱码久久久久久| 97香蕉人人乳| 极品后入免费视频| 欧美97在线观看| 91狠婷| 婷婷在线播放| 资源在线观一 二| 五月天婷婷影院| 睡产熟女乱伦| 国产午夜激片Av毛片不卡| 日本性感人妻91| 久久久久久9| 这里都是精品| 亚洲成成熟女人综合一区二区| 九九热午夜欧亚国产视频| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 美女裸体无遮挡永久免费观看网站| 精品少妇一区二区| 色香网| 999久久芭蕾| 97超碰精品成| 美女性91| 日韩激情无码影院| 97人人操人人摸人人爱| 亚洲黄色a级片| 狠狠色噜噜狠狠狠狠狠色综合久久| 国产亚洲精品A在线观看下载| 超碰成人人人爽人人爽| 黄色大片免费在线| 中国一区二区亚洲人妻| 国产强奸超碰AV| 久久久久久久九九九九| 欧美日韩国产精品久久色婷婷| 美女AV一区二区| 久久久久久久久久va| 色噜噜人妻丝袜AV资源| 日本污ww视频网站| 欧美一级久久久久久久大片动画| 国产蜜臀在线| 婷婷国产精品九区| 天天影视网色欲色香| 国产高清精品一区二区三区毛片| 美女毛片999| 日韩午夜啪啪视频| 亚洲熟妇自偷自拍另欧美| 丁香五月天激情综合| 久久久久精| 麻豆乱码久久精| 精品人妻一区二区三区视频| 亚洲玖玖爱| 日韩熟女精一区二区三区不卡| 97综合国产| 欧美亚洲国产91在线| 免费观看的黄色的网站| 久久婷婷视频| 啊啊啊好舒服好爽啊啊啊视频| 超碰在线第一页| www男人天堂| 欧美日韩国产成人高清| 91人妻尻屄视频| 九九九九久久久| 熟女天天干| 精品人妻一区二区三区不卡断| 精品国产Av无码久久久伦古装| 性爱免费视频成人| 久久色人体 | 91性高朝久久久久久久久| 亚洲国产ⅴ高清在线观看| 色哟哟511老熟女| 99久久精品国产高潮| 色久综合| 精品人妻一区二区乱码一区二区| 91老司机精品| www.黄色在线| 国产情侣自拍在线播放| 国产一区二区三区,在线观看观看 五月开心久久AV官网 | av天天在线| 久久久性爱| 日韩国产成人自拍视频| 精品人妻视频一区二区三区蜜桃视频| 揉揉日日日日| 婬女免费一二三区A片| 97人人中文网| 狠狠久久手机视频精品| 日本在线一二 | 精品一区二区三区国产| 日本三级韩三级99久久| 熟妇女伦乱视频视频| 成人av影院在线观看| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 亚洲乱色熟女一区| 少妇被玩视频二三区| 大白逼三四级| 欧美日韩国产色图在线| 欧美精品久久| 国人欧美精品一区二区| 欧美黑人与女人91| 静品嫩模一区二区| AV女优男人的天堂| 成人资源中文字幕在线观看| 无码乱人伦中文视频| 欧美白嫩女HD| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 福利在线黄片| AV男人天堂网| 国产精品成人在线| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 日韩一级成人毛片免费观看 | 69麻豆天美| 色婷婷久久| 亚洲综合色图欧美| 99热日本| 五十路熟女人妻一区二区三区四区五| 五月天激情小说网| 亚洲欧洲无码bt精品合集| 四季AV综合网址| 午夜国产成人精品视频| 国产熟女| 天天做日日做天天欢。| 黄日韩| 日日日日做夜夜夜夜无码| 国产熟女二区| 国产又爽又黄| JuliaAnn丝袜熟女系列| 欧美天天综| 欧美黄色片在线播放| 欧美 日韩 婷婷 五月| 久久人人爽爽人人爽人人片αV| 五月天欧美色图| 高清在线偷拍自拍视频| 酒色综合网| 大香蕉伊人在线成人AV在线观看| 黄页视频网站野外| 欧美高清16| sss视频华人在线| 丰满岳乱妇一区二区三区| 色香综合天天影视综合 | 亚洲精品久久久久久久久豆丁网| 热无码中文亚洲H一道本一区二区| 久久久久久九九九九-美女久久久久久久-成人AV| 国产福利电影| 91中文字幕在线观看| 日本久操视频| 永久免费发布性爱网| 久久99网站| 人人人干干人人干| 蜜桃臀AV在线| 天天综合欧美综合| 国产99 中文字幕日韩小视频| 三级色影综合网| 神马久久久久久久久久久久| 成人看片网站| 97人人操人人摸| 96麻豆精品一区二区三区| 日韩传媒在线| 丁香六月婷婷综合| 黑人嘿嘿嘿超爽免费视频| 玖玖综合网| 日日日色色色色色| 熟妇视频一区二区三区在线观看| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 欧美夜夜| 嗯嗯啊啊啊好爽| 黄日韩| 日韩中字av一区| 干婷婷综合网| 亚洲va有码在线天堂| 国产一级高清免费观看| 青娱乐91| 97干在线视频| 久久精品一区一起草| 久久久久一本一区二区青青蜜月| 丰满的三级少妇欧美久久久| 性在久久久久久| 欧美性爱精品七区| 97色伦97色伦国产欧美| 亚洲综合电影| 亚洲婷婷丁香在线| 少妇色| 美女黄页网站| 天天影视综合色| 操老熟女AV| 亚洲男人的天堂网| 亚洲自拍欧美色综合| 懂色Av| 国产97av| 人妻第一页| 97在线亚洲| 丰满丝袜少妇AV| 国产地址二三| 丝袜美腿操av| 蜜臀Av一区二区三区| 超碰久久综合| 78m啪啪啪| AV中文字幕三四五| 97色操| 蜜臀99精品国产高清在线观看| 日韩综合第八区国产精品| 色爽——AV| 97久久国产亚洲精品超碰热| 密臀国产在线| 夜夜嗨视频| 麻豆精品一区二区三区四区免费观看| 色综合av综合久久| 爽极品影院| 日韩在线观看字幕精品| 婷婷久草| 欧美色图中文字幕| 偷拍在线观看视频| 色九九久九九| 三男一女不戴套的A片| 免费无码婬片AAAA片直播色戒| 欧美性爱综合,免费| 成人线上超碰| 无码聚合| 婷婷五月天补不补| 嗯嗯啊啊视频一区二区三区| 超碰97人人乐| 2024黄色视频| 欧美一区二区三区日韩| 久久日韩毛| 欧洲精品网| 97在线观看免费| www.男人的天堂| 亚洲 中文字幕 精品| 色婷婷激一区二区三区 | 五月大香蕉| 九九热免费国产视频婷婷伊人| 中国黑人三级片网站上区| 大香蕉青青9| 少妇淫妇久久久久久久| 最新国内自拍av免费| 日本操BAV| 日韩另类色图| 天天色踪合| 中文字幕乱亚洲美女精品一区| 18禁止看精品中文字幕| www.狠狠| 国内精品久9| 免费国产电影一区二区| 激情丁香五月婷婷| 欧美高潮| 日韩精品资源专区二区| 久99| 少妇久久久免费| 四虎国产精品永久在线囯在线| 在线综合色| 最新一二三区视频| 精品传媒在线一区| 717影院理论午夜伦八戒| 午夜精品久久久99| 啊啊嗯嗯好爽| 狠狠综合| 东京热毛片调教| 伊人精品久久网站| av大香蕉网站| 国产捆绑一区| 99免费视频| 综合性视频99| 一起草日韩| 色婷婷成人综合| 欧美色乱| 一区二区三区在线资源| 亚洲第一页色网| 青娱乐久久艹| 热久久无毒不卡| 高清无码一区二区三区| 在线97在线| 亚洲97| 亚洲婷婷五月天| 久草综合网| 日本一区二区成人在线| 国产青青美女玩逼视频| 亚欧性爱无码| 一区,二区,三区视频| 国产成久久综合片| 国产按摩一区二区三区| 97chaopengongkai| 国产女人高潮视频| 91网站18| 亚洲人在线成线成人| 日少妇视频| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 91精品国产91久久青草| 伊人影院中文字幕| 中文乱码字字幕在线第5页| 九九热九九热| 1769国内精品视频| 欧色性第一页| 精品少妇一区二区三区在线视频| 欧美色综合网| 97爱欧美| 日本日皮视频逼| 青青草在线视频美女| 性一交一乱一交A片久久四色| 操久久久久| 久久久久13| 思思久热在线精品66| 99热精品国产| 欧美色图在线视频少妇| 久青草影院| 乱伦熟妇一区二区| 久草精品视频| 天天综合精品| 涩综合导航| 中文无线日韩一区| 亚洲不卡AV在线| 蜜臀AV秘一区翔田千里| 蜜桃狠狠色伊人亚洲综合| 九九成人| 家庭乱伦性爱av| 99久久免费看精品国产一区| 九色97| 成人一道本免费视频| 长久操视频| 熟妇人妻精品一区二区视频色欲| 久久黄片国产一区二区| 91白嫩| 久久亚洲天天做| 91人妻Pr| 日本高清视频xxxx| 日骚逼视频| 美日韩一二三区| 婷婷五月成人| 欧美大香蕉专区网| 26UUU欧美日本| 99蜜月精品久久| 国产有码一区| 五月综合色| 久久久久免费看少妇A片特黄| 清纯唯美综合| 国产精品不卡一区二区三区| 校园春色制服丝袜中文字亚洲 | 中日无幕一二三四区| 福利视频一区二区微拍| 亚洲中文字幕熟女| 人妻熟女一区二区在线视频| 秋霞一区二区三区四区五区六区七区| 狠狠操天天干| 破苞ⅩXXX性无码动漫无码| 国产品精品自在在线午夜免费| 五月婷婷青青草娱乐伊人| 日韩99神马视频播放| 99性爱视频| 久久久久成人亚洲国产| 久热在线精品免费观看| 久久久性| 亚洲国产综合图区中文字幕| 蜜臀Av一区二区三区| 欧美在线视频播放| 骚逼一区二区| 麻豆天美传媒在线视频天堂| 超碰亚洲欧美日韩无| 超碰人妻在线| 欧美人妻一区二区| 男人精品天堂一区| 嫩草影院永久在线制服丝袜| 2025亚洲男人天堂| 啊啊啊好湿久久| 东京太热久久久| av天堂影视中文在字幕在线中文| 欧美性生活综合| 曰韩成人免费视频| www欧美性爱| 韩国一级婬片A片AAAAA| 日本肏逼视频在线观看| 久久久国产成人一区二区三区在线| 综合免费无码中文| 欧美日韩操操操| 日本欧美亚洲高清在线看| 天天搞在线综合网| 国产精品岛国片在线观看| 久久精品中文字幕无码l| 亚洲成人福利电影免费| 爱av免费| 五月天综合网| 91狠婷| 男人天堂站| 亚洲影院小综合| 国产精品久久久久久久久久久久久久久久 | 一本色道久久天天射天天干| 亚洲国产欧美一区二区潘金莲| 人妻无一区二区三区| 国产一区二区三区免费视频在性观看 | 91日韩网站| 校园春色五月天| 91人妻人人澡人人爽人人精品| 国内精品嫩模A∨私拍小视频| 国产亚洲精品A在线观看下载| 国产成人午夜视频网址| 黄色av一区二区在线| 五月丁香啪啪| 日日夜夜骚| 午夜无码熟妇丰满人妻| 天堂成人网| 偷拍偷窥与盗摄视频专区| 国产欧美精选激情视频| 色色操| 美女91在线观看| 少好三P| 欧亚日韩中文在线| 国产对白刺激视频| 色婷婷综合网| 日韩精品第3页| 欧美韩日精品99综合| 97色网| 超碰成人最新最好看| 91粉芽高清在线一区二区| 国产精品久久久久无码Av网曝门| 家庭乱伦网站国产| 蜜桃臀 后入 一区 二区 三区 在线| 蜜桃久久久久久久久久久久| 男人的天堂VA| 日韩性爱1级片视频| 色噜噜狠狠色综无码久久合欧美| 日韩精品人妻中文字幕久久久| 国产在线激情| 日本三级A片网站com| 99热91| 大香蕉欧美国产日韩高潮| 久久精品国产亚洲粉嫩| 精品人体无圣光凹凸| 色香色香欲天天天影视综合网| 91少妇香蕉久久精品| 蜜臀久久99精品久久久| 国产成人精品日本视频| 91骚妇| 91视频在线观看18| 国产AV超爽| 美女干逼2| 亚洲av噜噜噜噜噜噜| 亚洲黄色影视| 99精品无码| 久久av一级av少妇av高潮| 偷拍欧美激情| 亚洲AV无码乱码| 超碰91在线| 无码九九九九| 一级黄色性爱A级片| 91久久午夜无码鲁丝片久久人妻| 好爽视频在线观看视频| 色综合久久久久| 在线五区| 日韩中文字幕视频在线观看| 欧美精品久久| 日韩中文字幕人妻视频| 欧美暴力猛交| 无码直播久久久| 久久婷婷在线观看视频| 成人国产视频在线观看| 手机av天堂久久久久| 99re视频这里只有精品| 中文字幕五区| 欧州91高潮| 婷婷情色综合网| 97超碰超碰| 性色乱AV一区二区| 黄色成人网久久久久久| 5252色欧美在线| 在线中文字幕| 欧美色日本| 黑人狂躁日本妞一区二区三区| 亚洲情色在线| 亚洲中文国际强奸字幕| 少妇激情AV| www.超碰在线| 屁股久久久久久| 久久久久极品| ,国产乱人伦精品一区二区三区| 情色日播放AV| 久热精品在线| 加勒比aⅴ| 激情六月婷婷| 人妻天堂综合网| 国产精品乱码久久久| 大香蕉97久久| 影音先锋日本乱伦| 1000午夜黄色| 91久久久久久| 日韩欧美福利视频看看| 农村妇女精品一区二区| 手机看片1024你懂的国产| 91M一社| 男人兔费天堂| 亚洲精品乱码线路中文字幕| 加勒比久久av| 久7色| A 在线网址| 九九九九一区| 青青草在线视频人人想人人上| 操逼免费视频无码国产| 亚洲第一男人天堂| 青青草日逼视频| 深夜国产一区二区三区在线看| 精品人妻久久久| 久久久久久久久九九久孕交| 欧美日韩操逼动图| 啊啊啊啊啊好多水| 精品人妻一区二区三区视频| www.色婷婷| 国产中文大片资源中文字幕| 奶水 人妻 哺乳 在线| 欧美超碰96| 亚洲成av人片色午夜乱码| 青娱乐国产剧情av一区| 热久久无毒不卡| 欧美美女在线高潮999| a级理论午夜日本| 99无码狠狠久久| 在线小说视频一区| 亚洲色性情三级| 色五月首页| 自拍偷拍 高清无码| 欧美色涩| 伊人97| 少妇色综合| 亚洲中文字幕乱码无码一区二区 | 亚州情色j区| 亚洲二区精品在线观看| 青青青国产手线观看视频2| 亚洲综合色图欧美| 亚洲日韩欧美一区二区| 中文字幕在线观看AV| 色播综合| 日韩性爱再线视频| 性爱视频无打码在线观看| 校园春色亚洲| 日韩精品午夜操呦呦不卡影院| 久草精品一区 | AV中文字幕三四五| 操逼无毒无码免费视频| 夜夜国产一区| 男人天堂站| 青青国产精品在线| 色久综合| 五月婷婷丁香六月| 91一起操| 自拍亚洲综合| 欧美午夜视频| 91天天爱| 男人的天堂在线| 97超碰资源网| 东京热熟女亚洲视频网站| a人欧美综合天堂麻豆| 久草视频制服诱惑| 亚洲男人天堂2012| 色婷婷蜜臀av| 熟妇精品juliaannAV| 加勒比综合九九99视频在线播放| 中文字幕视频一区视频二区| 夜夜夜久久| 日本免费不卡二区| 色五月69夫妻| 亚州春色| 青青草久久在线| 激情四射婷婷六月天| 久久久久人| 日韩AV噜噜噜一区二区三区四区| 亚洲成人AB| 久久一区二区蜜桃| 测评在线观看AV| 欧美成熟性爱精品| 大香蕉一区二区在线观看.| 亚洲国产欧美一区二区潘金莲| 国产精品无码久久久久2025| 色成人Www精品永久观看| 人妻中文字幕日韩电影| 91丨九色丨43老版熟女| 久久精品欧美一区蜜桃| 一区二区三区四区姦女| 熟女网站最新| 亚洲图片 欧美电影| 亚洲精品97| 亚洲无码成人精品| 欧美性爱十八禁| 看日韩美女二区三区免费操逼视频 | 婷婷五月花| 夜夜狼人妻| 中文欧丝袜诱惑| 亚州综| 91精品亚洲内射孕妇| 久久国内| 久久9精品视频| 久久久成人精品| 欧美 亚洲 第一页 | 91扒丝袜综合在线| 人妻大香蕉| 91亚洲网| 乱伦av.com| 东北女人av| 少妇人妻激情四射| 亚洲激情片| 国产高清精品福利| 欧美亚男人的天堂| 亚洲自拍青操视频| 久操视频免费在线观看| 亚热日本熟女| 综合夜夜| 一区在线观看中文字幕| 天天香香欲综合| 加勒比色99999| 人人玩人人添人人澡免费| 色综合九九| 91老熟女老女人国产老太| 97干在线视频| 精品一二三区久久AAA片| 色九九九| 久久久久久久久久9| 99精品久久久久久久婷婷| 最新AVzaixian| 极品出轨视频网站| 久久精品中文字幕观看| 97精品国产97久久久久久户外免费| 日本免费一区二区不卡| 波多野结衣AV无码一区| 人妻少妇视频在线播放| 午夜福利一区二区三区四区五区色婷婷| 最新国产精品| 九九热免费视频| 亚洲中亚日激情视频| 翔田千里无码中出中文字幕| 嗯嗯嗯好爽| 好湿好紧视频| 国产小u女在线观看| 欧色性第一页| 高潮毛片无遮挡高清免费| 97人肏| 97干在线视频| 九九综合久久| 91青青在线| 伊人五月天| 免费精品AB| 人人摸人人摸人人干| 九九热精彩视频| 欧美一区二区日韩三区| 99 国产丝袜在线| 国产亚洲日韩欧| 亚洲色欲一区二区三区| 亚洲色婷婷久久久综合日本| 天天爽爽爽爽| 中文字幕在线观| 久久婷婷一区二| 97在线视频免费| 99国内精品| 人人性爱视频免费| 日韩av三四区| 欧美激情性久久久久久| 欧美久久婷婷| 视频黄色国产一级| 91麻豆一二三区| 极品尤物女神在线观看| 操死我了啊啊啊| 中国探花熟女| 一二三区精品视频| 好吊色在线观看| 操b在线观看| 亚洲一本色码中文字幕| 久久riav中文精品| 俺也射| 九九九九九九九九九国产精品| 丁香五月激情婷婷| 综合欧美亚洲| 麻豆AV96熟妇人妻| 无码操逼网| 亚洲中文字幕久久无码精品| 狠狠操狠狠爱| 日韩兔费看黄片| 91网站视频在线观看| 成人激情无码在线视频| 日韩特一级久久| 丁香五月激情综合| 69av一区二区三区| 日韩熟女视频二区| 婷婷五月天激情四射| av网站免费看| 色眯眯av| 精品国产乱码久久久久久久久1 | 在线人人人人人人精品超| 大香蕉中文201| 台湾佬中文娱乐自偷自拍| 亚洲国产婷婷在线播放| 人妻熟妇一区二区三区| 熟妇亚洲一区二区三区| 黄片色区软件| 日韩一二三区| 91久久久久久久| 亚洲图片 91| 欧美性爱中文字幕无线码| 九九热只有精品| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 男人天堂东京热| 超碰这里只有精品| 五月丁香啪啪| 国产成人亚洲精品无码古代早漏男| 天天综合~91| 91夜夜蜜桃臀1区2区3区| 噜噜噜无码AV一级一级久久影院| 日韩欧美性吧婷婷乱伦大香蕉| 青青草玖玖爱| 91人妻超碰| 91强奸乱轮| 爱妃国产亚洲视频中文字幕| 欧美伦乱| 熟女一区二区三区| 国产不卡精品91| 国产自偷自拍一区| AV和黑人在线播放| 97亚洲欧美| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | www.狠狠操| 日韩无码黄色片| 日韩一级久久毛片| 亚洲丝袜在线观看| 嗯嗯啊啊的视频| 97色欧州| 91精品国产综合久久久蜜臀| 久久伊人五月天| 亚洲av影音先锋| 国产精品久久久久久久久久梁医生| 日本大香蕉综合网红本杳社区| 大香蕉综合在线| 青青草视频久久久久| 蜜臀久久99精品久久久老,,| 日本色婷婷| 人人做人人妻人人夜视频| 欧美性爱免费短视频| 日本色色色网站免费看不卡| 精品对白久久不卡| 九九九九九九综合| 日韩欧美蜜桃精品久久中文字幕久久 | 天美一二三在线观看Av| 国产av高清版| 五月天色图影视| 五月丁香影院| 玖玖色综合| 五月天色色网站| 国产成人无码网站在线视频| 在线中文字幕极品av| 乱伦1色页| 国产黄片精品在线| 午夜AV人气不卡| 波多野结衣被操50分钟免费视频 | 色综合20p| 日韩操呦呦影院在线观看| 青青草视频导航官网| 久久视网78| 双插在线| 一区二区国产视频在线观看| 日日黄色三级网站| 天美精品一区二区三区四区在线观看| 国产乱弄免费在线视频。| 神马久久久久久久久久久久| 五月天久久婷婷亚洲| 10000部十八禁看电影| 少妇同性| 夜精品久无码| 天天爱综合网| 久久久久成人网| 亚洲熟女诱惑| 欧美日本成人一区二区| 日本国产欧美一区三区二区| 欧美性爱日韩高清| 国产最新小视频在线播放下载| 欧美成人A天堂片在线观看| 色色香蕉| 精品久热| 亚洲AV乱码专区国产噜噜亚洲| 亚洲棕合电彰| 中文字幕一区二区三四五区日日骚| 久久9精品网站| 人妻丝袜日本| 日本操逼视频不卡直接放| 国产91精品福利在线| 91丨九色丨国产打屁股| 97视频在线免费看| 久久精品中文| 超碰在线91| 久久伊人亚洲AV无码网站| 精品一区二区人妖| 超碰79人人乐| 中国小夫妻勾搭露脸淫荡对白| 久久激情视频| 人人么人人操| α√在线| 天天综合AV| 亚州日韩97| 好涩综合| 日本免费一级AAA大片器| 免費黃色視頻觀看一| 一区二区三区四区五区高清无码永久视频| 婷婷五月天无码| 亚洲色电影在线| 精品成人亚洲午夜电影| 九月丁香| 欧美青青视频| 大奶的诱惑| 色婷婷激一区二区三区| 天天添天天干电影| 91精品人妻五十路| 欧美不卡五十路| 91|九色|国产熟女| 亚洲视频小说| 爱爱啊啊啊| 欧美精品日韩一区二区| 亚州再线| 精品人妻一区二区三区在线视频不卡| 亚洲国产av中文字幕久久| 天天干天天干天天| 极品AV网站在线观看| 日韩欧美日韩| www.超碰在线| 天天操天天谢| 国产辣妈在线视频福利| 五月婷在线| 麻豆天美AV传媒第一页| 国产精品露脸在线观看| 欧美躁死她一区二区| 人妻素股| 无码人妻精品一区二区中文 | 欧美一级AAAAAAA| 能看的AV| 清纯唯美综合亚洲| 黄色在线网站| 久久久久久九九九九-美女久久久久久久-成人AV| 亚洲AV无码国产精品久久久久 | 99在线精品视频| 免费在线观看AV无码网站| www.AV有限公司一区| 一级做受视频免费是看美女| 99热只有| 九九热精品视频六| 亚洲一本大道中文字幕无码在线| 神马久久69| 国产高清精品一区二区三区毛片| 精品无码一区二区| 国产精品操| 亚洲色图91欧美日韩| 91精品国产91熟女| 色婷婷电影网| 少妇的嫩逼图片| 婷婷久久五月天| 美女t无毒不卡不卡| 久久精品性| 日日97| 色婷婷导航| 亚洲人妻色图| 五月丁香综合| 男人天堂欧美| 热久久精品| 国产综合色精品在线观看| 97亚洲一区| 超碰精品国产无码| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 日韩15p| 91九久| 成人午夜高潮av猛片| 日本不卡码黄色| 中文字幕,人妻,日韩| 91中文精品日韩欧美在线 | 久久久久久久久久久97| 99婷婷一区二区| 国产盗摄美女如厕大神作品在线观看| 国内毛片热久久思思热| 国产欧美日韩臀| 黄色一区二区秘书性感| 亚洲精品久久久久久| a网站免费观看| 草草电影院| 欧美在线l亚洲| 黄页视频网站野外| 老熟女阿 国产91| 欧美熟爽综合| 国产野战露脸在线播放| 吊色| 大胆91| 自拍偷拍亚洲熟女妇人精品| 91亚洲丝袜| 九九在线视频| 人人操人人色人人摸| 98福利在线视频| 亚洲色五月| 边做饭边操逼逼| 国产91专区| 黄页18禁| 久久久久久久国产视频| 青娱乐黄色录像| 抽插爽| 色狠狠综合| 日韩免费三级黄片电影| 久久一二三四五六七八九区| 久久国产99精品72福利| 丰满人妻一区二区三区四区| 欧美综合中文| 欧美 日韩 国产传媒| 亚洲AV成人无码久久精品播放| 日韩人妻丝袜中文字幕| 校园春色中文字幕AV| 91美女中出| 欧美性爱日韩性爱| 99re视频这里只有精品| 强奸乱伦麻豆| 国产女性无套 免费观看| 大香蕉综合在线| 偷拍综合网| 懂色av中文字幕一区二区三区天美| 天天爽天天爽| 伊人激情五月天一区二区| 色欧美综合| 久久亚州大香蕉| 欧美激情片一区二区| 久久五月天婷婷| 青青伊人这里只有精品| 中文久久| 久夜操| 九9热伊人| 国产亚卅97| 射 色综合| 中文字幕性感少妇av| 在线观看无码三级少妇| 欧美亚洲91| 97色操| 97超色| 九九热在线精品视频| 青青操97| 婷婷中文字幕| 久久精品国产免费观看99| 欧美国产欧美在线观看| 国产精品点击进入在线影院高清| 国产精品午夜福利| 久久人妻无码毛片A片麻豆| 夜夜操av亚洲一区二区| 日本熟妇一区二区三区| 黄网在线播放| 亚洲欧洲国产综合av| 影音先锋视频在线| 国产精品亚洲无码| 免费a级毛片av无码久久精品中文字幕| 大香蕉淫人网| 久久在肏| 自拍六区| 成人性交午夜免费片| 亚州,欧美在线| 久9爱精品| 亚洲天在线| 亚洲综合有码| 亚洲图片 欧美电影| 中文字幕一二三av| 自拍啪啪视频| 清纯唯美综合亚洲| 草久在线| 日本大香蕉综合网| 中文字幕制服诱惑| 日韩无码一区二区三区| 综合网91| 国产精品午夜AV完会免费| 欧美色图片| 乱伦熟女论坛| 色婷婷六月丁香七月婷婷| 黄片qw| 欧美日韩国产三级黄色| 在线一道啪| 福利在线黄片| 成人精品在线| 欧美嫩性色| 91暧暧| 牛牛久久国产精品视频一二三| 欧美天堂第二区| 欧洲自拍第一页| 992视频一区|