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

ARTICLE DETAIL

資訊詳情

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

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

免費(fèi)在Windows模擬器上運(yùn)行FreeRTOS命令行工程:從任務(wù)調(diào)度到調(diào)試技巧 簡(jiǎn)介一份面向STM32嵌入式開發(fā)者的FreeRTOS命令行演示工程基于Windows下的集成開發(fā)環(huán)境Keil下載解壓后即可打開、編譯并燒寫免去手工移植和配置的繁瑣步驟。該工程通過(guò)串口中斷接收數(shù)據(jù)進(jìn)而調(diào)用FreeRTOS命令行讓使用者在真實(shí)芯片上體驗(yàn)任務(wù)創(chuàng)建、隊(duì)列通信、定時(shí)器管理等核心功能。資源總體積約七百七十七KB包含一百一十六個(gè)文件其中六十七個(gè)頭文件與三十八個(gè)源文件覆蓋標(biāo)準(zhǔn)外設(shè)驅(qū)動(dòng)、FreeRTOS內(nèi)核源碼以及命令行解析邏輯另有工程配置文件、初始化文件、說(shuō)明文檔和許可證等輔助材料目錄層次分明便于按模塊查閱。目前已有近兩百人學(xué)習(xí)或下載。配合作者撰寫的《FreeRTOS 體驗(yàn)教程2.用命令行操作FreeRTOS》閱讀既能對(duì)照理解串口中斷接收與命令解析的結(jié)合方式也可直接研讀任務(wù)調(diào)度、隊(duì)列和定時(shí)器的源碼實(shí)現(xiàn)適合希望快速上手FreeRTOS并嘗試命令行交互的嵌入式初學(xué)者。1. Windows下開箱即編譯不接開發(fā)板把freeRTOS命令行工程跑起來(lái)在Windows上跑FreeRTOS和RTOS命令行很多人第一反應(yīng)是得先有一塊開發(fā)板——這套Keil uVision4的MDK demo工程證明不一定。我第一次拿到它時(shí)正在等板子到貨手頭的需求卻等不了要在一周內(nèi)把任務(wù)劃分、消息隊(duì)列、命令交互的框架定下來(lái)。這套demo解決得干脆——解壓、打開工程、編譯、進(jìn)調(diào)試器FreeRTOS內(nèi)核就在模擬器里跑起來(lái)自帶的freeRTOS命令行能直接交互敲task-stats看所有任務(wù)的棧余量和運(yùn)行狀態(tài)敲free-heap看堆剩余。不依賴真實(shí)硬件內(nèi)核行為與開發(fā)板一致。適合沒(méi)板子但想學(xué)RTOS調(diào)度機(jī)制的初學(xué)者適合硬件未到需要先驗(yàn)證業(yè)務(wù)邏輯的工程師也適合研究命令行組件如何與RTOS任務(wù)共存的開發(fā)者。2. 工程解剖從目錄布局到配置項(xiàng)和啟動(dòng)鏈路的完整骨架2.1 目錄結(jié)構(gòu)內(nèi)核、移植層、用戶代碼與CLI四塊分區(qū)拿到工程后第一件事不是點(diǎn)編譯而是先翻目錄。這套工程的目錄組織得很規(guī)矩大致劃成四塊每塊職責(zé)單一改起來(lái)不會(huì)串線。目錄主要內(nèi)容職責(zé)說(shuō)明FreeRTOS/Sourcetasks.c、queue.c、list.c、timers.c、event_groups.c內(nèi)核核心代碼純C實(shí)現(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、啟動(dòng)文件用戶業(yè)務(wù)代碼與內(nèi)核剪裁配置CLIFreeRTOS_CLI.c、FreeRTOS_CLI.hfreeRTOS命令行實(shí)現(xiàn)命令解析與分發(fā)核心先看內(nèi)核這幾份文件。tasks.c是調(diào)度器本體只干三件事任務(wù)狀態(tài)機(jī)切換、時(shí)間片輪轉(zhuǎn)、優(yōu)先級(jí)搶占。queue.c表面上只是隊(duì)列實(shí)際上信號(hào)量和互斥鎖的底層也是它——FreeRTOS的信號(hào)量是基于隊(duì)列機(jī)制實(shí)現(xiàn)的這點(diǎn)很多初學(xué)者不知道。list.c是內(nèi)核內(nèi)部的鏈表實(shí)現(xiàn)所有任務(wù)就緒表、阻塞表、延時(shí)表都靠它串起來(lái)。這些是純C代碼編出來(lái)后就是一組不依賴芯片外設(shè)的庫(kù)這也是FreeRTOS能橫跨幾十種芯片的原因。移植層是最容易被忽略又最不能錯(cuò)的地方。ARM_CM3目錄下port.c用嵌入?yún)R編實(shí)現(xiàn)了PendSV_Handler和SysTick_Handler任務(wù)切換的實(shí)質(zhì)就是這兩段代碼在保存和恢復(fù)CPU寄存器上下文。你不需要改它但得知道任務(wù)怎么切走的答案全在這里——很多新手問(wèn)調(diào)度器為什么能自動(dòng)跳來(lái)跳去其實(shí)每次都是SysTick觸發(fā)中斷然后在PendSV里把當(dāng)前任務(wù)的寄存器壓棧、把下一個(gè)任務(wù)的寄存器出棧僅此而已。CLI那部分就是這套demo的亮點(diǎn)了。FreeRTOSCLI是官方命令解釋器組件不綁定任何外設(shè)只要求你給它一個(gè)字符輸入渠道和一塊輸出緩沖區(qū)。demo里把它接到UART上模擬器里的終端窗口敲命令直接回顯結(jié)果。第3章會(huì)專門拆它的內(nèi)部實(shí)現(xiàn)。2.2 FreeRTOSConfig.h這幾個(gè)配置項(xiàng)直接決定任務(wù)怎么調(diào)度FreeRTOSConfig.h是整個(gè)工程的大腦配置文件它不參與業(yè)務(wù)邏輯卻決定了內(nèi)核怎么剪裁、怎么跑。打開這份文件先盯這幾項(xiàng)#define configTICK_RATE_HZ ( 1000 ) /* 系統(tǒng)時(shí)鐘節(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í)繼承機(jī)制 */ #define configCHECK_FOR_STACK_OVERFLOW ( 2 ) /* 棧溢出檢測(cè)級(jí)別2任務(wù)切換時(shí)檢測(cè)并掛鉤子函數(shù) */configTICK_RATE_HZ設(shè)為1000意味著每毫秒觸發(fā)一次SysTick這是大多數(shù)實(shí)時(shí)性要求不苛刻的業(yè)務(wù)的通用選擇。如果任務(wù)是毫秒級(jí)精確延時(shí)需求這個(gè)值可以提到2000甚至更高但代價(jià)是內(nèi)核調(diào)度開銷增大——每次tick都要跑一遍調(diào)度器判斷是否需要切換。configMINIMAL_STACK_SIZE的128是「字」不是「字節(jié)」在32位Cortex-M上一個(gè)字是4字節(jié)所以128字等于512字節(jié)。這個(gè)值只用于空閑任務(wù)和demo任務(wù)業(yè)務(wù)任務(wù)棧要單獨(dú)算常見做法是給任務(wù)開256到512字。configTOTAL_HEAP_SIZE管著所有任務(wù)控制塊TCB和任務(wù)棧的內(nèi)存來(lái)源。這個(gè)值開小了會(huì)直接導(dǎo)致xTaskCreate失敗開大了又浪費(fèi)RAM調(diào)試期建議用xPortGetFreeHeapSize()打印剩余堆來(lái)反向校準(zhǔn)。configUSE_MUTEXES值得單獨(dú)說(shuō)——互斥鎖和二進(jìn)制信號(hào)量的區(qū)別在于互斥鎖帶優(yōu)先級(jí)繼承能避免低優(yōu)先級(jí)任務(wù)拿著鎖不讓高優(yōu)先級(jí)任務(wù)執(zhí)行這種優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題demo里訪問(wèn)共享資源時(shí)優(yōu)先用互斥鎖而不是信號(hào)量。2.3 啟動(dòng)鏈路從Reset_Handler到vTaskStartScheduler這套demo的啟動(dòng)流程和帶板子的工程完全一致只是執(zhí)行載體換成了Keil的模擬器。芯片上電后先走啟動(dòng)文件里的Reset_Handler初始化棧指針、調(diào)用SystemInit做時(shí)鐘和外設(shè)的初步配置然后跳進(jìn)main()。main()里干的事可以歸納為三段初始化UART命令行要用、創(chuàng)建demo任務(wù)和CLI任務(wù)、最后調(diào)用vTaskStartScheduler()把控制權(quán)交給內(nèi)核。vTaskStartScheduler()一旦成功啟動(dòng)就不會(huì)返回——它會(huì)創(chuàng)建空閑任務(wù)和可選的定時(shí)器任務(wù)然后觸發(fā)第一次上下文切換進(jìn)入調(diào)度循環(huán)。從這一刻起main()的代碼就不再被執(zhí)行了整個(gè)CPU時(shí)間片都由內(nèi)核管理。很多新手在main()后面繼續(xù)寫業(yè)務(wù)代碼發(fā)現(xiàn)永遠(yuǎn)執(zhí)行不到就是因?yàn)闆](méi)理解這一層。所以在demo里你會(huì)發(fā)現(xiàn)所有業(yè)務(wù)邏輯都被封裝進(jìn)任務(wù)函數(shù)main()只做初始化和點(diǎn)火兩件事。3. 核心模塊拆解任務(wù)調(diào)度與命令行從注冊(cè)到回顯的完整鏈路3.1 任務(wù)創(chuàng)建與調(diào)度器啟動(dòng)代碼級(jí)拆解打開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)); /* 主動(dòng)讓出CPU阻塞1000個(gè)tick */ } } int main(void) { /* 初始化UART命令行輸入輸出都走這個(gè)外設(shè) */ vUartInit(115200); /* 構(gòu)建設(shè)備對(duì)象創(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); /* 啟動(dòng)調(diào)度器成功則永不返回 */ vTaskStartScheduler(); /* 走到這里說(shuō)明調(diào)度器啟動(dòng)失敗通常是堆空間不足 */ for (;;) { } }xTaskCreate的六個(gè)參數(shù)依次是任務(wù)函數(shù)指針、任務(wù)名純調(diào)試用途、棧深度單位是字、傳給任務(wù)的參數(shù)指針、優(yōu)先級(jí)數(shù)字越大優(yōu)先級(jí)越高、任務(wù)句柄輸出指針。這里CLI任務(wù)優(yōu)先級(jí)設(shè)為2兩個(gè)demo任務(wù)為1空閑任務(wù)優(yōu)先級(jí)是0所以CLI任務(wù)能隨時(shí)搶占demo任務(wù)——命令行交互的實(shí)時(shí)性就是這么保證的。vTaskDelay(pdMS_TO_TICKS(1000))里的pdMS_TO_TICKS是個(gè)宏把毫秒換算成tick數(shù)在configTICK_RATE_HZ等于1000時(shí)1000毫秒就是1000個(gè)tick。任務(wù)調(diào)用它之后會(huì)進(jìn)入阻塞態(tài)把CPU讓給其他就緒任務(wù)這是理解RTOS多任務(wù)同時(shí)跑錯(cuò)覺的關(guān)鍵點(diǎn)。3.2 命令行實(shí)現(xiàn)命令表、解析器與逐字符處理freeRTOS命令行的核心是FreeRTOS_CLI.c它把命令字串→處理函數(shù)的映射關(guān)系做成一張表。demo里的命令注冊(cè)和內(nèi)核的任務(wù)創(chuàng)建是解耦的注冊(cè)過(guò)程在主程序啟動(dòng)時(shí)完成/* 命令處理函數(shù)統(tǒng)一簽名輸出緩沖、緩沖長(zhǎ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); /* 命令注冊(cè)表每一行是一條命令的名字、幫助文本、處理函數(shù) */ static const CLI_Command_Definition_t xCommandTable[] { { task-stats, task-stats: 顯示所有任務(wù)的棧與調(diào)度統(tǒng)計(jì)\r\n, prvTaskStatsCommand }, { free-heap, free-heap: 顯示剩余堆空間\r\n, prvFreeHeapCommand }, { help, help: 列出全部可用命令\r\n, FreeRTOS_CLIHelpCommand }, }; /* 在主程序初始化階段逐條注冊(cè) */ void vRegisterDemoCommands(void) { for (int i 0; i sizeof(xCommandTable) / sizeof(xCommandTable[0]); i) { FreeRTOS_CLIRegisterCommand(xCommandTable[i]); } }這種表驅(qū)動(dòng)的命令設(shè)計(jì)妙處在于新增命令不用改解析器的代碼只在數(shù)組里加一行。FreeRTOS_CLIRegisterCommand內(nèi)部會(huì)把命令節(jié)點(diǎn)掛到一個(gè)全局鏈表中運(yùn)行時(shí)每條命令按名字逐一匹配。參數(shù)說(shuō)明一下命令字串區(qū)分大小寫如果用戶敲了大寫會(huì)匹配不到CLI會(huì)返回未知命令的提示幫助文本在敲help命令時(shí)統(tǒng)一列出所以新命令一定要寫好幫助文本否則別人看不出這命令是干嘛的。真正的解析過(guò)程發(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接收一個(gè)字符模擬器里對(duì)應(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é)束符存入輸入緩沖留一個(gè)位置給\0 */ cCmdBuffer[ulInIndex] cRxChar; } } } }這個(gè)循環(huán)的妙處是它本身也是一個(gè)FreeRTOS任務(wù)優(yōu)先級(jí)高于demo任務(wù)所以終端交互永遠(yuǎn)不被業(yè)務(wù)任務(wù)餓死。FreeRTOS_CLIProcessCommand會(huì)在內(nèi)部遍歷命令鏈表找到匹配項(xiàng)后調(diào)用對(duì)應(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)容在一長(zhǎng)串任務(wù)名和數(shù)字的情況下很容易超出1024字節(jié)超了就會(huì)被截?cái)唷?.3 隊(duì)列與信號(hào)量demo里任務(wù)間通信的三種姿勢(shì)demo里除了CLI交互還演示了任務(wù)間通信的典型寫法。先是隊(duì)列兩個(gè)demo任務(wù)通過(guò)一個(gè)隊(duì)列傳數(shù)據(jù)/* 全局隊(duì)列句柄 */ QueueHandle_t xDemoQueue; /* 發(fā)送任務(wù)每500ms向隊(duì)列寫入一個(gè)遞增的計(jì)數(shù)值 */ static void vDemoTask1(void *pvParameters) { int32_t lCount 0; for (;;) { xQueueSend(xDemoQueue, lCount, 0); lCount; vTaskDelay(pdMS_TO_TICKS(500)); } } /* 接收任務(wù)阻塞等待隊(duì)列消息收到后打印出來(lái) */ static void vDemoTask2(void *pvParameters) { int32_t lReceived; for (;;) { if (xQueueReceive(xDemoQueue, lReceived, portMAX_DELAY) pdPASS) { vPrintStringLine(DemoTask2 received: %ld, lReceived); } } }xQueueSend的第三個(gè)參數(shù)是等待時(shí)間0表示隊(duì)列滿時(shí)直接返回不等待portMAX_DELAY表示無(wú)限阻塞隊(duì)列沒(méi)有數(shù)據(jù)時(shí)接收任務(wù)就掛起不消耗CPU。這里有個(gè)新手容易踩的坑xQueueSend拷貝的是指針還是數(shù)據(jù)默認(rèn)行為是拷貝數(shù)據(jù)本身按隊(duì)列創(chuàng)建時(shí)設(shè)定的元素大小所以傳lCount沒(méi)問(wèn)題——但如果隊(duì)列元素是結(jié)構(gòu)體要確認(rèn)結(jié)構(gòu)體大小和隊(duì)列初始化時(shí)保持一致否則會(huì)越界寫壞堆。信號(hào)量和互斥鎖的用法在demo里通常體現(xiàn)在對(duì)共享資源的保護(hù)上。比如CLI的task-stats命令內(nèi)部要遍歷任務(wù)鏈表如果同時(shí)有別的任務(wù)在創(chuàng)建或刪除任務(wù)鏈表結(jié)構(gòu)正在變化遍歷就會(huì)讀到臟數(shù)據(jù)。常見做法是把命令處理邏輯放進(jìn)去臨界區(qū)或互斥鎖保護(hù)但這層細(xì)節(jié)demo通常簡(jiǎn)化處理真實(shí)產(chǎn)品里建議用xSemaphoreTake/xSemaphoreGive包住所有會(huì)并發(fā)訪問(wèn)內(nèi)核數(shù)據(jù)結(jié)構(gòu)的路徑。4. 編譯與運(yùn)行uVision4里從Build到敲命令的實(shí)操步驟4.1 打開工程與編譯選項(xiàng)核對(duì)工程文件是.uvproj后綴uVision4直接File→Open Project選它就打開了。打開后先做兩個(gè)檢查項(xiàng)別急著編譯。第一項(xiàng)在Options for TargetAltF7的Debug標(biāo)簽頁(yè)里左側(cè)單選按鈕必須選Use Simulator而不是某個(gè)調(diào)試器型號(hào)——這是不接開發(fā)板也能運(yùn)行的前提。選了模擬器后右邊還能設(shè)時(shí)鐘頻率對(duì)FreeRTOS來(lái)說(shuō)這會(huì)影響SysTick的計(jì)時(shí)基準(zhǔn)demo默認(rèn)給的頻率不用改除非你發(fā)現(xiàn)延時(shí)行為異常。第二項(xiàng)在Target標(biāo)簽頁(yè)確認(rèn)Device或CPU型號(hào)已指定為Cortex-M3內(nèi)核這樣Keil才知道用哪套指令集編譯。編譯按F7輸出窗口如果出現(xiàn)0 Error(s)、0 Warning(s)是最理想的。如果報(bào)了warning別無(wú)視——最常見的是declared but never used這類多數(shù)不影響運(yùn)行但如果是implicit declaration of function就要當(dāng)回事說(shuō)明某個(gè)頭文件沒(méi)包含或移植層文件漏加了。4.2 啟動(dòng)模擬器與連接終端窗口編譯通過(guò)后按CtrlF5進(jìn)入調(diào)試會(huì)話模擬器把ELF加載進(jìn)虛擬的Cortex-M3內(nèi)核PC停在Reset_Handler。此刻按F5運(yùn)行main()會(huì)執(zhí)行UART初始化和任務(wù)創(chuàng)建然后vTaskStartScheduler()接管控制權(quán)三個(gè)任務(wù)開始輪轉(zhuǎn)。接下來(lái)關(guān)鍵一步打開View→Serial Windows→UART#1。這就是模擬UART的終端窗口CLI任務(wù)的xUartReceiveByte讀到的字符就是在這個(gè)窗口敲進(jìn)去的vUartSendString的輸出也會(huì)顯示在這里。注意UART#1窗口默認(rèn)可能不彈出需要在調(diào)試會(huì)話進(jìn)行中主動(dòng)打開。打開后鼠標(biāo)點(diǎn)進(jìn)窗口輸入help回車如果能看到命令列表說(shuō)明CLI鏈路完全打通了。4.3 用內(nèi)置命令驗(yàn)證調(diào)度狀態(tài)運(yùn)行穩(wěn)定后終端里依次敲幾條命令驗(yàn)證內(nèi)核行為help列出所有注冊(cè)的命令每條命令的幫助文本也會(huì)顯示task-stats輸出一張表格列是任務(wù)名、狀態(tài)、優(yōu)先級(jí)、棧余量、任務(wù)編號(hào)。狀態(tài)列的X表示當(dāng)前正在運(yùn)行B表示阻塞中R表示就緒。連續(xù)敲兩次你會(huì)發(fā)現(xiàn)X標(biāo)記在CLI和兩個(gè)demo任務(wù)之間跳來(lái)跳去——這是搶占式調(diào)度最直觀的證據(jù)free-heap顯示堆剩余字節(jié)數(shù)。剛啟動(dòng)時(shí)記一個(gè)值跑一段時(shí)間再敲如果數(shù)值持續(xù)下降說(shuō)明有內(nèi)存泄漏task-stats輸出的Stack列單位是字不是字節(jié)計(jì)算棧使用量時(shí)要乘以4。另外vTaskList的實(shí)現(xiàn)依賴configUSE_TRACE_FACILITY為1如果改配置時(shí)把這開關(guān)關(guān)了task-stats命令會(huì)輸出空表或異常字符排查時(shí)優(yōu)先檢查這個(gè)宏。5. 避坑指南MDK模擬器里跑FreeRTOS的五個(gè)典型翻車現(xiàn)場(chǎng)5.1 一進(jìn)調(diào)試就HardFault棧溢出的經(jīng)典偽裝現(xiàn)象編譯、鏈接都通過(guò)進(jìn)調(diào)試器運(yùn)行不到一秒程序卡死在HardFault_Handler里斷點(diǎn)位置毫無(wú)規(guī)律。原因某個(gè)任務(wù)的棧開小了。demo任務(wù)里的vPrintStringLine這類打印函數(shù)內(nèi)部會(huì)走格式化字符串和UART發(fā)送棧消耗能達(dá)到100字以上再加上函數(shù)調(diào)用鏈的現(xiàn)場(chǎng)保存256字很容易見底。解決先把configCHECK_FOR_STACK_OVERFLOW設(shè)為2這樣每次任務(wù)切換時(shí)內(nèi)核會(huì)檢查棧頂?shù)乃痪€標(biāo)記是否被踩掉同時(shí)把棧深度從256加碼到512再試。如果還不穩(wěn)用task-stats命令看Stack列的真實(shí)余量反向調(diào)到夠用再加20%余量。5.2 xTaskCreate返回pdFAIL堆空間不夠的癥狀與定位現(xiàn)象程序跑起來(lái)了但少一個(gè)任務(wù)點(diǎn)開調(diào)試器的Watch窗口看xTaskCreate的返回值是0pdFAIL。原因configTOTAL_HEAP_SIZE設(shè)置太小任務(wù)棧加TCB分配不出來(lái)。這個(gè)坑在新手把堆從默認(rèn)值往小調(diào)想省RAM時(shí)特別常見。解決臨時(shí)把堆調(diào)到32KB在main()里任務(wù)創(chuàng)建前調(diào)xPortGetFreeHeapSize()打印初始堆任務(wù)創(chuàng)建后再打印一次差值就是所有任務(wù)吃掉的總內(nèi)存。按這個(gè)數(shù)反向把configTOTAL_HEAP_SIZE精調(diào)到合適值別拍腦袋。5.3 模擬器里UART輸入不響應(yīng)先分清輪詢還是中斷現(xiàn)象UART#1窗口里敲help窗口沒(méi)反應(yīng)但demo任務(wù)的周期性打印還在刷屏。原因CLI任務(wù)可能用的是中斷方式接收UART數(shù)據(jù)而模擬器對(duì)UART中斷的行為和真實(shí)芯片有細(xì)微差別——中斷優(yōu)先級(jí)配置不對(duì)或外設(shè)時(shí)鐘模型沒(méi)配好導(dǎo)致中斷永遠(yuǎn)不觸發(fā)。解決把接收改成輪詢方式即在CLI任務(wù)里循環(huán)讀UART狀態(tài)寄存器的RXNE位讀到1才取數(shù)據(jù)。模擬器里輪詢比中斷更可靠。如果你就是想驗(yàn)證中斷驅(qū)動(dòng)模式先確認(rèn)NVIC的優(yōu)先級(jí)分組和FreeRTOS的configMAX_SYSCALL_INTERRUPT_PRIORITY配置一致否則內(nèi)核會(huì)把中斷關(guān)掉數(shù)據(jù)自然進(jìn)不來(lái)。5.4 開-O2優(yōu)化后任務(wù)和CLI亂跳volatile與編譯器優(yōu)化之爭(zhēng)現(xiàn)象優(yōu)化級(jí)別從-O0改成-O2后原本正常的任務(wù)調(diào)度變得神經(jīng)質(zhì)或者某個(gè)while循環(huán)永遠(yuǎn)跳不出來(lái)。原因跨任務(wù)共享的變量沒(méi)加volatile編譯器認(rèn)為循環(huán)體內(nèi)沒(méi)人改動(dòng)它直接把讀變量的操作提到循環(huán)外。這種問(wèn)題在自旋等待標(biāo)志位、共享計(jì)數(shù)的場(chǎng)景里幾乎必現(xiàn)。解決對(duì)所有在任務(wù)間共享、會(huì)被任務(wù)或中斷修改的全局變量一律加volatile修飾。這不是玄學(xué)C標(biāo)準(zhǔn)里明確寫了volatile就是告訴編譯器這變量可能被外部改別優(yōu)化掉。5.5 SysTick延時(shí)不準(zhǔn)模擬器時(shí)鐘與configTICK_RATE_HZ的對(duì)齊現(xiàn)象vTaskDelay(pdMS_TO_TICKS(1000))量出來(lái)實(shí)際間隔明顯不是1秒有時(shí)快有時(shí)慢。原因Keil模擬器的指令執(zhí)行速度和真實(shí)芯片時(shí)鐘不是嚴(yán)格對(duì)應(yīng)的而且調(diào)試器單步執(zhí)行時(shí)SysTick計(jì)數(shù)會(huì)被暫停。這在模擬器里是正?,F(xiàn)象不是工程寫錯(cuò)了。解決確認(rèn)Target設(shè)置里的時(shí)鐘頻率與configTICK_RATE_HZ的換算關(guān)系一致做時(shí)間測(cè)量時(shí)用在線運(yùn)行F5而不是單步要驗(yàn)證精確延時(shí)時(shí)在任務(wù)里記錄一個(gè)tick計(jì)數(shù)器的前后差值來(lái)判斷別用墻上的秒表。6. 二次開發(fā)給命令行新增指令并驗(yàn)證調(diào)度行為的改造實(shí)戰(zhàn)6.1 注冊(cè)一條自定義命令三步操作改造第一步模仿內(nèi)置命令寫一個(gè)處理函數(shù)。命令的統(tǒng)一簽名是三個(gè)參數(shù)輸出緩沖、緩沖長(zhǎng)度、原始命令字串。假如我要加一條toggle命令讓一個(gè)共享計(jì)數(shù)加一/* 共享計(jì)數(shù)器跨任務(wù)訪問(wèn)一定要加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ù)組元素的順序不影響匹配因?yàn)榻馕銎魇前疵种饌€(gè)查的{ counter, counter: 打印并遞增共享計(jì)數(shù)器\r\n, prvToggleCounterCommand },第三步重新編譯、進(jìn)模擬器敲counter驗(yàn)證輸出。這里有個(gè)小習(xí)慣新命令的調(diào)試先用help確認(rèn)它被成功注冊(cè)了再跑實(shí)際命令能省掉不少命令明明是好的但就是不生效的排查時(shí)間。6.2 用互斥鎖保護(hù)命令中的共享資源上面那個(gè)counter命令在demo的簡(jiǎn)單場(chǎng)景下夠用但一旦有另一個(gè)任務(wù)同時(shí)修改ulSharedCounter遞增操作就不是原子性的可能會(huì)丟更新。FreeRTOS里修正這個(gè)問(wèn)題用互斥鎖/* 互斥鎖句柄在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ù)表示無(wú)限等鎖實(shí)際產(chǎn)品里建議給一個(gè)有限超時(shí)避免低優(yōu)先級(jí)任務(wù)拿著鎖長(zhǎng)時(shí)間不釋放導(dǎo)致高優(yōu)先級(jí)任務(wù)永久阻塞。注意互斥鎖和二進(jìn)制信號(hào)量的區(qū)別互斥鎖帶優(yōu)先級(jí)繼承機(jī)制當(dāng)高優(yōu)先級(jí)任務(wù)等鎖時(shí)系統(tǒng)會(huì)把拿鎖的低優(yōu)先級(jí)任務(wù)臨時(shí)提到相同優(yōu)先級(jí)讓它盡快跑完釋放鎖這是解決優(yōu)先級(jí)反轉(zhuǎn)的標(biāo)準(zhǔn)做法。6.3 驗(yàn)證方法調(diào)度行為與臨界區(qū)正確性的雙視角確認(rèn)驗(yàn)證改造是否成功我習(xí)慣從兩個(gè)角度看。一是CLI視角連敲幾次counter看返回值是否嚴(yán)格遞增再開一個(gè)demo任務(wù)周期性地也去遞增這個(gè)計(jì)數(shù)器如果CLI輸出的數(shù)值出現(xiàn)跳變大概率是競(jìng)爭(zhēng)條件沒(méi)覆蓋干凈。二是調(diào)試器視角給prvCounterCommand的xSemaphoreTake前后各下一個(gè)斷點(diǎn)運(yùn)行模式下一口氣觸發(fā)命令觀察另一個(gè)任務(wù)是否在同一個(gè)時(shí)刻也在修改ulSharedCounter——如果兩個(gè)任務(wù)同時(shí)停留在臨界區(qū)內(nèi)的斷點(diǎn)說(shuō)明互斥鎖沒(méi)真正攔住這時(shí)候要檢查是不是用了信號(hào)量而不是互斥鎖或者鎖句柄被別的代碼誤刪了。從那以后我每次拿到新的FreeRTOS工程都會(huì)先過(guò)一遍FreeRTOSConfig.h里的堆棧和堆參數(shù)再跑一遍內(nèi)置命令建立基線數(shù)據(jù)最后才動(dòng)手改業(yè)務(wù)代碼。這個(gè)小習(xí)慣幫我避開了至少五次和今天講的一模一樣的坑也希望這篇筆記幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
精品久久久亚洲AV成人网站| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 91美女小视频| 中出在线视频| 麻豆天美制片厂网站视频| 男人高清无码一区二区| 亚州综合在线| 亚洲怡春院| 婷婷激情啪啪| 日本色色色色色视频| 青青草原av| 三级片大波波| 婷婷亚洲综合| 久久婷婷精品| 三级三级三级a级全黄三| 国产激情在线| 99久久9| 久久超碰久| 日本视频一区二区三区| 国产无码精品久久久久久| 69久久久久久久久久久久久| 美女淫穴| 曰韩欧美国产传媒麻豆第一区| 日韩在线一区高清在线| 国产精品九九九| 九久9热| 亚洲伊人成综合成人网| 日本午夜久久电影| 美国一区二区免费视频| 正在播放国产精品一区| 91欧美经典| 亚洲日韩熟女人妻高清在线| 国内黄色精品| 欧美老妇综合网| 久久久激情| 蜜乳av一区二区| 欧美传媒| 囯产精品久久久久久久久久梁医生 | 欧美人妻久久精品二区三区 | 日本精品不卡一二三区| 欧美日韩亚洲一区二区在线观看 | 天美麻花大全视频| 看黄片视频免费| 国产肏逼网站| a片 xxxx受爽视频| 麻豆亚洲AV成人无码久久精品| 中文幕97| 目产99999久久999| 精品一二三区四视频| 宅男午夜在线视频| 麻豆一区在线| 天天影视之亚洲综合网| 国产视频小说| 亚洲色图日韩丝袜制服一区二区五月在线 | 精品久久青青草| 大香蕉啪啪啪| 青草青青久久久久久国产| AV九九| 色婷五月| 青青11操操操操操操操操| 五月天开心网| 91大神电影天堂| 91在线免费观看处女| 台欧久久精品视频| 日日妻色网| 久久久精品九| 曰韩中文人妻视频| 日本不卡三级网在线播放| 九九色综合| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 国产AV毛片| 日韩精品碰碰| 激情四射五月天| 花野真衣| 国产情色第一第二页在线观看| 视频黄站| 国产综合色精品在线观看| 日日干天天干夜夜爽| 2017人人操,人人摸| 国产美女销魂在线观看不卡| 嫩草一区二区在线观看| 色色综合网站| 国产乱码精品久久久久久| 亚洲超碰综合网| 久久久亚洲精品中文字幕人妻| 亚洲毛片基地专区| 亚洲AV性爱电影| 色色色欧美| 91伊人| 日本熟女不卡视频| 天天干天天日天天射黄色大片 | 欧美精品久久| 日韩欧美女求操每天更新| 免费A片三p视频| 日韩精品在线观看观看| 少妇被玩视频二三区| 亚洲十八禁止| 精品久久久久久中文字幕三区 | 日韩97视频| 欧美日韩97| 天天色综亚洲91污| 中 文字幕一区二区三四 五 区日 日 骚 | 欧美亚州综合网图片| 欧美综合综合| 色狠狠 - 百度| 无码一区二区三区四区五区六区七区八区九区十区视频 | 小泽玛利亚一二三| 日韩精品熟妇| 易易A毛视频| 日韩人妻制服丝袜av| 亚洲综合另类| 约操熟妇| 天堂国产AV| 久久亚洲日韩熟女精品| 激情av| 加勒比性爱成人在线| 中文字幕三四区| 中文字幕亚韩| 国产熟女无套内射| 色五月婷婷中文字幕| 神马午夜久久久| 久久久久久加勒比| 中文字幕一区二区三区视频播放| 久久久神马影院| 高清孕妇孕交 交| 伊人网综合在线视频| 9997se| 中文幕97| 欧美制服网站美腿丝袜| 精品免费1| 狂操嫩妻视频一区二区三区| 九久9精品| 色99视频| 天天操天天日青青草超碰av| 在线观看AV片| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 日韩欧美偷拍美女视频| 亚洲性爱电影| 麻豆一区二区三区精品| 国产精品久久久久久 百度| 中文字幕神马久久| 多毛小伙内射老太婆| 91色综合激情| 日本三级A片网站com| 色五月第四色| 欧美操逼熟女| wuyechaopeng| 高清国产av无码| 欧美美逼| 久久綜合很很很| 水多多映视AV| 91精产一区二区三区| 综合五月婷婷亚洲一区| 亚洲高清在线se| 国产AV高清AV无码| 伊人久久青青草| 99国产女人| 大鸡巴久久久| 久久中文字幕一区不卡| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 日本一级真人黄色性爱视频| 亚洲 另类 丝袜 自拍 动漫| 日韩性爱高清免费视频| 91亚洲最新在线| 欧美宗合网| 99热9| 亚洲国产丝袜熟女av| 久妇网| 国产三级资源在线观看| yazhououmeizongya| www.色婷婷.com| 亚洲无992tv| 高清肉丝中文无码| 亚洲成人综合在线| 精品一区二区三区国产| 欧美综合777| 久久婷婷影院| 成人无遮挡毛片免费看| 人人妻人人色一区二区三区| 国产精品天美传媒| 国产黄片在线免费观看| 激情欧美97| 色偷偷超碰亚洲| 国产亚洲精品激情| 97操综合| 欧美熟妇精品黑人巨大一二三区| 99re公开精品免费视频| 久久夜夜| 色偷偷综合91久久噜噜| 天堂麻豆天美| 97国产色综合| 亚洲五月婷| 男女激烈网站最新| 婷婷丁香九月| 无码78| 啪一啪免费视频| 狠狠色综合网| 亚洲?V无码专区在线电影| 亚洲欧美综合网站| 天天操人人操骚逼网站| 人妻密肉在线观看| 日日爽夜夜爽| 激情五月婷婷| 熟女乱伦二区| 激情视屏国产乱伦强奸| J?P?NESEHD熟女熟妇伦| 欧亚日韩中文在线| 伊人九九九| 超碰天天操| 久久久精品国产亚洲伊人| 人人操人人插人人摸人人干| 亚洲密乳AV| 男人天堂网站| 老女人综合| 欧美手机在线综合| 欧美洲精品一级| 欧美青青视频| 亚州色图欧美| 欧美少妇高潮久久91| 国产精品乱人伊人网| 超碰AV在线| 黄色欧美性爱视频| 国产亚洲女v在线观看| 九九九九免费| 91香蕉国产尤物视频| 国产综合久| 综合天天。| 蜜桃狠狠色伊人亚洲综合| 欧美性色综合网| 99久久无色码| 男人精品天堂一区| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 亚洲性爱高潮影院| 九九综合久久| 亚洲精品 大香蕉| 亚洲色图大香| 黄呦呦在线| 精品九九九九九九九九九| 精品国产国产AV| 超碰在线97国产| 久草精品视频| 亚洲永久AV无码精品秋霞| 人妻无码久久一区二区三区免费| 美日韩在线不卡人妻| 中 文字幕一区二区三四 五 区日 日 骚| 亚洲伊人久久精品狠狠在线| 欧美黑人性猛交91| 综合激情97 | 天美国产精品| 欧洲亚洲人妻无码中字久久三区四区| 搡老女人老91妇女熟女| 粉嫩av一区二区三区天美传媒| 蜜臀久久99精品久久久久电影| 欧美日韩制服| A片A5445444| 亚一综合久久久久久久久久| 久久久成人国产精品无码| 久久久久亚洲?V片无码V| 竹菊影视国产一区二区| 最新加勒比丝袜在线| 久久久av爱| 欧美日韩系列| 国产传媒av天美传媒在线| 日韩操啪| 超碰人人超在线观看| 日韩精品.久久精品.AV女优.天美传媒| 嗯~啊~快点 死我视频| 色哟哟1区2区| 久久午夜色播影院免费高清| 日韩福利电影网| 欧美aaaaaaa| 亚洲色图久久精品蜜| 91丝袜激情在线| 日本ZZ高免费A级视频| 思思热一热婷婷热一热| 国产精品久久久久久 百度| 中文字幕一区日韩精| 91扒丝袜综合在线| 丝袜美腿丝袜| 人妻另类 专区 欧美 制服| 日韩偷拍色图| 久久嫩草国产成人一区| 午夜精品久久久久久久| 精品人妻一区二区三区四区| 成人性爱视频在线看| julia ann久久| 97超碰碰| 大香蕉伊人久久| 91精品国久久久久久无码| 青草综合| 男人的天堂亚洲| 青青草久草AV| a级成人毛片免费视频高清| 清纯唯美激情四射| 深爱伊人影院| 国产中文字幕曰本毛片| 中 文字幕一区二区三四 五 区日 日 骚 | 欧美 中文字幕 一区| 97国产精品在线观看| 天天激情综合站| 丁香五月天婷婷姐| 人妻色偷色噜| 无码人妻系列少妇| 午夜无码精品免费看性色| 丁香九月激情啪| 亚洲资源网| 最新三级网址| 牛牛久久国产精品视频一二三| 久久久啊啊啊| www五月| 成人青青草原伊人| 99热在线播放| 日韩免费一级性爱视频| 欧美亚男人的天堂| 亚洲无无码αⅴ每日更新| 午夜福利久久久噜久噜久久综合 | 婷婷五月综合在线| 少妇激情AV| 欧美色性爱| 美女爽爽爽刺痛洞洞| 亚洲欧美日韩二区视频| 传媒免费一区二区三区| 久草免费在线一区二区| 情色大香蕉| 日韩一区二区精彩视频| 亚洲有码 视频一区| 激情文学88| 丰满人妻一区二区三区| 精品综合久久久久久五月天| 久久99国产综合精品女同| 欧美一区二区三区不卡高清视频| 激情文学 国产一二三aV| J?P?NESEHD熟女熟妇伦| 影音先锋一区二区在线资源| 午夜一区二区三区国产| 天天综合网~91| 青草视频在线看看看看看看看看看| 激情小说亚洲| 欧美后入式| 97干在线看| 偷拍 欧美 日韩| 欧美国产视频| 欧美一级特黄淫片在线观看| 大乔未久88一区| 亚洲欧美激情在线视频| 国产精品一区二区a| 第四色亚洲色图| 操逼www.| 91欧美综合| 国产偷仑| 五月天激情影院| 成人精品电影| 国产精品毛片?v一区二区三区| 学生妹天天看| 区二区亚洲婷| 岛国小电影| 在线观看黄色电话| 精品无码久久久久久国产浪潮| 蜜乳AV.COM| 人妻一区视频| 激情熟女12P| 97欧美综合网| 欧美亚洲特P| 粉嫩av一区二区三区四季| 天天肏美女| 麻豆这里只有精品| 亚洲国产高清福利视频| 国产亚洲精品美女久久久| 91亚洲欧美| 96超碰网| 97亚洲在线| 丁香五月婷婷基地| 激情抓乳插进去啪啪啪日韩| 日本视频在线观看污污污| 天天干电影| 爱丝福利| 九九人妻| 人伦四五区| 中文字幕诱惑制服人妻丝袜美丝袜美| 欧美精品偷拍| 91夜夜蜜桃臀1区2区3区| 亚洲天堂综合AV| 亚洲久热| 中文字幕乱码人妻一区二区三区,99精品| 99热精品在线观看| 99热这里| 超碰性爱97| 爱射综合| 安徽熟妇视频| 欧美韩日精品资源| 亚州国产成人精品女人久久 | 玖玖资源中文字幕制服丝袜| 男人久久精品| 熟女精品一区二区在线观看| 熟女91网| www欧美91| 中文字幕欧美丝袜07资源| 国产后入清纯| 91成人亚洲色图| 91亚.色| 亚洲欧美天| 老熟乱一区二区三区四区| 精品夜夜澡人妻无码AV| 人人操人人色网| 国产 亚洲 一二三四| 91亚洲色人| 国产精品久久久久中文字幕| 婷婷五月天激情小说| 96AV精品| 91艹| 九七超碰| 亚洲啪啪视频一区二区| 五月婷视频| 求求你操操我| 久久婷婷苹果| 亚欧毛片基地国产毛片基地| JIZZJIZZ国产精品喷水| 玖玖爱综合| 99re6国产精品99re| 日本不卡中文| 91丨国产丨白浆秘 洗澡动漫| 亚洲熟女精品| 丁香激情五月| 无卡一区=区| 国产一区二区在线播放| h无码动漫在线观看| 欧美日韩国产传媒在线精品| 97精选久久| 欧美精品三区| 91丝袜美女国产| 久草在| 射综合网| A 天堂在线观看视频| 日韩情色视频| 日韩精品人妻中文字幕不卡乱码| 另类TS人妖一区二区三区| 国产高潮AA片免费看| 91亚洲影院综合| 9久久精品| 国产精品一级片在线看| 色狠人在线99| 九九九九国产| 99热这里是精品| 超碰伊人在线| 激情视屏国产乱伦强奸| 亚洲免费97免费| 国产品精品自在在线午夜免费| 亚洲 欧美 手机在线观看| 综合国产97| 狠狠爱夜夜| 久久三| 天天澡天天爽日日av| 国产精品熟女一区二区三区| 久久性爱城| 久久久久斤小| 留下AⅤ黄色片| 俺去久久| 97爱综合| 婷婷五月天伊人| 日日摸日日弄日日拍| 中日韩熟女| 日韩啪啪啪视频| 国产成人亚洲精品无码最新在线| 清纯唯美综合| 久污| 国产女人操逼视频| 欧美午夜视频| 美国一区二区三区视频| 99啪啪| 亚洲国产成人精品久久久国产成人一区二区 | 日本精品999| 色九月婷婷| 啊啊啊男女| 99日精品欧美国产| 中文字幕丰满子伦无码专区在线视频最新 | 97AV在线观看| 97综合在线观看| 久久精品国产亚洲AV先锋| 久久本道| 久久久久久久九九九九九九| 性老妇一区二区三区| 久久久久久久久久久免费精品| 欧美综合色站| 美国人人操人人操| 中文字幕日韩情色| 激情六月婷婷| 在线人成亚洲视频免费观看| 欧美激情色婷婷花野真衣一区二区| 久久黄色视频一区二区三区 | 欧美一区二区三区成人性生活| AV在线性爱| 免费亚洲国产精品久久一区| 色爱国产| 亚洲电影中字一区二区| 亚洲日产专区婷婷| 熟妇操花| 网友自拍第一页| 热久日综合| 亚卅熟女乱色| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 男人的天堂VA| 九月AV| 国产精品久久久久久久黄无码| 大香蕉性欧美| 97超碰色屌| 亚洲综合中文字幕有码| 欧美少妇色图| 免费亚洲国产精品久久一区| 丁香六月激情综合| 国产精品无码久久久久2025| 97超碰超| 91超碰碰在线| 91精品国产综合久久久蜜臀| 国产精品久久久久久久黄无码| 亚洲se91| 国产99999久久精品| 性站 | 色男人色天堂东京热| 日韩国产成人自拍视频| 九九热在线视频| 极品极品色影院| 日产中文字幕2020| 99国产精品自在自在| 99操视频| 午夜a成v人电影| 亚洲不卡一| 九九久久久久久爱| 99久久99九九99九九九| 国产亚洲日韩欧| 91模特在线观看| 在线观看A啊啊啊| 亚洲五月丁香花狠狠干一区二区三区| 岛国网址国产| 狠狠久久手机视频精品| 久久久久久久| 国内毛片四区| 色香综合天天影视综合| 超碰97久久观看| 欧美日韩国产中文精品字幕自在自线,| 国产亚洲精品av一区| 国产 日韩,欧美 自拍| 99热在线只有精品| 日韩专区久久久| 超碰这里只有精品| 亚州久久9| 中文字幕视频2区| 看看小穴| 最新AVzaixian| 欧美成人精品A片免费一区99| 日韩av影片在线观看| 为用户提供免费看黄网址在线观看| 97aiaiai| 我要去看2个日本美女.com曹逼| 丰满人妻一区二区三区四区| 老司机香蕉| 9久9久| 日韩有码回春沙龙第一页| 中文字幕精品久久久久人妻红杏ⅰ| 色 婷97| 九九十八精品| 日本999精品| 少妇内射www在线观看视频| 精品十三区| 国产精品欧美激在线| 91艹逼精品| 操死我了嗯嗯嗯| 动漫av中文| 亚洲一二三四区在线免费看视频| 人妻天天爽夜夜爽2| 欧美天天在线| 男人的天堂99| 亚洲?V高清一区二区三区尤物| 酒色综合网| 偷拍精品一区二区三区| 超碰97人人cao| 少妇一区二区三区精选| 久久精品国产亚洲AV嘿嘿| A 天堂在线观看视频| 国产一区二区三区影片| 六六久久日韩不卡| 欧美一区二区三区大综合| 97日视频| 51一区二区三区| 一本色道综合久久欧美日韩精品| 人人摸人人入| 91高清无码下载| 久久久网站| 日韩伦理久 久久 清纯| 日韩精品电影| 97在线免费视频观看| 亚洲精品国语在线播放| 日韩探花精品在线视频| 丁香激情五月| 美骚妇av高清在线| 欧美九九九| 成人av性爱电影在线观看| 操逼视频亚洲| 久操视频免费在线观看| 欧美综合 站| 97久久国产精品女不卡| 亚洲精品乱码线路中文字幕| 2018色综合天天操| 夜夜嗷嗷一区二区| 97国产精品一区| 又大又长又粗又爽又黄| 蜜桃色色网站视频三区| 中文字幕一区二区三四五区日日骚| 偷拍导航视频网站| 日本免费人成视频播放120秒| 另类在线| 在线五区| 国产一区二区三区白丝| 亚洲熟妇极品| 人妻人久久精品中文字幕| 97超碰人人模人人拍人人| 高清国产av无码| 欧美大香蕉97| 99re9| 欧美在线干| 色色色色色色色色综合| 中日韩免费看男女操逼大全| 99熟女| 任你干在线视频| 岛国1区2区3区在线观看| 人妻少妇久久久| 后入福利| 手机在线人成免费视频| 欧美97视频| 操国产逼| 澳门成人网站久国产日韩| K8久久久久| 岛国视频免费在线观看| 欧美少妇性乱| 国模私拍一区二区三区神乳| 啊啊啊com| 亚洲天天更新| 这里只有精品视频在线| 日韩97超碰| 立川理惠无码一区二区| 国产99999久久精品| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 曰韩少妇无码| 18啪啪手机免费性爱| 中文字幕加勒比海高清无码免费视频| 亚洲久9| 亚洲 日韩 欧美 国产综合体| 99热这里只有精品1| 久久久无码av精| 午夜久久久| 欧美成人午夜免费福利785| 热久久无毒不卡| 中文字幕123| 男人天堂久久精品不卡| 5278欧美一区二区三区| 无卡一区=区| 最新日韩黄片| 97超碰9| 久久国产精品91| 中文操逼字幕| 亚州春色| 欧美成人黄网色网站| 欧美,日韩,中文,另类| 99久久99久久综合| 亚洲av青草久久一区二区| 伊人青青一区成人视频在线观看区| 熟妇综合一区二区三区| 欧美操逼视频二区| 国产黄色av大片网站 | 欧美亚洲日本激情在线| 色色九区| 91色黑人少妇| 天天色天天干天天射| 久久久久久中文| 999久久久精品国产| 99久久无码| 试看60秒| 国产熟女少妇一区| 久久综合亚洲色1080p| 天天日天天干天天摸天天操| 国产馆极品诱惑| 夜夜操青青草| 日本不卡一二区| 色婷婷在线视频精品导航| 欧美,日韩综合久久| 91美女视频。| 操香逼| 爽 好舒服 无码刺激久久| 天美91| 99re在线视频国产| 亚洲色图激情小说| 一本一道波多野毛片中文在线| 亚洲欧美变态| 97超碰天天| 人人操人人狠狠操| 91人精品妻入口| 在线洲亚线| 97视频620| 五月天偷拍| 国产亚洲精品农村妇女| 啊啊啊啊啊啊啊啊视频| 久久久久国产| 久久久久国产亚洲一区欧美色图日韩 | 屁股久久久久久| 伊人色综合欧美| 97久精品| 欧美操人| 丁香六月东京热| 人妻无一区二区三区| 91丰满| 欧美亚洲高清晰| 欧美色图偷拍另类| 伊人亚洲国产一成人久久精品,久久| 国产精品亚洲天堂网址| 国产精品人妻免费精品| 欧美亚洲中文字幕| 久久精品一区二区三区蜜桃臀| 后入人妻一区| 97天天爽| 91丝袜美女国产| 日韩AC| 日本www操操操| 亚洲精品乱码线路中文字幕| 91少妇| 人人操人人肉久久精品| 蜜臀va69| 亚洲九九视频在线观看| 精品久久大胆人体| 日日橹狠狠爱欧美超碰| 97干com| 色五91| 九九九九九九九精品视频| 天天肏夜夜肏| 啪啪啪综合网| av九九| 色婷婷五月天| 骚逼高潮久久精品| 色丁香五月婷婷| 可以看的av| 蜜桃久久一区二区三区| 丝袜AV一二三区| 日本91白丝| 欧美制服网站美腿丝袜| 又大又黄国产| 热天堂一区二区| 亚洲精品天天影视综合网 | 婷婷亚洲综合| 99热91| 一本道综合色图| 男人兔费天堂| 成人AV素股で擦久久| 骚乳在线| 亚洲男人天堂2016| 欧美亚洲清纯| 欧美天天干| 精品人妻一二三| 男女日B国产| 噜噜噜在线视频| 深夜激情无码| 婷婷五月天激情四射| 奸色色 男人天堂 天天射| 中文字幕在线观看第二页| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 野狼福利社区| av爱爱爱| 中文字幕123| 丁香六月婷| 天天摸夜夜摸| Aa东京男人的天堂| 精品久久久久综合无码| 强被迫伦姧在线观看无码网站| 爽极品影院| 欧美顶级黄片AAAAA在线免费看| 五月综合久久| 欧美78| 性感美女91影视| 成人性爱免费播放| 韩日无码在线观看| 男人的天堂在线有码| 中 文字幕一区二区三四 五 区日 日 骚| 天天摸天天舔天天操| 1024精品在线| av网站在线观看了| 欧美成人精品A片免费一区99| 夜夜嗨AV蜜臀av| 玖玖爱伊人玖玖爱| 亚洲无码精品AV久久久| 欧美v亚洲v日韩v最新在线二区 | 97精品一区二区视频| 国产一区二区在线电影| 久久久久性熟视频| 综合网亚洲1| 亚洲一区中文精品| 人人色人人操在线| 日韩av色图综合| 超碰久超碰久| 国内毛片婷婷六月色| 久超碰在| 97精品全部| 淫荡熟女乱伦网| 一区二区三区 丝袜 高跟 美腿| 亚热日本熟女| 成人精品在线免费视频| 国产超碰| 国产第二页| 日韩成人高清一区二区| 1024日韩| 欧美综合在线第一页| 成人性爱av| 99久久无色码| 蜜臀99久| 一级免费啪啪片| 狠狠做深爱婷婷久久二区| av毛片aaaaa免费看| 亚洲欧美精品一区天堂久久| 青青草国产一区二区三区| 欧美的性爱网站免费| 色性荡荡荡荡视频| 亚洲视频精选| 97在线精品| 国产2.3.4区| 亚洲成熟国产精品美女| 亚洲成人色情五月天丁香花| 四虎国产精品永久在线囯在线| 色婷婷五月天| 伊人九九九| 人妻AV在线| 超碰99在线| 超碰久热| 欧美东京热青青草| 九九热在线视频| 96超碰网| 久久麻豆一区二区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 中 文字幕一区二区三四 五 区日 日 骚 | 精品久久久久久久| www.婷婷| 美女久久久| 亚洲精品一区二区三区新线路| 亚洲熟女av中文字幕| Julia在线播放亚洲久久| 青草地一本线一区二区三区| 五月天激情网图片| 欧美日韩在线小说| 99爱久久视频频| 日本熟女不卡视频| 樱花草社区www中国| 免费一级性爱久久| 中出后入| 操逼日韩无码 | 亚洲欧洲成人在线电影| 自拍盗摄一区| 影音先锋日本一区二区| 色天堂在线观看| 免费一级毛片在线视频观看| 蜜臀AV一区二区三区| 亚洲一区二区麻豆影院| 熟女探花啪啪| 国产精品丝袜久久亚洲不卡| 久久精品国产96精品亚洲拳交| 日韩BBN| 欧美日韩国产中文超碰| 免费久久一级毛片大黄| 操少妞在线视频| 久久久五月天| 国产精品黑人一区二区三区| 亚洲 另类 丝袜 自拍 动漫| 精品人妻美妇91job| 91亚洲电影| 亚洲区限制级| 久久人人看| 秋霞一集毛片观看| 麻豆区久久久久亚| 亚洲精品819| 中日韩久久久| 97视频免费播放| 极品粉嫩少妇视频| 日韩人妻一区二区精品| 久久精品国产亚洲AV先锋| 91久久久老司机| 久久思思热| 一级特黄aaa大片在线观看成人一级片在线观看 | 青青伊人久久| 久热无码| 能在线播放的国产三级| 60秒不遮不挡| 人妻激情在线视频| 爆乳免费黄网站| 老司机射| 亚洲av国产av综合av卡| 九九九成人| 97er欧美性| 亚码激情| 亚洲AV无码成人精品久久| 久久久久久网址| 欧美最婬乱婬爆婬牲视频| 好吊色一区| 婷婷五月天在线观看| 激情网色| 亚洲国产成人精品999| 亚洲黄色电影| 九九九九免费视频| 天堂国产AV| 大香交伊人网| 国产伦乱91| 欧美极品性爱天天射| 伊人国产成人av网站| 99超碰网| 东京热大香焦| 东京热精品97综合网| 中文字幕 一区二区 亚洲无码| 操逼日韩无码| 97欧美性爱| 久久久久亚洲av综合波多野制衣| 97免费视频在线观看| 91免费看中出视频| 精品久久久久成人码免| 久草精品一区| 欧美色天堂网在线视频| 男人的天堂.com| 久都青青视频 | 欧美色另类| 噜噜噜噜天天狠狠| 日本97久久| 春色综合免费| 人人九九精| 941超碰| 乱码人妻一区二区三区| 久久国语| 久久视频少妇美女| 老司机午夜福利视频一区二区| 区一二区日韩亚洲乱码av电影| 亚洲另类久操网| 超碰亚洲欧美日韩无| julia高潮后不停追击中出| 九九久久精品| 青青草日韩无码| 人妻天堂综合网| 伊人综合色网| 炮色五月| 亚洲综合码| 东北女人被操| 欧美猛交黑寡妇中文字幕| 四虎视频在线观看| B049AV在线播放| 天美一区在线| 色777999综合| 九九九久久久W精品| 麻豆av一区二区| 97天天日| 日本熟女不卡视频| 隔壁邻居波多野结衣中文字幕| 免费公开人人操| 国产精品视频白浆免费| 成人AV在线电影| 粉嫩国产精品久久粉嫩| 日韩一区二区熟女| 麻豆国产成人精品| 国产精品大屁股999| 天美传媒麻豆一区二区三区国产精| 老熟乱一区二区三区四区| 天天综合网~91| 久久久久亚洲熟妇熟女| ..日韩av毛片精品久久久| 18禁超污无遮挡无码免费网| 五月丁香综合网| 老女人日韩美91| 亚洲色丰满少妇高潮| 桑老女人九区| 婷婷色综合欧美日韩| 国产特级毛片AAAAAA高潮流水| 亚洲码专区| 91女在线观看| 综合一区二区影视| 免费视频一二三区| 翔田千里一区二区三区奶水| 日韩中文字幕视频在线观看| 亚洲国产欧美日韩人妻日中文| 国产美女激情| 天天久久久久久| www熟女乱伦com| 日韩欧美国产高清视频| 嗯嗯嗯嗯啊啊啊好紧好大| 啊啊啊啊啊啊啊在线| 亚洲高清自拍| 亚洲成人福利电影免费| 午夜激情床戏激情| 另类老少妇| 91性高朝久久久久久久久| 久久久 国产精品| 天天综和| 超碰色图| 探花在线免费观看视频国产一区| 香蕉在线一区二区三区| 久草综合视频| 久热一区二区| 天天做日日爱夜夜爽| 亚洲一二三精品久久网 | 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 日本免费不卡二区| 亚洲第一页综合在线| 性爱网站一区二区| 日韩人妻资源在线看| 精品人妻一二三四区视频| 国产自制av蜜乳| 91精品黄在线观看| 97一区二区三区视频| 白丝AV| 婷婷综合网站| 加勒比av官网在线| 9色国产精品一区粉嫩| 91蜜桃婷婷狠狠久久综合9色| 综合97亚洲| 国产精品盗摄 偷窥盗摄| 日本三级韩三级99久久| 欧美,日韩,中文,另类| 欧美aaaaaaa| 麻豆AV96熟妇人妻| 中国一级αV| 伊人97超碰| 97网色| 婷婷操逼| 日日骚av| 亚洲天堂 视频你懂的| 日韩精品国模| 欧美日韩精品一区二区三区高清| 你草精品在线视频| 国产91亚洲精品一区二区三区| 啊啊啊啊嗯嗯嗯用力好爽 | 久思思热视频在线观看| 殴美综合色88| 国内亚洲高清无码| 有码免费观看| 国产午夜在线观看| 高清不卡国产| 国产在线观看一区二区三区| oumeisetu综合| 欧美色乱| 台湾佬激情综合| 免费观看日本操逼视频| 中文字幕精品人妻丝袜| 最新日本中文字幕| 第四色色综合91| 日日操免费视频| SS久久| 日日操丁香五月天| 中出后入| 亚洲精品日韩国产欧美| 亚洲在线A| 99热91| 另类图片天天影视| 国产欧美伊人| 国产精品久久aV| www.高清无码诱惑一区.com| 欧美日韩性爱电影在线| 久久久111| 久久精品亚洲成a人天堂| 亚洲图片 欧美电影| 日韩欧美视频青青| JIZZJIZZ亚洲女人被躁| 亚州春色| 国模精品娜娜一二三区| 天堂亚洲精品| 好吊色在线观看| 中文字幕日韩专区精品系列 | 精品国产Av无码久久久伦古装| 熟妇最新先锋一二三区| 大香蕉一区二区在线观看.| 青青草日韩免费观看高清在线| 日本在线视频导航| 91 丝袜在线播放| 麻豆AV短剧| 久久久久国产一区二| 国产精品视频在线观看| 久偷拍| 免费一级欧美片片线观看| 精品高潮| 91精品久久久久久久久久| 婷婷五月天色| 98人妻精品一区二区色欲| 天天操天天7| 久久久999日本大片| 中文字幕一区二区免费在线| 久99在线免费观看视频| 精品无吗久久| 免费看一级a性色生活片久久无| 亚洲AV无码成人精品久久| 国产熟女无套内射| 国产小炒后入式| 骚逼高潮久久精品| 五月婷网站| 亚洲欧美999| 亚洲综合色在线| 青苹果影院男人的天堂| 国产一区二区啪啪视频| 囯产精品久久久久久久久久梁医生 | 老熟女91视频| 日本中文字幕一区| 欧美亚洲综合色| www.久久最新地址| 少妇久久| 国产精品另类一区大香蕉| 欧美综合第一| 99在线免费视频| 欧美日韩国产高清在线一二三区 | 91在线页| 欧美成va视频网站| 变态乱伦伪娘灌肠一区二区| 欧美少妇人妻| 精品人妻高清麻豆av| 天美传媒Av在线| 蜜桃久久久久久久| 清柠毛片| 国产亚洲精品第一最新| 无码久久亚洲高清,| 国产精品无码在线| 色综合国产在线观看| 超碰吊日色| 尤物视频网 刘玥| 啊啊啊啊啊好大好舒服想要| 怡红院视频在线| 久久99网站| www网站黄| 女人 A一级| 福利社区午夜一区二区| 高清有码一区二区| 97精品免费| 麻豆成人影音在线| 天堂亚洲精品| 中出91视频| 91热色| 日产成人久久| 欧美天天综合站| 亚洲精品一卡二卡三卡福利视频网站| 中文字幕一区二区三区人妻少妇在线| 六月婷婷激情| 久久怡红院| www.激情| 日韩另类色图| 中文字幕啊啊啊在线观看视频| 婷色五月天| 五月天婷婷久久| 久久丁香| 久久亚洲不卡| www.四虎在线| 亚洲熟妇乱女区二区三区| 有码免费观看| 久久精品视频28| 欧美亚洲美少妇一区二区| 国产白丝在线| 99国内熟女露脸视频| 人妻无码视频一区二区三区久久| 欧美色图人妻| 激情久久日韩精品中文字幕麻豆| 大香蕉在线SuP| 黑人精品欧美一区二区蜜桃| 四虎av在线| 国内伊人久久久久久网站视频| 91肉丝| 日韩极品无码B| 国产精品视频麻豆入口|