免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

GD32移植FreeRTOS實戰(zhàn):從裸機到RTOS的完整指南

GD32移植FreeRTOS實戰(zhàn):從裸機到RTOS的完整指南 1. 為什么要把FreeRTOS搬到GD32上1.1 從裸機到RTOS的真實痛點很多做MCU開發(fā)的朋友一開始都是在GD32或者STM32這類Cortex-M內(nèi)核的單片機上跑裸機程序。裸機開發(fā)的好處是簡單直接一個while(1)大循環(huán)加上幾個中斷小項目跑得挺歡。但項目一旦復(fù)雜起來比如要同時處理串口協(xié)議解析、按鍵掃描、LCD刷新、傳感器采集、數(shù)據(jù)存儲這幾件事裸機就開始捉襟見肘了。你不得不用各種狀態(tài)機和延時來拼湊代碼越寫越亂一個地方改動了另一個地方就出問題。我印象特別深的一次做一個帶LCD顯示的工業(yè)控制器主循環(huán)里要刷屏、要讀編碼器、要跑Modbus從站、還要做PID運算。裸機方案下刷屏的時候編碼器脈沖就丟了PID周期也不穩(wěn)定。后來上了FreeRTOS把每個任務(wù)拆開給不同的優(yōu)先級問題一下就清晰了。這也是為什么越來越多的GD32項目開始引入FreeRTOS——它幫你把并發(fā)的復(fù)雜度從應(yīng)用層轉(zhuǎn)移到了內(nèi)核層你只需要關(guān)心任務(wù)之間的邏輯關(guān)系。GD32作為國產(chǎn)Cortex-M3/M4的主力芯片和STM32在寄存器層面高度相似但又有自己的外設(shè)差異。把FreeRTOS移植到GD32上本質(zhì)上就是讓FreeRTOS的調(diào)度器、任務(wù)切換、系統(tǒng)節(jié)拍這些核心機制能夠在GD32的硬件上正確跑起來。聽起來好像只是改幾個宏定義但實際操作中從時鐘配置到中斷優(yōu)先級從堆棧對齊到SysTick接管每一步都有坑。1.2 移植前你需要準(zhǔn)備什么先說硬件和軟件環(huán)境。硬件方面一塊GD32F303或者GD32F103的開發(fā)板是最常見的起點這兩款芯片在社區(qū)里資料最多踩坑的人也最多遇到問題好查。調(diào)試器用J-Link或者GD-Link都行J-Link的兼容性更好一些尤其是在Keil下面用SWD模式調(diào)試的時候。軟件方面Keil MDK是大多數(shù)人的首選版本建議用Keil 5.36以上太老的版本對GD32的器件支持包兼容性不好。你需要安裝GigaDevice的器件支持包這個在Keil的Pack Installer里可以直接下載或者去官網(wǎng)下載離線包手動安裝。FreeRTOS的源碼直接從官網(wǎng)或者GitHub拉最新穩(wěn)定版就行我一般用FreeRTOSv202112.00這個版本穩(wěn)定且資料多。注意不要用Keil自帶的FreeRTOS中間件版本那個版本往往比較老而且和官方源碼在目錄結(jié)構(gòu)上有差異后期排查問題的時候容易混淆。另外你需要一個能正常編譯的GD32裸機工程模板。這個模板應(yīng)該包含啟動文件、系統(tǒng)時鐘配置、GPIO驅(qū)動這些基礎(chǔ)內(nèi)容。如果你還沒有建議先用GD32的官方固件庫建立一個標(biāo)準(zhǔn)工程確保LED能閃、串口能打印然后再往上加FreeRTOS。這個順序很重要不要一上來就把FreeRTOS塞進去出了問題你分不清是裸機工程本身有問題還是移植有問題。1.3 移植工作的整體思路移植FreeRTOS到GD32核心工作可以拆成三塊第一塊是文件結(jié)構(gòu)的組織把FreeRTOS的源碼文件正確地加入到Keil工程里第二塊是配置文件的編寫也就是FreeRTOSConfig.h這個文件決定了FreeRTOS在你這顆芯片上怎么跑第三塊是硬件相關(guān)的接口適配主要是SysTick中斷、PendSV中斷和SVC中斷這三個它們是FreeRTOS任務(wù)切換的硬件基礎(chǔ)。這三塊里面第一塊是體力活第二塊是腦力活第三塊是技術(shù)活。很多人移植失敗問題往往出在第二塊和第三塊。FreeRTOSConfig.h里的每一個宏定義都有它的作用配錯了輕則功能異常重則直接HardFault。而三個中斷的優(yōu)先級配置如果和GD32的中斷優(yōu)先級分組不匹配任務(wù)切換就會出問題。我個人的習(xí)慣是先把FreeRTOS的源碼文件按照功能分組放到工程目錄里然后在Keil里建對應(yīng)的Group這樣結(jié)構(gòu)清晰后期升級FreeRTOS版本的時候也方便替換。配置文件單獨放在一個User目錄下和GD32的固件庫配置放在一起便于統(tǒng)一管理。2. FreeRTOS源碼文件組織與Keil工程配置2.1 源碼目錄的合理劃分FreeRTOS的源碼包解壓出來之后文件很多但真正需要加入到工程里的其實就那么幾個。我的做法是在工程根目錄下建一個FreeRTOS文件夾里面再分三個子目錄Source、Portable和Config。Source目錄放FreeRTOS的核心源碼包括tasks.c、queue.c、list.c、timers.c、event_groups.c、stream_buffer.c、croutine.c這幾個文件。其中tasks.c和queue.c是必須的timers.c如果你要用軟件定時器就得加event_groups.c和stream_buffer.c看你的項目需求croutine.c是協(xié)程功能一般用不到可以不加。Portable目錄放和編譯器、芯片架構(gòu)相關(guān)的文件。對于Keil MDK加上Cortex-M3/M4的組合你需要的是Portable/RVDS/ARM_CM3或者ARM_CM4F這個目錄下的port.c和portmacro.h。注意ARM_CM4F是帶浮點單元的版本如果你用的是GD32F303這類帶FPU的芯片并且任務(wù)里要用浮點運算就選CM4F如果是GD32F103這類沒有FPU的就選CM3。選錯了編譯能過但運行的時候浮點上下文保存會出問題。Config目錄放FreeRTOSConfig.h這個文件不是源碼包里現(xiàn)成的需要你自己寫或者從Demo里改。我建議從FreeRTOS源碼包里Demo/CORTEX_STM32F103_Keil這個目錄下找一個接近的配置作為起點然后根據(jù)GD32的實際情況修改。內(nèi)存管理方面FreeRTOS提供了heap_1到heap_5五種方案。heap_1最簡單只能分配不能釋放heap_2支持釋放但不合并相鄰空閑塊heap_4支持釋放和合并是最常用的heap_5支持多塊不連續(xù)內(nèi)存區(qū)域。對于GD32項目我一般直接用heap_4兼顧了功能和 simplicity。對應(yīng)的文件是Portable/MemMang/heap_4.c。2.2 Keil工程里的分組與路徑設(shè)置在Keil里我通常會建三個GroupFreeRTOS_Core、FreeRTOS_Port和FreeRTOS_Config。FreeRTOS_Core里放tasks.c、queue.c、list.c、timers.c這些核心文件FreeRTOS_Port里放port.c和heap_4.cFreeRTOS_Config里放FreeRTOSConfig.h。這里有一個容易忽略的點頭文件的包含路徑。你需要在Keil的Options for Target - C/C - Include Paths里把FreeRTOS/Source/include、FreeRTOS/Portable/RVDS/ARM_CM3或CM4F、FreeRTOS/Config這三個路徑都加進去。少了任何一個編譯的時候都會報找不到頭文件的錯誤。還有一個細節(jié)FreeRTOS的源碼文件里會包含一些FreeRTOS.h、task.h這樣的頭文件這些頭文件又依賴于FreeRTOSConfig.h。所以FreeRTOSConfig.h所在的路徑必須在包含路徑里而且這個文件的名字不能改必須是FreeRTOSConfig.h因為源碼里是硬編碼引用的。實操心得在Keil里添加文件的時候建議用“Add Existing Files to Group”的方式把文件從工程目錄里添加進來而不是直接復(fù)制到Keil的默認(rèn)目錄。這樣工程目錄結(jié)構(gòu)清晰換電腦或者分享給同事的時候直接把整個工程文件夾打包就行不會出現(xiàn)路徑丟失的問題。2.3 編譯選項的調(diào)整GD32和STM32一樣都是Cortex-M內(nèi)核所以編譯選項上基本一致。在Keil的Target選項中需要確認(rèn)幾點一是芯片型號選對比如GD32F303ZE二是ROM和RAM的起始地址和大小要和芯片手冊一致三是如果用了FPU要在C/C選項卡里把Floating Point Hardware設(shè)為Single Precision。另外FreeRTOS的port.c里有一些內(nèi)嵌匯編Keil的編譯器對這些匯編的語法支持是沒問題的但如果你開了很高的優(yōu)化等級有時候會出現(xiàn)一些奇怪的問題。我一般調(diào)試階段用-O0發(fā)布的時候用-O2-O3不太建議FreeRTOS的某些臨界區(qū)代碼在-O3下可能會被優(yōu)化出問題。還有一個重要的編譯選項是__MICROLIB。如果你在Target里勾了Use MicroLIB那么printf重定向會簡單很多但MicroLIB和FreeRTOS本身沒有沖突。不過要注意MicroLIB不支持某些標(biāo)準(zhǔn)庫功能如果你的項目里用了這些功能就不要勾。3. FreeRTOSConfig.h配置文件的逐項拆解3.1 基礎(chǔ)調(diào)度相關(guān)配置FreeRTOSConfig.h是整個移植過程中最需要仔細對待的文件。我把它里面的配置項分成幾類第一類是基礎(chǔ)調(diào)度相關(guān)的。configUSE_PREEMPTION這個宏決定是搶占式調(diào)度還是協(xié)作式調(diào)度。搶占式調(diào)度下高優(yōu)先級任務(wù)就緒時會立刻搶占低優(yōu)先級任務(wù)協(xié)作式調(diào)度下任務(wù)必須主動讓出CPU才會切換。絕大多數(shù)項目都用搶占式設(shè)為1。configUSE_TIME_SLICING是時間片輪轉(zhuǎn)當(dāng)多個任務(wù)優(yōu)先級相同時每個任務(wù)輪流執(zhí)行一個tick。這個一般也設(shè)為1除非你有特殊需求。configCPU_CLOCK_HZ這個宏要填GD32的系統(tǒng)時鐘頻率。比如GD32F303跑到120MHz這里就填120000000。這個值必須和實際的系統(tǒng)時鐘一致否則FreeRTOS的延時和超時都會不準(zhǔn)。configTICK_RATE_HZ是系統(tǒng)節(jié)拍頻率一般設(shè)為1000也就是1ms一個tick。這個值決定了FreeRTOS的時間精度。設(shè)得太高中斷開銷大設(shè)得太低延時精度差。1000Hz是個比較平衡的選擇。configMAX_PRIORITIES是最大任務(wù)優(yōu)先級數(shù)FreeRTOS里優(yōu)先級數(shù)值越大優(yōu)先級越高。這個值根據(jù)你的項目需要來設(shè)一般設(shè)個8到16就夠了。設(shè)得太大浪費RAM因為每個優(yōu)先級都要維護一個就緒列表。configMINIMAL_STACK_SIZE是空閑任務(wù)的堆棧大小單位是字word不是字節(jié)。在Cortex-M3上一個字是4字節(jié)。這個值一般設(shè)128也就是512字節(jié)。如果你的空閑任務(wù)里掛了鉤子函數(shù)可能要適當(dāng)加大。3.2 內(nèi)存管理與鉤子函數(shù)配置configTOTAL_HEAP_SIZE是FreeRTOS堆的總大小單位是字節(jié)。這個值取決于你創(chuàng)建多少個任務(wù)、隊列、信號量。每個任務(wù)需要一塊任務(wù)控制塊TCB和一塊堆??臻g。TCB大概占100字節(jié)左右堆棧大小取決于任務(wù)里用了多少局部變量和函數(shù)調(diào)用深度。我一般會先給一個保守的值比如20KB然后運行起來之后調(diào)用xPortGetFreeHeapSize()看看還剩多少再調(diào)整。如果堆不夠創(chuàng)建任務(wù)的時候會返回失敗或者直接進HardFault。configUSE_IDLE_HOOK和configUSE_TICK_HOOK分別是空閑任務(wù)鉤子和節(jié)拍鉤子。空閑鉤子適合放一些低優(yōu)先級的后臺處理比如喂狗節(jié)拍鉤子適合做系統(tǒng)級的定時統(tǒng)計。這兩個鉤子函數(shù)如果啟用了你必須自己實現(xiàn)vApplicationIdleHook()和vApplicationTickHook()否則鏈接會報錯。configUSE_MALLOC_FAILED_HOOK是內(nèi)存分配失敗鉤子建議啟用。當(dāng)pvPortMalloc返回NULL的時候會調(diào)用vApplicationMallocFailedHook()你可以在這里打印信息或者點亮錯誤燈方便定位問題。configCHECK_FOR_STACK_OVERFLOW是堆棧溢出檢測這個強烈建議啟用。它有兩個檢測模式模式1在任務(wù)切換時檢查堆棧指針是否越界模式2在任務(wù)切換時檢查堆棧末尾的標(biāo)記值是否被改寫。模式2更可靠但開銷稍大。啟用之后如果檢測到溢出會調(diào)用vApplicationStackOverflowHook()你可以在里面打印出問題的任務(wù)名。3.3 中斷優(yōu)先級與硬件相關(guān)配置configKERNEL_INTERRUPT_PRIORITY和configMAX_SYSCALL_INTERRUPT_PRIORITY這兩個宏是移植中最容易出錯的地方。Cortex-M3/M4的中斷優(yōu)先級寄存器是8位的但GD32一般只實現(xiàn)了高4位低4位是0。FreeRTOS的配置宏需要把優(yōu)先級值左移到高4位。比如configKERNEL_INTERRUPT_PRIORITY一般設(shè)為15最低優(yōu)先級左移4位就是0xF0。configMAX_SYSCALL_INTERRUPT_PRIORITY一般設(shè)為5左移4位就是0x50。這個configMAX_SYSCALL_INTERRUPT_PRIORITY的含義是優(yōu)先級數(shù)值高于這個值也就是優(yōu)先級更低的中斷可以安全地調(diào)用FreeRTOS的API函數(shù)優(yōu)先級數(shù)值低于這個值優(yōu)先級更高的中斷不能調(diào)用FreeRTOS的API因為它們不會被FreeRTOS的臨界區(qū)屏蔽。在GD32的中斷優(yōu)先級分組里一般用NVIC_PriorityGroup_4也就是所有位都用于搶占優(yōu)先級沒有子優(yōu)先級。這樣配置最簡單也最不容易出錯。configLIBRARY_LOWEST_INTERRUPT_PRIORITY和configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY這兩個宏是庫函數(shù)層面的值分別對應(yīng)上面的兩個宏但不需要左移。它們主要用于NVIC_SetPriority()這樣的庫函數(shù)調(diào)用。注意GD32的中斷優(yōu)先級數(shù)值越小優(yōu)先級越高這和FreeRTOS的任務(wù)優(yōu)先級正好相反。任務(wù)優(yōu)先級是數(shù)值越大越高。這個差異在配置中斷的時候一定要搞清楚否則會出現(xiàn)中斷嵌套混亂的問題。4. 硬件接口適配SysTick、PendSV與SVC4.1 SysTick中斷的接管FreeRTOS需要一個周期性的系統(tǒng)節(jié)拍來驅(qū)動任務(wù)調(diào)度和延時。在Cortex-M上這個節(jié)拍通常由SysTick定時器產(chǎn)生。SysTick是內(nèi)核外設(shè)GD32和STM32的SysTick寄存器完全兼容。在裸機工程里SysTick一般被用來做延時函數(shù)比如delay_ms()。移植FreeRTOS的時候你需要把SysTick的配置從裸機代碼里移除交給FreeRTOS來管理。具體來說FreeRTOS的port.c里已經(jīng)實現(xiàn)了xPortSysTickHandler()你只需要在啟動文件或者中斷向量表里把SysTick_Handler指向這個函數(shù)就行。在Keil的啟動文件startup_gd32f30x.s里SysTick_Handler是一個弱符號你可以自己在C文件里重新定義。我一般會在FreeRTOSConfig.h里加上這樣一行#define xPortSysTickHandler SysTick_Handler然后在port.c里xPortSysTickHandler就是實際的中斷服務(wù)函數(shù)。這樣啟動文件里的弱符號會被覆蓋SysTick中斷就會進入FreeRTOS的處理流程。SysTick的 reload 值由FreeRTOS根據(jù)configCPU_CLOCK_HZ和configTICK_RATE_HZ自動計算你不需要手動設(shè)置。計算方式是reload configCPU_CLOCK_HZ / configTICK_RATE_HZ - 1。比如120MHz的時鐘1000Hz的節(jié)拍reload就是119999。4.2 PendSV與SVC的優(yōu)先級設(shè)置PendSV和SVC是Cortex-M內(nèi)核的兩個異常FreeRTOS用它們來實現(xiàn)任務(wù)切換。PendSV是可掛起的異常FreeRTOS在需要切換任務(wù)的時候會把PendSV掛起等所有高優(yōu)先級中斷處理完之后再進入PendSV處理任務(wù)切換。SVC是系統(tǒng)服務(wù)調(diào)用FreeRTOS在啟動第一個任務(wù)的時候會用到。這兩個異常的優(yōu)先級設(shè)置非常關(guān)鍵。PendSV的優(yōu)先級必須設(shè)為最低也就是數(shù)值最大。SVC的優(yōu)先級一般也設(shè)為最低或者比PendSV稍高一點。在FreeRTOS的port.c里vPortSVCHandler和xPortPendSVHandler這兩個函數(shù)已經(jīng)實現(xiàn)了異常處理邏輯你只需要在啟動文件里把SVC_Handler和PendSV_Handler指向它們。在FreeRTOSConfig.h里configKERNEL_INTERRUPT_PRIORITY這個宏就是用來設(shè)置PendSV和SysTick的優(yōu)先級的。前面說了它一般設(shè)為15左移4位也就是0xF0。這個值會被寫入到NVIC的PendSV和SysTick優(yōu)先級寄存器里。實操心得如果你在GD32上用了其他中斷比如串口中斷、定時器中斷并且這些中斷里要調(diào)用FreeRTOS的API比如xQueueSendFromISR那么這些中斷的優(yōu)先級必須不高于configMAX_SYSCALL_INTERRUPT_PRIORITY。否則會出現(xiàn)中斷里調(diào)用API導(dǎo)致系統(tǒng)崩潰的問題。我一般把要用FreeRTOS API的中斷優(yōu)先級設(shè)為6或7留出足夠的余量。4.3 啟動第一個任務(wù)的流程FreeRTOS啟動調(diào)度器的函數(shù)是vTaskStartScheduler()。這個函數(shù)會創(chuàng)建空閑任務(wù)和定時器任務(wù)如果啟用了軟件定時器然后配置SysTick最后調(diào)用xPortStartScheduler()。xPortStartScheduler()里會設(shè)置PendSV和SysTick的優(yōu)先級然后觸發(fā)SVC異常。SVC異常的處理函數(shù)vPortSVCHandler()會從就緒列表里找到最高優(yōu)先級的任務(wù)恢復(fù)它的上下文然后跳轉(zhuǎn)到任務(wù)的入口函數(shù)。這個過程涉及到一堆匯編代碼你不需要完全看懂但要知道它的作用。在GD32上這個流程和STM32完全一樣因為都是Cortex-M內(nèi)核。唯一需要注意的是GD32的啟動文件里SVC_Handler和PendSV_Handler的名字可能和STM32略有不同你要根據(jù)實際的啟動文件來調(diào)整。啟動第一個任務(wù)之后FreeRTOS就進入了正常的調(diào)度循環(huán)。SysTick每隔1ms觸發(fā)一次檢查是否有任務(wù)需要喚醒或者切換。如果有更高優(yōu)先級的任務(wù)就緒PendSV會被掛起等SysTick處理完之后執(zhí)行任務(wù)切換。5. 常見問題排查與實戰(zhàn)避坑指南5.1 編譯鏈接階段的典型錯誤移植過程中編譯鏈接階段的錯誤是最容易解決的因為編譯器會直接告訴你哪里有問題。最常見的幾個錯誤我整理了一下錯誤信息原因解決方法undefined symbol xPortSysTickHandler沒有把SysTick_Handler映射到FreeRTOS的處理函數(shù)在FreeRTOSConfig.h里加#define xPortSysTickHandler SysTick_Handlerundefined symbol vApplicationIdleHook啟用了空閑鉤子但沒有實現(xiàn)實現(xiàn)vApplicationIdleHook()函數(shù)或者把configUSE_IDLE_HOOK設(shè)為0undefined symbol vApplicationStackOverflowHook啟用了堆棧溢出檢測但沒有實現(xiàn)鉤子實現(xiàn)鉤子函數(shù)或者關(guān)閉configCHECK_FOR_STACK_OVERFLOWcannot open source input file FreeRTOS.h頭文件包含路徑?jīng)]設(shè)對在Keil的Include Paths里加上FreeRTOS/Source/includeL6406E: No space in execution regions堆或者棧太大超出了RAM減小configTOTAL_HEAP_SIZE或者任務(wù)堆棧大小還有一個比較隱蔽的錯誤是重復(fù)定義。比如你的裸機工程里已經(jīng)有一個SysTick_HandlerFreeRTOS的port.c里也有一個鏈接的時候就會報重復(fù)定義。解決辦法是把裸機工程里的SysTick_Handler刪掉或者改名。5.2 運行階段的HardFault排查HardFault是移植過程中最讓人頭疼的問題因為它的現(xiàn)象往往是程序跑飛了但不知道飛到哪里去了。我總結(jié)了一套排查HardFault的流程基本上能覆蓋大部分情況。第一步在HardFault_Handler里加一個死循環(huán)然后在這個死循環(huán)里打個斷點。程序跑飛之后會停在這里。然后你看Call Stack窗口看看是從哪個函數(shù)跳過來的。如果Call Stack是空的那就看LR寄存器的值找到跳轉(zhuǎn)前的地址。第二步檢查堆棧溢出。如果某個任務(wù)的堆棧太小任務(wù)切換的時候就會踩到別的內(nèi)存區(qū)域?qū)е翲ardFault。啟用configCHECK_FOR_STACK_OVERFLOW之后如果是因為堆棧溢出導(dǎo)致的會先進入vApplicationStackOverflowHook()你可以在里面打印任務(wù)名。第三步檢查中斷優(yōu)先級。如果在一個優(yōu)先級高于configMAX_SYSCALL_INTERRUPT_PRIORITY的中斷里調(diào)用了FreeRTOS的API會導(dǎo)致臨界區(qū)失效進而引發(fā)HardFault。這種情況的典型現(xiàn)象是程序在運行一段時間后隨機崩潰而且崩潰的位置不固定。第四步檢查堆是否夠用。如果configTOTAL_HEAP_SIZE設(shè)得太小創(chuàng)建任務(wù)或者隊列的時候會返回NULL如果你沒有檢查返回值就直接使用就會訪問空指針導(dǎo)致HardFault。我一般會在創(chuàng)建任務(wù)之后檢查一下返回值如果是NULL就打印錯誤信息。避坑技巧在GD32上如果用了FPU并且任務(wù)里做了浮點運算一定要確保port.c用的是ARM_CM4F版本而不是ARM_CM3版本。用錯了版本浮點寄存器的上下文不會被保存任務(wù)切換之后浮點運算結(jié)果就會錯亂嚴(yán)重的時候直接HardFault。5.3 任務(wù)調(diào)度異常的調(diào)試方法有時候程序沒有HardFault但任務(wù)調(diào)度不正常比如某個任務(wù)一直不執(zhí)行或者延時不準(zhǔn)。這類問題一般和配置有關(guān)。如果某個任務(wù)一直不執(zhí)行先檢查它的優(yōu)先級是不是太低被其他高優(yōu)先級任務(wù)一直搶占。FreeRTOS是搶占式調(diào)度如果有一個高優(yōu)先級任務(wù)一直在跑不讓出CPU低優(yōu)先級任務(wù)就永遠得不到執(zhí)行。解決辦法是在高優(yōu)先級任務(wù)里加vTaskDelay()或者taskYIELD()讓出CPU。如果延時不準(zhǔn)檢查configCPU_CLOCK_HZ和configTICK_RATE_HZ是否和實際一致。另外如果SysTick的中斷優(yōu)先級設(shè)得太低被其他中斷頻繁打斷也會導(dǎo)致節(jié)拍丟失延時變長。如果任務(wù)切換的時候串口打印亂碼可能是任務(wù)堆棧太小導(dǎo)致局部變量被覆蓋??梢栽囍讶蝿?wù)堆棧加大一倍看看問題是否消失。還有一個常見問題是在中斷里調(diào)用了非FromISR版本的API。比如在串口中斷里調(diào)用了xQueueSend()而不是xQueueSendFromISR()這會導(dǎo)致中斷里的操作破壞了就緒列表的一致性進而引發(fā)調(diào)度異常。這個問題的現(xiàn)象是程序在中斷頻繁觸發(fā)的時候隨機崩潰。5.4 內(nèi)存優(yōu)化與堆棧大小的確定FreeRTOS的RAM占用主要來自三塊內(nèi)核對象TCB、就緒列表、隊列等、任務(wù)堆棧、FreeRTOS堆。在GD32F103這類RAM只有20KB的芯片上內(nèi)存優(yōu)化就很重要了。任務(wù)堆棧大小的確定我一般用兩種方法。一種是靜態(tài)估算看任務(wù)里最大的函數(shù)調(diào)用深度加上局部變量的大小再留50%的余量。另一種是動態(tài)測量先把堆棧設(shè)大一點然后調(diào)用uxTaskGetStackHighWaterMark()看看歷史最小剩余量再根據(jù)這個值來調(diào)整。比如一個任務(wù)堆棧設(shè)了512字2KB運行一段時間后HighWaterMark返回400說明歷史最多用了112字那么堆??梢詼p到256字左右留一倍余量。configTOTAL_HEAP_SIZE的確定可以用xPortGetFreeHeapSize()來監(jiān)控。在系統(tǒng)穩(wěn)定運行之后看看還剩多少堆如果剩余很多可以適當(dāng)減小如果剩余很少就要加大或者檢查是否有內(nèi)存泄漏。實操心得在GD32F103這種小RAM芯片上建議把configUSE_TIMERS設(shè)為0不用軟件定時器這樣可以省掉定時器任務(wù)的堆棧和隊列。軟件定時器的功能可以用硬件定時器加任務(wù)通知來替代更省資源。6. 移植完成后的驗證與功能擴展6.1 基礎(chǔ)功能驗證清單移植完成之后不要急著往上加應(yīng)用代碼先做一輪基礎(chǔ)功能驗證。我一般會寫一個簡單的測試程序創(chuàng)建三個任務(wù)一個任務(wù)每秒翻轉(zhuǎn)一次LED一個任務(wù)每500ms通過串口打印一條信息一個任務(wù)每2秒通過串口打印堆的使用情況。這三個任務(wù)跑起來之后觀察LED的閃爍頻率是否準(zhǔn)確串口打印的時間間隔是否穩(wěn)定堆的使用情況是否有異常變化。如果這些都正常說明FreeRTOS的調(diào)度、延時、內(nèi)存管理都工作正常。然后測試任務(wù)間的通信。創(chuàng)建一個隊列一個任務(wù)往隊列里發(fā)數(shù)據(jù)另一個任務(wù)從隊列里收數(shù)據(jù)驗證隊列的發(fā)送和接收是否正常。再測試一下信號量一個任務(wù)釋放信號量另一個任務(wù)獲取信號量驗證同步機制是否正常。最后測試中斷和任務(wù)的交互。在串口中斷里用xQueueSendFromISR往隊列里發(fā)數(shù)據(jù)在任務(wù)里接收驗證中斷安全的API是否正常工作。6.2 從移植到實戰(zhàn)的進階路線基礎(chǔ)驗證通過之后就可以開始把FreeRTOS用到實際項目里了。我的建議是先從簡單的多任務(wù)架構(gòu)開始比如把原來的裸機大循環(huán)拆成幾個獨立的任務(wù)每個任務(wù)負(fù)責(zé)一個功能模塊任務(wù)之間用隊列或者信號量通信。然后逐步引入更高級的功能。比如用事件組來管理多個任務(wù)的同步用任務(wù)通知來替代二值信號量以提高效率用流緩沖區(qū)來處理串口的不定長數(shù)據(jù)。如果項目里有LCD顯示可以考慮移植LVGL。LVGL本身是單線程的但可以把它放在一個獨立的任務(wù)里通過消息隊列接收其他任務(wù)的顯示請求。這樣顯示刷新不會阻塞其他任務(wù)界面也會更流暢。如果項目里有網(wǎng)絡(luò)通信GD32加上LWIP協(xié)議棧可以把網(wǎng)絡(luò)處理放在一個高優(yōu)先級任務(wù)里協(xié)議解析放在另一個任務(wù)里通過隊列傳遞數(shù)據(jù)包。這樣網(wǎng)絡(luò)收發(fā)的實時性會好很多。6.3 性能調(diào)優(yōu)的幾個方向FreeRTOS在GD32上跑起來之后如果覺得性能不夠可以從幾個方向調(diào)優(yōu)。一是調(diào)整configTICK_RATE_HZ。如果項目對延時精度要求不高可以把節(jié)拍從1000Hz降到100Hz這樣SysTick中斷的開銷會小很多CPU有更多時間跑任務(wù)。二是優(yōu)化任務(wù)優(yōu)先級分配。把實時性要求高的任務(wù)設(shè)為高優(yōu)先級把后臺處理任務(wù)設(shè)為低優(yōu)先級。避免多個任務(wù)設(shè)成同一優(yōu)先級因為同優(yōu)先級任務(wù)會時間片輪轉(zhuǎn)增加切換開銷。三是減少臨界區(qū)的長度。FreeRTOS的API函數(shù)里有些會進入臨界區(qū)關(guān)中斷。如果臨界區(qū)太長會影響中斷響應(yīng)。所以在任務(wù)里調(diào)用API的時候盡量把能放在臨界區(qū)外面的操作放在外面。四是使用任務(wù)通知替代信號量。任務(wù)通知是FreeRTOS里最高效的任務(wù)間通信方式它不需要創(chuàng)建額外的內(nèi)核對象直接操作任務(wù)的TCB。在只需要一對一同步的場景下任務(wù)通知比信號量快很多。五是合理使用DMA。GD32的外設(shè)支持DMA比如串口收發(fā)、SPI傳輸、ADC采樣都可以用DMA。把數(shù)據(jù)搬運的工作交給DMACPU只需要處理DMA完成中斷這樣可以大大減輕任務(wù)的負(fù)擔(dān)。6.4 從GD32F103到GD32F303的移植差異如果你已經(jīng)在GD32F103上移植好了FreeRTOS想換到GD32F303大部分代碼是可以直接復(fù)用的但有幾個地方需要注意。首先是時鐘頻率不同。GD32F103最高72MHzGD32F303最高120MHz。configCPU_CLOCK_HZ要相應(yīng)修改否則延時和節(jié)拍都會不準(zhǔn)。其次是FPU。GD32F303帶浮點單元如果你要用浮點運算需要把port.c從ARM_CM3換成ARM_CM4F并且在Keil里開啟FPU支持。GD32F103沒有FPU只能用軟件浮點。然后是中斷向量表。GD32F303的中斷源比GD32F103多啟動文件也不同。移植的時候要確認(rèn)SVC_Handler、PendSV_Handler、SysTick_Handler這三個異常處理函數(shù)的映射是否正確。最后是RAM大小。GD32F303的RAM一般比GD32F103大configTOTAL_HEAP_SIZE可以適當(dāng)加大任務(wù)堆棧也可以給得更充裕。我在實際項目里從GD32F103換到GD32F303的時候基本上只改了時鐘配置和FPU相關(guān)的幾個宏其他代碼一行沒動半天就完成了遷移。這也是FreeRTOS這種成熟RTOS的好處硬件相關(guān)的代碼被隔離在port層換芯片的時候只需要改port層和配置文件。最后再分享一個小技巧如果你在Keil里調(diào)試FreeRTOS的時候想看每個任務(wù)的運行狀態(tài)和堆棧使用情況可以安裝一個FreeRTOS的Keil插件或者用SEGGER的SystemView。SystemView可以圖形化地顯示任務(wù)的切換時序、中斷的觸發(fā)情況、隊列的收發(fā)記錄對于分析系統(tǒng)的實時性非常有幫助。我每次做性能優(yōu)化的時候都會先用SystemView跑一遍看看哪里是瓶頸然后再有針對性地調(diào)整。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷久久五月| 六月色色| 欧美性色五月天| 91热网址| 91n网站cad入口在线观看| 婷婷色五月天在线| 久久婷婷成人| 天天狠狠夜夜狠狠2023| 色婷婷a三区麻| 啪啪一区| 涩综合网| 五月天婷婷社区久久综合| 丁香六月婷婷综合| 岛国AV网| 97天堂| www.开心激情| 色婷婷九月| 色很很96| 天堂婷婷五月在线| 色婷婷五月影视| 五月婷免费视频| 草草色情综合网| a久久| www.99热精品| 狠狠爱婷婷爱| 久99热在线观看| 五月丁香色狠狠干大屄| 99re这里有精品手机在线| 都市激情蜜桃婷婷五月天| 国产.亚洲.欧洲视频在线| 伊人久久丁香狠狠婷婷综合香蕉| 欧美特大片黄| 综合久久婷婷99| 激情综合五月| 五月婷婷六月激情| 中文字幕黄色片| 综合久久影院| 免费亚洲婷婷| 婷婷丁香社区| 玖玖@三月天天丁香婷婷| 性做久久久久久久免费看| 色播婷婷大香蕉| 天堂综合久| 婷婷丁香五月色| 五月天激情AAAA| 99热国内| 天天视频亚洲| www.激情五月| 激情亚洲网| 91超级碰碰| 国产成人网站在线观看| 亚洲成人综合在线| 狠狠精品干练久久久无码中文字幕| 综合色五月| 日本熟妇精品99| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 五月婷在线影院| 波多野结衣AV无码Porn| 久久久久亚洲AV成人无码电影| 亚洲爱婷婷| 九九精品系列| 在线视频另类| 爱草视频在线| 四色五月婷婷在线观看| 婷婷欧美综合| 青青草国产亚洲精品久久| 五月婷婷综合网| BBWCUCKOLD精品熟妇| 国产精品99久久久久久久女警| 久久婷婷五月天| 777精品久无码人妻蜜桃| 色婷久久| 伊人九九九久| 超碰成人在线观看| 天天操,天天插| 五月丁香五月天现场视频| 五月天色视频| 在线中文av| 国产成人亚洲综合A∨婷婷| 五月婷婷开心网| 麻豆AV一区二区三区| 亚洲熟妇AV乱码在线观看 | 婷婷在线视频| 都市激情五月婷婷亚洲| 玖玖资源在线视频| 草榴视频黄色网| 亚洲欧美国产A片免费观看| www.AV在线| 综合激情五月丁香| 丁香五月六月婷婷怡红院| 日日夜夜狠狠| 男人操女人高潮91视频| 亚洲色人妻| 激情五月天啪啪视频| 精品免费99| 大香蕉婷婷五月| 亚洲综合无码| 六月五月婷婷| 99热偷拍| 日本久久激情| 久草xx性爱视频| 天天插天天插天天插天天插| 99久re热视频精品98| 九九成人电影婷婷| 久久久这里都是精品| 久久成人综合五月天| 婷婷五月色激情欧美激情| 丁香六月婷婷综合激情欧美| 香蕉久久五月| 婷婷五月综合婷婷| 日本99在线| 欧美三级巜人妻互换| 97操碰人人| 久久久久久久综合狠狠综合| 九九精品热播| 婷婷伊人欧美| 婷婷激情另类| 啪啪91| 啪啪视频99| 天天五月丁香五月| AV在线大香蕉| 九月激情综合婷婷| 亚洲热久久| 久久久中文| 色色五月激情| 天天综合亚洲| 热热色色五月天婷婷| 婷婷色播婷婷| 久久久大香蕉| 性高潮久久久久久-九九九九九九九九九九热-成人AV | 丁香五月视频在线观看| 996热| 在线成人av播放| 婷婷综合五月天激情| 精品爆操| 六月婷婷久久| 色五月婷婷91| 91综合色| 91丨九色丨熟女丰满| 亚洲黄网AV| 99re66热这里只有精品| 亚洲天堂99| 9久操| 婷婷五月天亚洲精品| 色五月播五月| 五月天激情综合在线| 天天舔天天摸| se.久久视频在线观看| 天插天啪天啪天啪| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 色播丁香五月婷婷操:屄| 97影院一级片| 久草大| 丁XX 成人| 最新婷婷五月丁香| 天天做天天爱天天爽综合网| 人妻Av在线| 色婷婷激情小说网| 日本女色人人| www五月天激情com| WWW.久久99| 就爱射中文字幕资源网| 午夜丁香久久久久久| 五月婷婷熟女| 欧美色激情四射| 99热骚货| 男人天堂AV在线一区二区| 好激情在线综合网| 在线综合91| 激情五月深爱婷婷| 五月天丁香婷婷社区| 狠狠干五月丁香综合网| 999九九九久久久99HD| 99热在线免费| 色婷婷综合丁香五月天| 久婷婷婷| 久久色频| 色综合99无码| 另类激情综合| 五月香婷婷| 丁香五月激情综合| 五月婷婷六月丁香激情综合网| www.五月天| 色五月在线| 久久精品99国产精品日本| 欧美va精品va老师va| 五月天激情小说| 精品一二三区视频立| 九九碰九九爱97超碰| 99re在线观看视频| 色色草97| 激情伊人五月天| 男人天堂亚洲综合| 婷婷综合伊人| 丁香五月天激情视频| 思思99热这里只有精品| 国产高清精品色| 五月婷婷综合成人| 九九99精品视频在线观看| 91婷婷丁香五月天免费视频网站| 超喷97免费在线视频| 丁香婷婷十月| 色啪影院| 成人国产网| www.五月丁香| 婷婷激情五月天天天开心| 黄网在线免费| 9l视频自拍九色9l视频自拍九色9l社区| 啪啪色激情五月天| 婷婷伊人綜合| 五月婷丁香| 色丁香五月天婷婷| 婷婷五月天最新综合你懂的 | 九九re精品视频在线观看| 99九九综合久久九九| 色婷婷成人| 亚洲日日操| 人人操人人操919999| www.五月天| 丁香五月网在线观看| 91九色无码内射| 五月天婷婷激情在线色图| 都市激情五月婷婷综合| 91色涩| 五月天堂在线| 色综合久久天天综合网| 91嫩草国产线观看亚洲一区二区| 丁香五月婷婷啪啪| 亚洲视频图片婷婷五月| 色婷五月天亚洲| 97超碰99热99| 欧美交换配乱吟粗大25P| 婷婷五月天在线综合| 色九网| 国产内射婷婷| 狠狠操天天干| 亚洲成人超碰| 五月婷婷激情久久| 婷婷四色五月| 色的色综合| www.五月天色色色| 九月婷婷综合在线| 九九九九精品精| 五月丁香激情综合啪啪| 婷婷五月天欧美| 五月天六月丁香| 99久久网站| 五月天婷网| 99re最新地址视频| 亚洲网视屏| 久久91久久精品久久| se99视频| 亚洲激情视频在线观看| 狠狠干天天日| 婷婷亚洲欧美丁香五月| 性色99| 99这里只有精品8| 外国碰视频网站97| 热99在线精品| 六月婷婷网| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 91成人性爱视频| 色的色综合| 日本久久综合| 亚洲1区| 97干在线看| 九九色婷| 色五月婷婷7777| 99精品在线| 久久久久9| 色色色网站| 国产精品婷婷午夜在线观看| 五月亭亭综合五码| 色噜噜婷婷| www.色窝| 久久九九大香蕉电院| 亚洲丁香婷婷五月天综合色| 性色欲情 网站| 成人精品一区日本无码网| 久久9热| 色99网| 婷婷五月天六月| 青青草蜜臀| 五月天快乐开心激情网| xx综合网| 激情五月天色婷婷综合| 激情色视频| 看久久性爱视频| 99热这里只有精品23| 99热这只有| 人妻久久做| 五月丁香日本在线视频观看| 婷婷五月天AV激情| 情涩婷婷五月天| 日韩综合大黄| 色色亚洲| 天天色色天天| 办公室少妇激情呻吟A片在线观看| 狠狠操综合| 九月婷婷综合| 亚洲人操亚洲人| 淫五月停停| 99热个人在线| 自拍视频在线观看9| 日本大逼91| 亚洲啪视频| 97人人做| 人妻AV在线| 久久AAAA片一区二区| 国产一二区爆乳_1国产日韩一区二区三-成人AV| 天天日天天插| 色婷婷亚洲综合天堂| 97在线天堂| 99超碰人人| 五月色丁香| 玖玖婷婷五月天| 亚洲艹网| 丁香五月区| 成人在线日韩欧美| 国产69久久久欧美黑人A片| 无码激情AAAAA片-区区| 狠狠色大香蕉| 亚洲亚洲激情| 99亚洲视频| 91久久久久久久久久久| 欧美婷婷色| 久xxxx| 国产在线中文字幕| 五月丁婷婷| 天天久综合| av网址在线| 久久久久人妻| 久久久.COM| 99视频内射三四| CHINESE熟女老女人HD视频| 久久九久久| 91婷婷丁香五月| 天天久久66xxx| 色天天狠狠干| 激情五月婷婷| 日本精品人妻无码77777| 特黄三级又爽又粗又大| Xx色综合| 天天做天天爱天天爽| 六月婷婷五月天| 五月丁香综缴情性爱| 91九色 婷婷| 欧美丁香六月在线观看视频| 成人在线视频一区| 草了bav视频在线观看| 99热碰碰| 天天摸人人摸| 婷婷久久大香蕉| 一级韩国产精品毛| 婷婷五月天视频小说| 九九精品免费| 深夜婷婷 丁香| 超碰九色| 五月天激情综合| 国产精品扒开腿做爽爽爽A片唱戏| 成人AV综合在线| 久久人妻久久久久| 免费播放片大片| 中国女人内射6XXXXX| 久久婷婷亚洲无码一起| 五月天电影网| 大地9中文在线观看免费高清| 五月婷婷丁香网| 四色 爱 婷婷 精品 亚洲 五月天| 五月天激情综合| 国产真实乱对白精彩| 婷婷久久五月天丁香| 色婷婷五月天堂资源| 九色91国产| 天天插操| 精品无码色欲AV| 五月综合激情| 五月天色色色色色| 综合激情网激情五月。| 国外亚洲成AV人片在线观看| WWW.激情| 久久久久久久久久8888| 97干在线视频| www.99久| WWW免费视频碰碰碰碰| 天天日天天做天天操| 另类小说色婷婷| 91久久综合| 婷婷五月天激情免费在线观看| 国产精产国品一二三在观看| 婷婷日在线观看| 色婷婷六月天| 9久久婷婷国产综合精品性色| 激情欧美五月丁香| YW无码| www,五月丁,com| 综合久久99| 噜噜色天天开心| 五月丁香啪啪啪| 一区二区免费看| www:99热视频| 超碰网站在线观看| www.久久久久久久| 婷婷久月| 2015好吊操| 99综合| 久久久婷| www.色五月| 99久久99热| 99这里| 色噜噜狠狠色综合日日| 天天射影院| 只有精品在线观看| 色婷婷成人做爰A片免费看网站| 依人大香蕉| 色情综合网| 操91| 疯狂做受XXXX高潮A片| 精品久久婷婷五月天| 开心婷婷五月| 久久人妻情侣| 六月丁香啪| 五月丁香六月婷婷无码| 3p久久| 激情五月天啪啪| 强壮公让我夜夜高潮A片视频| 开心五月婷婷激情| 久久激情视频| 国精产品久久| www一起操在线观看| 狠狠色噜噜狠狠狠狠综合| 丁香狠狠操| 97碰碰在线观看视频| 桃色激情五月天| 成人短视频在线观看| 97色色色色色色色| 极骚大香蕉伊人| 五月伊人婷婷| 丁香成人五月天| 99热思思| 婷婷国产成人| 丁香五月情色| 美女被操一区二区| 伊人网大香| 丁香五月婷婷深爱综合激情| 99超超碰| 欧美精产国品一二三区| 五月综合视频在线| 激情婷婷五月社区| 四色永久成人网站| 婷婷五月天日日日干干干| 97久久超级| 日本在线视频www色| 五月婷婷开心深| 色婷网站| 日韩啪啪网| 国产亚洲成人综合| 五月天综合视频| 色五月婷婷大| 中文字幕AV网址| 成人av免费观看| 久久综合激情婷婷激情| 亚洲天堂久久| 激情婷婷激情在线不卡| 丁香桃色网| 激情五月www| 中美月韩免费A片| 少妇熟女视频一区二区三区| 亚洲婷婷五月| 丁香六月天婷婷开心综合| 五月激情综合性爱| 中文字幕免费高清电视剧| 天天综合网在线| 亚洲色婷婷色| av在线播放网址| 禁欲电影完整版在线播放| 天天色天天操天天射| 久er7久热| 国精产品一区二区三区| 国产黄大片在线观看画质优化 | 丁香六月激情国产| 国产精品久久久久久亚洲毛片| 99视频激情四射| 日韩激情人伦人| 激情婷婷色色| 五月色亚洲| 欧美性生交XXXXX无码小说| WWW免费视频碰碰碰碰| 久久机热这里只有 | 丁香五月婷婷亚洲激情四射| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 99re思思精品在线观看| 丁香五月天激情网址| 任你干嘛免费视频播放| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 538在线精品| 亚洲啪啪网| 丁香五月开心婷婷| 欧美丁香六月激情视频| 伊人婷婷青青cao| 97热久久五月婷婷| 婷婷五月欧美| 狠狠色噜噜狠狠狠777奇米| 成人午夜无码视频| 色九九综合| 天天干天天做| 99乱视频| 久久这里只| 思思精品久久艹| 九九热亚洲中文在线观看免费| 久久九九国产| 色播播婷婷| 99在线视频喷水| 五月综合激情啪啪啪啪啪| 国产激情综合五月久久| 丁香五月婷婷基地| 五月天色五月天| 九九色图| 色播丁香| 爱性综合网| 大香蕉久| www.久久爱| 黄色五月婷婷| 久久五月网| 中美月韩免费A片| 中文字幕成| 狠狠色噜噜色狠狠狠综合色| 国产探花一片区| 激情五月婷婷丁香综合网| 九久久婷婷| 婷婷五月天VI| 九九色插| 婷婷伊人五月丁香天堂网| 婷婷五月丁香99| 九九艹女| 97婷婷五月激情六月丁香伊人| 蜜乳AV成人| 五月丁香婷婷老司机| 成人精品免费在线观看| 大香婷婷| 九九色图| ji'qing'luan'ren'lun| 五月天婷婷永久免费视频| 另类小说五月天综合网| www.五月天激情| 丁香五月婷婷激情蜜桃| 亚洲无码色| 中文字幕不卡+婷婷五月| 热九九精品| 99色色| 亚洲V国产V欧美V久久久久久| 精品无码久久久久久久久| 中文字幕1区2区。| 亚洲精品成人片在线播| 三区激情四射av| 99开心五月五月丁香激情| 欧美啪啪五月天| 色综合偷拍| 超碰com| 久99热| 色五月婷婷少妇人妻| 九九久久99| 欧美激情凹凸丁香网| 五月天婷婷成人| 亚洲av成人在线| 五月综合视频| 26uuu成人网| 色伊人啪| 五月丁香婷色| 色香欲综合| 亚州色色色| 日韩黄色中文字幕| 91人人操| 五月开心六月婷婷在线播放网站| 五月丁香六月激情欧美综合| 色玖玖| 五月天激情色色| 激情五月九九九| 翔田千里 50岁 无码| 婷婷五月天激情偷拍| 丁香成人视频| 精品久久久人妻| 丁香五月大香蕉在线99| 日韩一级A片黄色| 狠狠爱丁香婷| 激情综合网五月婷婷| 五月婷婷这里都是精品| 色婷婷亚洲婷婷| 99热精品在线在线| 五月天色站| 丁香六月AV| 丁香五月天中文字幕| 狠狠插狠狠插| 狠狠色丁香婷婷五月| 丁香婷婷六月激情文学| 丁香狠狠色婷婷久久无码视频| 大香蕉综合在线| 日操熟女| 亚洲视频色色| 97碰久久| 国产综合丁香五月天| 香蕉婷婷色五月| 色五月综合在线| 久色网| 99热亚洲精品| 夜夜夜夜夜操| 97五月婷| 人妻内射麻豆视频| 99黄色性生活| 久婷自拍视频| 综合深爱五月| 五月天偷拍| 亚洲旡码| 成人在线99| 日韩人妻AV在线| 婷婷她六月天| 超碰色综合| 韩日AV片| 婷婷五月天伊人网在线观看视频| 可以看的av网站| 亚洲精品在线视频| 日婷婷久久开心| 婷婷丁香九色| 久久久婷丁香五月| 色色亚洲| 婷婷和五月天| 五月天 综合 在线| 色播五月网| 91色色色18| 欧美婷婷精品激情| 第四色色六月色综合| 久久婷婷色丁香| 天天插天天干| 婷婷激情伍月网| 日本超碰在线| 97色色色| 激情久久久久久久久久久| 日本在线wwww| 免费五月婷婷网| 日本三级99人妇网站| 2020夜夜操天天爽| 伊人在线视频| 色婷婷4| 五月天激情婷婷| 婷婷五月亚洲激情| 久热91| 夜夜爽天天| www.五月天| AV色五月婷婷| 另类天堂| 丁香婷婷六月激情| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 综合av在线| 丁香婷婷偷拍| 九九九九操逼| 婷婷丁香五月天中文字幕| 99在线精品免费视频| 激情五月综合色婷婷| 欧美三级A做爰在线观看| 美妞av| 成人精品视频99在线观看免费| 综合在线网| 俺去也婷婷| 婷婷欧美色| 少妇性按摩无码中文A片| 激情5月婷婷狠狠干| 风流少妇A片一区二区蜜桃| 日日操夜夜爽天天天| 久久A极片| 视色综合| av无码电影| 久99综合婷婷| 伍月婷婷免费视频| 苗黎美女四级成人版一级二级毛片| 人妻久久久久久久久妻久久久久| 色婷婷很很丝袜| 婷婷精品综合| 大香蕉婷婷久久| 色色网站在线| 日批在线看| 久re在线| 色综合色色| 综合五月亭亭9| 97色综合| 久久久www| 日本精品。999| 精品日本视频444| 能看的av| 亚洲精99| 色丁香五月婷婷综合久久| 97碰碰视频| .操區COm| 久久aaaaa| 人人操99| 99精品7| 99九九在线视频| 天天色视频| 天天日天天日天天搞| 超碰97免费在线| 丁香激情网| 久久婷婷五月综合伊人| 日韩一级片| 婷婷五月天VI| 97资源欧美日韩大香蕉超碰一区| 日 日干 日日做| www,色综合| 婷婷六月色| 日本色视| 国产在线6| 久久青青日本视频| 极品人妻VIDEOSSS人妻| 婷婷成人视频| 日日操夜夜爽天天天| 丁香久月| yazhoujiqingav| 大香蕉久久久| 狠狠操狠狠干综合| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 丁香五月天成人| 97综合在线| 婷婷中文综合网| 丁香五月婷婷网| 五月天色丁香| 五月丁香在线国产 | 亚洲五月天综合色| 丁香五月停停基地| 日本www免费九九| 亚洲a色| 日婷婷| 激情五月天之五月婷婷| 五月婷婷中文字幕| 欧美日韩国产成人在线| 裸体做A爰片毛片A片免费| 色天堂在线| 99热99热| 深爱激情九九五月天| 99日在线视频| 操人精品| 精品国产a| 久久99国产综合精品免费 | 五月天色色婷婷| 97涩婷婷婷婷基地| 无码人妻丰满熟妇奶水区码| 99视频在线精品免费观看2| 婷婷五月激情图片| 天天舔天天摸视频| 国产精品色色色色| 婷婷AV丁香| WWW久久久| 免费97碰碰| 国产精品成人网址| 极品人妻VIDEOSSS人妻| 狼人久草| 99热这里只有精品22| 婷婷五月天视频免费在线观看| 天天爱天天做天天爽| 热久久思思热思思| 99er这里只有精品视频| 在线成人网址| 玖玖爱综合网| 成人 视频免费观看网站| 99噜噜噜| 激情婷婷九月| 色婷婷情片| 美女伊人久久| 五月丁香婷婷啪啪网| 2015在线中文字幕| 五月激情综合美女久久| 夜夜操激情| 色综合天天天天做夜夜| 俺也高清无码高清视频| 婷婷五月天成人网站| 激情色情五月天| 青青草视频福利| 丁香激激情网| 久久视频在线| 五月开心色| 噜噜视频| 成人版视频在线观看| 99riAV国产精品视频| 91热视频色网站| 色婷婷免费观看| 九九热黄色| 玖玖在线视频| 久热久| 国产精品天天狠天天看| av一级棒av| 激情涩播| 第1影院之五月婷婷| 亚洲第一av| 激情五月综合第一页| 91操在线视频| 天天做天天爱天天搞| 99丁香五月婷| 91视屏在线观看com.wwwvv| 中国AV性爱观看| 丁香五月开心五月激情| 亚洲无码99| 97碰在线| 97人人操人人干| 中文字幕中文有码在线| 97碰 在线视频观看| 91久久九色| 婷婷五月综合久久中文字幕| 丁香 婷婷 激情 综合 五月| 先锋男人99资源| 思思 热 99| 久久久五月五丁香| 丁香啪啪| 色婷小说| 五月婷精品| 777.色色| 五月婷婷综合久久| 成人在线网址| 亚洲无AV在线中文字幕| 色色色1网址| 五月丁香啪啪综合| 五月婷婷丁香伦理网| 99热这里只有精品最新地址获取| 色九月婷婷丁香| 婷婷五月综合激情| 婷婷丁香婷婷97| 超碰成人在线观看| 五月天全国最大成人网| 综合图片色色| 五月花婷婷| www91色网站| 色色色国产| 呦呦视频无码播放| 在线另类视频| 日韩欧美不卡| 九九精品自拍| 天天操天爱综合| 中美日韩成人在线| 99原创自拍视频在线观看| 成人资源在线| 婷婷五月天激情综合婷婷五月天激情综合| 五月激情六月宗合| 亚洲综合五月天婷婷丁香| 中文AV网站| 久久久人妻久久久| 六月丁AV| 亚洲操操操| 色狠狠综合入口| 狠狠va| 成人色图情色成人网 www.5b5b5bcom 五月天| 激情深爱五月天| 丁香六月婷婷色XXXXX| 色一区高清| 色综合伊人网| 国产AV一区二区三区最新精品| 色五月欧美| 成人va在线| 婷婷丁五月| 五月丁香激情综合久久| 无码AV免费精品一区二区三区| 在线中文亚洲| 国产色五月婷婷| 天天日夜夜| 婷婷五月天AV在线| 人人操人av| 婷婷五月激情网| 91视频人人做97| 开心五月婷| 激情丁香婷婷| 久久久香| 天天日天天摸| 九月停停| 无码人妻一区二区三区四区| 五月婷婷性爱| 狠狠九九婷婷韩| 五月婷婷狠狠干| 色色色综合网| 五月丁香久久精品在线观看| 天天搞天天色综合| 久久一伦| 丁香六月天堂| 日本操B视频在线观看| 久久丝丝热| 丁香婷婷六月天| 婷婷久久18| 五月天激情啪啪| 91中文狠狠综合| 欧美丁香六月在线观看视频| 色色色9| 亚洲一级色电影| 99色 | 被男人添B超爽视频| 欧洲毛片基地c区| 香焦网五月天| 欧美啪啪五月天| 五月婷婷婷婷网| www.婷婷五月.com| 丁香五月亚洲婷婷| 97精品人人A片免费看| 开心深爱五月天| 激情丁香五月天| 51XX午夜影福利| 996er在线观看| 五月婷婷中文字幕| 亚洲av网站| 99色网站| 激情综合色网| 激情久久久| 大香蕉啪啪啪| 日日噜噜夜夜狠狠久久丁香六月| 国产激情视频在线观看| 五月丁香av中文| 大香蕉婷婷色| 99色网站| 五月六月丁香婷婷在线观看| 欧美性做爰大片免费看办公室 | 久久综合九九| 99热精品在线播放观看| 无码少妇高潮喷水A片免费| 99r久久这里只有精品| 第九色区av天堂| 欧洲激情五月天| 五月婷A V在线| 婷婷 月 丁香| 色月丁| 久操福利| 婷婷五月天国产精品| 婷婷五月天小说| 五月丁香婷婷激情在线视频| 亚洲字幕AV一区二区三区四区| 全国最新疫情| 色五月激情图片| 欧美激情VA永久在线播放| 欧美三日本三级少妇三99| 操人无码| 丁香五月日啪| 久久曰9| 涩五月婷婷| 日韩在线视频中文字幕| 久久久久人妻| 久色五月婷婷综合| 伊人影院久久网| 五月天婷婷网站888| 五月丁香六月久久| 少妇人妻丰满做爰XXX| 天天视频亚洲| 在线观看欧美| 色久综合| 五月花婷婷丁香| 99亚洲精美视频在线观看| 丁香九月婷婷综合| 亚洲性爱干干| 91VIP在线观看| 色情久久久| 亚洲第一色色色色| 色五月激情问网站| 国产裸舞福利资源在线视频| 日韩AV免费看| 日日干日日| 狠狠五月激情在线| 色综久久久| 97狠狠色| 九九久久综合网站| 玖玖午夜视频| 99热这里有精品| 色导航色婷婷五月天在线观看| 久久久激情视频| 牛色色碰| 久久亚洲天堂| 婷婷久久国产视频| 天久久久久| 99无码视频| 99热都是精品| 天天草婷婷五月| 91日精品| 婷婷色综合| 五月天婷婷丁香基地在线观看| 丁香婷婷精品视频| 99ri国产精品| 婷婷色色五月天| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 丁香六月婷婷久久综合八月| 色婷婷狠狠禁久久| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 五月丁香色婷婷| 丁香婷婷五月| 色婷婷五月天激情在线播放| 91人人操| 日本V在线观看不卡视频网站| 五月天色色婷婷| 99爱最新免费视频在线观看| 色六月婷婷| wuyuedingxiang| 亚洲综合婷婷| 99九九视频| 丁香五月23111| 综合天天综合| 激情亭亭五月| 五月激情婷婷在线| 97丁香五月天| 色色爽爽天天| 色欲色香综合网站| 情欲禁地| 五月丁香六月情| www.久热| 国模淫穴色图| 国产裸舞福利资源在线视频| 丁香婷婷色九月| 97久久精品视频| 日韩中文字幕| 99热在线播放| 91色逼| 天天骑天天操| 热99re| 亚洲成人色五月婷婷综合| 小色小蛇伊人婷婷色香五月| 26uuu成人网| 色婷婷成人做爰A片免费看网站| 狠狠丁香| www.激情| 色情婷婷五月天| 亚洲va在线| 天天做天天要天天爽| 色狠狠五月天| 五月色婷婷中文字幕| 亚洲国产另类av| 色综合色香蕉网| 日韩成人无码| 国产成人网站在线观看| 婷婷久久网| 五月丁香好婷婷A片网| 五月丁香婷婷综合| 色爱亚洲| 天天日日综合| 六月亭亭久久综合激情| 丁香六月av| 婷婷五月天成人娱乐| 91超级碰| 99热老网站| 色丁香五月天| 成人av在线网站| 热久国产| 九九精品自拍| 日本一道久久| 99精品久久久久久久婷婷| 2015超碰| 丁香五月天狠狠操| 婷婷久久内射| 久久婷婷久久| 美女黄频aⅴ视频| 最新久久网址| 五月婷婷AV| 综合久| 色情综合网| 激情五月天婷婷免费观看| 99 热| 好好日激情五月天| 夜夜操夜夜姧| 久久丁香五月婷婷| 洗浴中心操B视频| 26UUU欧美| 亚洲操操操| www.9797国产| 99热都是精品| 色婷婷丁香五月| 婷婷亚洲天堂| 97很鲁在线视频| 1024成人免费看| 亚洲激情| 久草性爱| 五月综合视频在线| 色综合久久88色综合天天人守婷| 激情的五月| 婷婷性爱视频在线| 91chinese 在线| 中文字幕视频在线播放| 综合97五月| 丁香5月综合啪啪| 思思热热久久| 色婷婷丁香五月天在线观看| 九九99香蕉在线视频播放| 狼人久草| 99热久久这里只有精品| 美女婷婷激情亚洲| 五月天大香蕉AV| 欧美精产国品一二三区| 激情五婷精品网在线观看网址| 五月丁香六月婷婷综合免| 欧美日本一区二区三区| 噜噜视频| 这里只有精品2| 成人午夜天| 微拍92| 激情五月丁香社区| 狠狠久久婷五月综合色| 亚洲人成人五月天| 丁香五月婷婷偷拍| 色婷婷导航| 67久久| 9l视频自拍9l视频自拍九色学生| 久久婷婷五月天激情新地址| 五月丁香六月合| 五月丁香六月天| 97人人射| 大香蕉啪啪啪啪啪啪| 五月丁香综合| 婷婷开心激情综合五月天| 五月婷婷六月激情| 色婷婷久久| 99热黄| 激情色播| 99热只有这里才是精品| 91婷婷色 | www.色婷婷.com| 免费色色色| 婷婷丁香人妻天天爽| 五月婷婷香| 久久久久9久无码视频| 91狠狠色色丁香婷婷综合久久| 色色色99韩| 五月丁香激情综合网| 亚洲九九夜夜| 六月婷婷AV| aaaaaa片| 五月丁香六月婷| 亚洲视频一区| 色5月婷婷色| 互月天综合| 国产无套精品一区二区| 婷婷六月香| 99热久| 开心婷婷丁香五月| 夜精品无码A片一区二区蜜桃| 91操操| 五月婷色丁香| 激情综合4月| 99这里只有精品| 色综合久久之分久久| 91婷婷色五月| 婷婷草| 欧美肉大捧一进一出免费视频| 亚洲无aV在线中文字幕| 天天撸夜夜爽| 国产免费一区二区在线A片视频| 九九伦子片| 欧美激情丁香五月天久久婷婷一区| 激情綜合網址| 亚洲激情综合免费| www.日韩艹| 另类天堂| 99啪在线| 婷婷开心综合人妻小说网址| 婷婷久久丁香五月| 激情精品久久| 亚洲激情五月婷婷日日| 久操热| 日本九九九九九九| 一区二区三区四区无码| 色婷婷香蕉| 日本 欧美在线| 夜夜撸夜夜骑| 色综合网页| 精品色色网| 99精品久久| 伊人久久婷婷| 情色婷婷五月天| 色婷婷最新域名 | 搡BBBB搡BBB搡18| 美日韩成人| 五夜丁香| 久久亭亭电影| 五月丁香黄色| 欧洲电影在线观看免费版英语版 | 中文字幕 中文字幕明步| 亚洲午夜电影| 综合网五月| 日韩成人影片在线观看| 日日夜夜爽爽| 久草热8精品视频在线观看| 综合欧美五月婷婷| 六月丁香久久| www.五月婷婷.com| 婷婷玖玖五月天| 一起草av在线观看| 婷婷六月综合基地| www.99热这里精品| 综合激情九月婷婷,激情综合婷婷中文字| 先锋av性爱成人电影| 成人无码髙潮喷水A片| 丁香丁香激情网| 午夜一区| 亚洲激情网站无码| 91啪啪视频| 丁香六月色婷婷欧美| 婷婷五月激情丁香| 天搞天天天天天| 99热这里只有精品9| 伊人网欧美在线男人天堂五月丁香| 丁香花五月天激情| 色九网| 99热在这里只有精品| 91碰碰| 久久九九综合| 丁香五月婷婷色综合基地| 黄桃AV无码免费一区二区三区| 激情婷婷人妻| 不卡在线超碰| 五月丁香花婷婷玉莉AV| 五月婷婷丁香综合,亚洲天堂| 99热99热在线| 天天操天天曰天天射| 色综合久久99色| 9色在线| 99爱在线视频| 色色aⅤ網| WWW色色色COM| 开心婷婷五月| 啪啪激情综合| 久久亚洲婷婷| 99爱最新免费视频在线观看| 99久99久| 可以看的av网站| 久操福利| 99精品视频在线观看| 天天 日综合| 另类婷婷五月天啪帕帕| 人人爱人人草| 五月丁香啪啪网| 久久久久9999| 婷激情五月| caopeng97人人| 激情五月天视频| 深夜婷婷五月丁香| 久久涩视频| 激情五月天小说网| 九色视频91| 粉嫩AV久久一区二区三区| 五月婷婷丁香狠狠撸久久| 我去色色网五雨天| 久久这里都是精品| www.五月天婷婷姐姐| 噜噜五月天综合| 99热这里只有精品1025| 怕怕av| 欧美成综合在线观看| 久久婷婷成人| 日韩五月天婷婷| 欧美色偷偷大香| 日本色婷婷| 婷婷色日本| 亚洲视频国产一区| 97久久超碰| 深爱五月网| 九九色99| 碰99在线| 亚洲AV网站| 呦呦视频无码播放| 五月丁香自拍| 99在线精品免费视频| www.操.com| 青青草搞屄视频网站| 色五月婷婷天堂| 五月激情小说| 五月天国产婷婷精品视频在线| 国产 亚洲 在线| 日韩精品一区二区三区,四区,五区视频| 亚洲激情另类| 色婷婷伦理| 9精品在线| 婷婷五月成人社区|