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

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)加上幾個中斷小項目跑得挺歡。但項目一旦復雜起來比如要同時處理串口協(xié)議解析、按鍵掃描、LCD刷新、傳感器采集、數(shù)據(jù)存儲這幾件事裸機就開始捉襟見肘了。你不得不用各種狀態(tài)機和延時來拼湊代碼越寫越亂一個地方改動了另一個地方就出問題。我印象特別深的一次做一個帶LCD顯示的工業(yè)控制器主循環(huán)里要刷屏、要讀編碼器、要跑Modbus從站、還要做PID運算。裸機方案下刷屏的時候編碼器脈沖就丟了PID周期也不穩(wěn)定。后來上了FreeRTOS把每個任務(wù)拆開給不同的優(yōu)先級問題一下就清晰了。這也是為什么越來越多的GD32項目開始引入FreeRTOS——它幫你把并發(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 移植前你需要準備什么先說硬件和軟件環(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的官方固件庫建立一個標準工程確保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ù)切換就會出問題。我個人的習慣是先把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”的方式把文件從工程目錄里添加進來而不是直接復制到Keil的默認目錄。這樣工程目錄結(jié)構(gòu)清晰換電腦或者分享給同事的時候直接把整個工程文件夾打包就行不會出現(xiàn)路徑丟失的問題。2.3 編譯選項的調(diào)整GD32和STM32一樣都是Cortex-M內(nèi)核所以編譯選項上基本一致。在Keil的Target選項中需要確認幾點一是芯片型號選對比如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不支持某些標準庫功能如果你的項目里用了這些功能就不要勾。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)當多個任務(wù)優(yōu)先級相同時每個任務(wù)輪流執(zhí)行一個tick。這個一般也設(shè)為1除非你有特殊需求。configCPU_CLOCK_HZ這個宏要填GD32的系統(tǒng)時鐘頻率。比如GD32F303跑到120MHz這里就填120000000。這個值必須和實際的系統(tǒng)時鐘一致否則FreeRTOS的延時和超時都會不準。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ù)可能要適當加大。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é)拍鉤子??臻e鉤子適合放一些低優(yōu)先級的后臺處理比如喂狗節(jié)拍鉤子適合做系統(tǒng)級的定時統(tǒng)計。這兩個鉤子函數(shù)如果啟用了你必須自己實現(xiàn)vApplicationIdleHook()和vApplicationTickHook()否則鏈接會報錯。configUSE_MALLOC_FAILED_HOOK是內(nèi)存分配失敗鉤子建議啟用。當pvPortMalloc返回NULL的時候會調(diào)用vApplicationMallocFailedHook()你可以在這里打印信息或者點亮錯誤燈方便定位問題。configCHECK_FOR_STACK_OVERFLOW是堆棧溢出檢測這個強烈建議啟用。它有兩個檢測模式模式1在任務(wù)切換時檢查堆棧指針是否越界模式2在任務(wù)切換時檢查堆棧末尾的標記值是否被改寫。模式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導致系統(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ù)恢復它的上下文然后跳轉(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ù)堆棧大小還有一個比較隱蔽的錯誤是重復定義。比如你的裸機工程里已經(jīng)有一個SysTick_HandlerFreeRTOS的port.c里也有一個鏈接的時候就會報重復定義。解決辦法是把裸機工程里的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之后如果是因為堆棧溢出導致的會先進入vApplicationStackOverflowHook()你可以在里面打印任務(wù)名。第三步檢查中斷優(yōu)先級。如果在一個優(yōu)先級高于configMAX_SYSCALL_INTERRUPT_PRIORITY的中斷里調(diào)用了FreeRTOS的API會導致臨界區(qū)失效進而引發(fā)HardFault。這種情況的典型現(xiàn)象是程序在運行一段時間后隨機崩潰而且崩潰的位置不固定。第四步檢查堆是否夠用。如果configTOTAL_HEAP_SIZE設(shè)得太小創(chuàng)建任務(wù)或者隊列的時候會返回NULL如果你沒有檢查返回值就直接使用就會訪問空指針導致HardFault。我一般會在創(chuàng)建任務(wù)之后檢查一下返回值如果是NULL就打印錯誤信息。避坑技巧在GD32上如果用了FPU并且任務(wù)里做了浮點運算一定要確保port.c用的是ARM_CM4F版本而不是ARM_CM3版本。用錯了版本浮點寄存器的上下文不會被保存任務(wù)切換之后浮點運算結(jié)果就會錯亂嚴重的時候直接HardFault。5.3 任務(wù)調(diào)度異常的調(diào)試方法有時候程序沒有HardFault但任務(wù)調(diào)度不正常比如某個任務(wù)一直不執(zhí)行或者延時不準。這類問題一般和配置有關(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。如果延時不準檢查configCPU_CLOCK_HZ和configTICK_RATE_HZ是否和實際一致。另外如果SysTick的中斷優(yōu)先級設(shè)得太低被其他中斷頻繁打斷也會導致節(jié)拍丟失延時變長。如果任務(wù)切換的時候串口打印亂碼可能是任務(wù)堆棧太小導致局部變量被覆蓋??梢栽囍讶蝿?wù)堆棧加大一倍看看問題是否消失。還有一個常見問題是在中斷里調(diào)用了非FromISR版本的API。比如在串口中斷里調(diào)用了xQueueSend()而不是xQueueSendFromISR()這會導致中斷里的操作破壞了就緒列表的一致性進而引發(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)定運行之后看看還剩多少堆如果剩余很多可以適當減小如果剩余很少就要加大或者檢查是否有內(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的閃爍頻率是否準確串口打印的時間間隔是否穩(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ù)負責一個功能模塊任務(wù)之間用隊列或者信號量通信。然后逐步引入更高級的功能。比如用事件組來管理多個任務(wù)的同步用任務(wù)通知來替代二值信號量以提高效率用流緩沖區(qū)來處理串口的不定長數(shù)據(jù)。如果項目里有LCD顯示可以考慮移植LVGL。LVGL本身是單線程的但可以把它放在一個獨立的任務(wù)里通過消息隊列接收其他任務(wù)的顯示請求。這樣顯示刷新不會阻塞其他任務(wù)界面也會更流暢。如果項目里有網(wǎng)絡(luò)通信GD32加上LWIP協(xié)議??梢园丫W(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ù)的負擔。6.4 從GD32F103到GD32F303的移植差異如果你已經(jīng)在GD32F103上移植好了FreeRTOS想換到GD32F303大部分代碼是可以直接復用的但有幾個地方需要注意。首先是時鐘頻率不同。GD32F103最高72MHzGD32F303最高120MHz。configCPU_CLOCK_HZ要相應(yīng)修改否則延時和節(jié)拍都會不準。其次是FPU。GD32F303帶浮點單元如果你要用浮點運算需要把port.c從ARM_CM3換成ARM_CM4F并且在Keil里開啟FPU支持。GD32F103沒有FPU只能用軟件浮點。然后是中斷向量表。GD32F303的中斷源比GD32F103多啟動文件也不同。移植的時候要確認SVC_Handler、PendSV_Handler、SysTick_Handler這三個異常處理函數(shù)的映射是否正確。最后是RAM大小。GD32F303的RAM一般比GD32F103大configTOTAL_HEAP_SIZE可以適當加大任務(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视频伊人| 日本 欧美 国产一区| 综合网久久| 青草成人免费视频一COm| 久久久成人国产精品无码| 国产成人天堂| 久久黄片国产一区二区| 四虎免费看黄| 国产精品一区二区手机看片| 亚洲有码 欧美精品| 青青青在线高清视频在线一二三四区| 亚洲清纯综合| 亚洲一区二区性爱电影| 激情啪啪视频| 免费一级黄色录像影片| 亚洲AV高潮| 精品免费一区| 美女在线H91| 久久色AV线| 26UUU欧美日本| 久久久久国产无av| 后入人妻无码| 青青草九九九九九| 91人精品妻入口| 国产精品午夜成人福利| 中国女人内射6XXXXX| 乱欲性色| 嗯嗯啊啊日韩精品| 精品欧美А∨无码黑人大荫蒂 | 天天色综合影视网| 99ri在线视频| 视频不卡中文字幕| 5252色欧美在线| 午夜视频好爽啊| 台湾佬激情综合| 日夜伊人网| 99热最新网址| 亚洲丝袜诱惑| 免费的av网| 最新av网站在线观看| 97操操| 国产成人五月天丁香花| 色综合久| 日韩欧洲操屄视频| 欧美日韩精品青青| 久久久影院| 午夜αv| 成人AV素股で擦久久| 亚洲码在线中文在线观看| 美性中文综合网| www.99中文字幕| 欧美综合色综合| 久久高清欧美国产| www.yeyecao| 久久久久国产| 亚洲精品97在线| 精品高清一区二区三区三州| 在线播放欧洲免费av| 69精品少妇一区二区三区蜜桃| 97超碰超碰| 欧美久久人妻少妇一区二区| 99婷婷| 欧美高清18A片| 激情文学亚洲| AV丝袜少妇| 美女尤物人人操| 欧美不在线| 欧美性色综合网| 无码 有码 国产18p| 久久久日本电影| 久久成年精品| 久久精品小视频| 不卡av在线中文字幕| 蜜臀一二三| 黄色乱论网站| 99久久婷婷国产综合精品草原| 亚洲天堂男人天堂| 中出在线视频| 久久伊人青青草| 无套内射性感少妇视频| 激情国产乱伦Av| 97精品在线视频| 久久99草| 亚洲男人的天堂一区二区| 粉嫩粉嫩一区性色AV片| 欧美真人抽搐一进一出gif | 成人看片网站| 在线国产一区二区av| 国产精品午夜AV完会免费| 亚洲天堂久| 欧美日本天堂| 嗯嗯嗯啊啊啊操的我好爽| 亚洲精品中文字幕一区在线视频| 大香蕉中文201| 日日黄色三级网站| 95精品在线| 欧美黄色大香蕉一区二区| 伊人黄色片| 中文字幕av亚洲精品| 天天射天天色成人| 91超碰丝袜制服| 91成人社区| 噜噜在线| 999岛国大片| 色久桃花影院在线观看| 国产成人一级av88| 男女激烈网站最新| 久久天天艹| 婷婷av在线中文字幕| 麻豆成人影音在线| 国产精品免费久久久久久久久久| 丰满人妻一区二区三区色-百度| 亚洲熟女一区| 97伪v| 中文字幕日韩人妻视频一区二区三区交换夫妻| 欧美少妇第一页| 亚洲色婷婷| 成人性爱全视频观看| 浪人综合网| 日小BB小视频| 国产女人与拘做受视频免费| 黄色香蕉视频网站一区| 黄色一区二区秘书性感| 人人爱人人操人人性| 333kkkk·亚洲com久久| 717影院理论午夜伦八戒| 亚洲精品美女久久久久久久久| 波多野42部无码喷潮在线观看| 13小男生GAY自慰脱裤子| 快灬快灬 一下爽蜜桃在线观看 | 强奸乱伦大香蕉| 高潮的A片激情扒开一区| 亚洲AV秘无码一区..| 曰韩精品视频一区二区| 亚洲中文日韩欧美大香蕉视频| 亚洲AV噜噜狠狠网址蜜桃动漫| 蜜乳AV一区| 97摸视频| 91狠| 欧美图片色综合| 欧美亚洲激情一二三| 久久精品无码不卡| 婷婷久月| 69av一区二区三区| 欧美性生活免费网| 成全在线观看免费观看| 静品嫩模一区二区| 99热这里只有精| 欧美大香蕉97| 神马久久免费电影观看| 国产精品精品系列在线观看| 欧美色性爱| 激情五月综合网| 97久精品| 丝袜加勒比| 1000部熟女视频在线观看| 久久区| 爽极品影院| 天天操夜夜操狠很操| av网站在线观看了| 日韩偷拍色图| 日本精品免费一区二区三区四区| 美国三级日本三级久久99| 情色大香蕉| 国产精品69久久久久久久 | 五月丁香社区婷婷日韩欧美精品影院| 天天添天天干电影| 欧美91网站| 中日韓欧美高清| 国产偷人伦激情在线观看| 逼逼逼逼操操操操操操操操操午夜剧场 | 中文字幕成人| 欧美色图人妻| 中文字幕AV乱伦| 成人免费看吃奶视频网站| 色五月首页| 后入 亚洲 美女 射| 插入粉嫩少妇视频| 天美91| 久久香蕉综合一本到3atv| 午夜福利免费精品视频| 女人妻一区| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 操操吧亚洲乱伦视频| 欧美性爱在线无码| 激情人妻另类| 国产美女销魂在线观看不卡| 91逼逼女人91| 亚州色综合| 日本操逼视频导航| 欧美性生活内射| 乱伦熟女论坛| 美女啊啊啊啊啊啊啊| 四虎免费视频| 在线观看岛国有码| 亚洲丝袜二区在线| 国产激情av女片自拍| 无码人妻精品一区二区三区九九| 不卡中文字幕aⅴ在线| 亚洲中文字幕网| 少妇内射视频| blacked精品一区国产| 亚洲国产剧情少妇激情| 亚洲学生妹高清av| 日本美女性生活久久久久久久| 青青草国产一区二区三区| xxxx网站亚洲精品| 一二视频神马久久传媒| 日本护士高潮| 久久爱97| 欧美老熟另类| 日韩操p| 亚洲综合网图| 国内毛片国产欧美拍| 欧美熟妇操操视频| 91精品国产日韩欧美综合| 狠狠干精品一二三四五六2022| 亚洲男人天堂AV| 夜色五月天| 精品一区二区三区丰满熟女-亚洲欧美一区| 免费在线观看国内色片网站网址| 欧美一二三级精品在线| 97久久精品亚洲中六字幕| 九热中文字幕| 蜜臀精品1区2区| 呦呦一区| 曰韩香蕉97| 久久国产性爱| 正宗无毛一线天嫩逼| 去干网最新版| 一级成人性爱| 久久精品99| 久久久国产三级黄色片| 亚洲精品一区二区日本| 亚洲精品黑丝| 99国产人成精品| 天天综合91| 青青伊人久久| 天综合网| 成人性爱av.com| 97se亚洲| 日韩欧美偷拍美女视频| 色丁香五月婷婷| 日本黄色精品专区网站| 色综合1991| 国产伊人自拍| 在线视频日韩欧美国产| 中文字幕精品一区欧美| 中文字幕无码不卡啪啪| 亚洲熟妇无码一区二区三区| 欧亚在线视频| 大学生口爆吞精| 91综合网在线| 亚洲素人综合| 97色97好| 不卡超碰护士AV在线免费播放| 国产成人精品必看| 久久久久久九九九| 天天搞欧美| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 嫩草黄页| 欧美老妇综合网| 亚洲熟女中文字幕在线| 欧美日韩黄片精品在线| 嗯嗯不要视频| 天天综合网~91综合网| 97视频在线观看播放与子乱对白在线……| 天天综合网1| 91久久久久久久久18| 被男人添B超爽视频| 操久久久久| 久久精品99久久久久久| 欧美丝袜激情| 色香阁在线| 九九aV| 亚洲天天做日日做天天谢日日| 天天操福利视频综合网站| 四季AV一区二区凹凸精品小说| 情侣开房子拍 日韩无码 女的很漂亮| 九九综合久久| 天堂俺去俺来也www久久婷婷| 九九碰九九爱97超| 欧美亚洲手机在线| 日韩91网| 亚洲日精品| 天堂综合| 亚洲性猛| 午夜精品久久久99热蜜桃的功能特点| 久久久久921| 天堂涩涩| 亚洲欧美在线观看2021| 亚洲无码一二三区| 水多多映视AV| 74成人在线| 97超碰人人操人人操| 国产三级片在线观看| 欧美激情 亚洲色图| 嫩草 我啊~嗯~在线| 日韩ab网 | 亚洲资源吧| 91狠狠狠| 三及片网站| 天堂性色| 人妻精品免费一二三区| 亚洲网站一区二区在线| 亚洲av国产av综合av卡| 免费中文在线| av天天在线观看| 五月综合色| 日韩亚洲美女一区久久| 特级大荫道BBwBBwBBW| 熟女丰满人妻一区| 9热9热综合网| 狠狠躁日日躁夜夜躁A| 丰满少妇精品一区二区| 青青色在线观看| 午夜国产乱伦视频| 免费久久精品麻豆一区二区av| 亚洲国产成人高清在线| 九九热超碰| 五月丁香六月| 色五月天AV| 亚洲日韩乱码中文无码蜜桃臀网站| 97一区二区三区视频| 国产美女精品| 国内一区二区三区| 另类欧美色| 欧美乱伦专区| 国产超碰人人爽人人做| 国产 日韩 另类 视频一区爱| 黄网在线播放| 91天美传媒精品| 97操碰| 成人午夜高潮av猛片| 国产第25页在线观看| 日本福利社| 日韩不卡码| 91丰满| 欧美综合娱乐久久| 99r九九| 国产自啪精品视频网站黑丝| 日韩福利综合一区| 国产乱码久久| 欧美综合传媒| 欧美激情性久久久久久| 色女女女导航| 精品视频一区二区| 伊人久久综合影院| 97久久资源| 中文字幕在线第二页| 久久成年片色大黄全免费网站| 曰韩av中文字幕专区| 少妇人妻精品| 精品蜜乳AV免费观看| 五月天色色网站| 欧美少妇性乱| 18禁精品网站在线看| 色综合中文字幕不卡| 日韩精品资源| 欧美强奸乱| 久久久久ab| 中国人高清www色视频免费| 91在线精品| 久久爽爽精品| 日韩免费三级黄片电影| 伊人久久亚洲中文字幕| 亚洲熟女av中文字幕| 欧美啪啪女女| 亚洲自拍青操视频| 欧美日韩 强奸乱伦| 人人操人人操人人操人人操人人操人人人11.CM | 久久综合97| 在线v中文字幕一区二区三区| 97综合国产精品高潮久久| 欧美中文综合| 午夜天堂精品久久久久91| 久久久免费视频18| 亚洲无码久久久久久久| 狠狠爱夜夜干| 中文字幕123| 国产精品视频| 人人射人人操人人摸| 久久久九九九九| 大香蕉黄色一级片免费看| 有码人妻系列| 自怕偷自怕亚洲精品| 天天综合香 ld视频| 翔田千里Av在线| 亚洲免费日韩在线一区二区| 日韩熟女操逼| 精品国产久久乱码| 五月丁香拍拍激情综合三级| 青青操在线视频| 99视频只有精品| 久久精品国产亚洲av水密被窝| 九九色精品| 热热色91| 欧美熟女激情| 91操人| 国产97在线播放| 久热大香蕉| 久久东京热久久| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 三及片网站| 天天日少妇逼AV| 精品国产Av无码久久久伦古装| 青青草九九九九九| 视频一区二区三区精品| 亚州欧美总和| 亚州色交| 日韩综合无码色欲vv| 久久97超碰香蕉| 人妻精品一区二区| 99国产精品免费| 爱av免费| 国产午夜精品理论片一二三区区| 97资源免费视频| 99热最新| 国产精品免费1区2区视频| 秋霞一区二区三区四区五区六区七区| 国语av最新自产拍在线观看| 亚洲全色网| 国产午夜视频| 婷婷综合在线| 日本免费一级AAA大片器| 骚日日av| 性性欧美| 另类图片五月| 日韩欧美一级特黄大片| 色噜噜国产精品视频一区二区| 九九久久国产精品| 亚洲成人在线播放| 天天色天天干天天爱| 久久精品国产97欧美精品亚洲| 日韩美一区| 国产精品一二三在线看| 中日韩免费看男女操逼大全| 大香蕉日亚洲日本亚大| 日韩天堂av电影在线观看| 福利在线观看一区二区| 国产精品视频内谢女人| 欧美,日韩,中文,另类| 欧美性暴力猛交XXXX| 美女一区二区国产精品| 一本色道无码DVD中文字幕| 快播久久人人aV| 99国产精品久久久久久久成人热| ′ !γ}丶。。久久精品欧美一区二区三区| 不卡av在线中文字幕| 综合久久9| 黄站在线免费观看| 亚洲色图欧美色图制服诱惑| 67194无码不卡| 国产激情综合五月久久| 亚欧性爱ab| 人人摸.人人色| 免费人成毛片乱码| 丰满人妻区一区二区三| 麻豆熟妇乱妇熟色A片在线看| 足交视频老司机| 欧美中文字幕一区| 欧美三级一级| 美日韩一卡二卡三卡免费人妻精品| 天天躁日日躁XXXXYY| 在线观看成人性爱免费小视频| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 亚洲AV成人无码一区二区三区在线观看 | 中出789在线视频| 亚洲熟妇图片| 精品人人| AV一二区| 91麻豆天美传媒HD| 老熟女熟妇| 亚洲精品蜜桃久久久一区二区三区| 99视频在线| 91九色首页| 日韩久久激情精品| 激情看片网站| 五月天伊人| 日日日日日| 久久思思热| 日韩欧美视频青青| 青青草在线成人视频| 啊啊啊啊嗯嗯嗯用力好爽| 99性爱| 国模一区二区三区| 亚洲AV乱码专区国产噜噜亚洲 | ?亚洲伊人伊成久久人综合网| 黄片免费久久久久久久| 美女一区二区国产精品| 偷看洗澡一二三区美女| 狠狠穞A片一區二區三區| www.狠狠| 偷拍亚洲高清图片| 国产成人精品一区| 久久久久久人体| 精品久9| 久久精品国产Aⅴ| 欧美性生活男人的天堂| 国产av波波国产精品| 日韩性爱电影一区| 色情婷婷| 久久久久久九九九九-美女久久久久久久-成人AV| 97色色国产视频| 亚洲熟女乱色一区二区三区久久久| 韩国黄色片精品久久久| 日韩精品一二三四| 亚洲少妇在线影音| 精品美女少妇一区二区| 在线中文字幕| 女人午夜视频777| 久久性爱视频| 成人色女网| 情色五月天就去干| 成人精品无码| 成人网站 免费观看| 六月丁香网| 久草资源在线视频官方总站日韩丝袜美腿 | 精品久一区免费| 久久日本熟女精品一区| 亚洲男人天堂网站| 高清一区AV无码| 狠狠干,狠狠操| 一区 欧美 日韩 麻豆| 春色综合免费| 伊人网青青| av资源在线播放天堂| 亚洲天堂女优在线 | 精品99999久久久久久| 欧美夜夜骑视频| 91丰满| 欧美一级国产一级| 亚洲图片 91| 欧美91丝袜| 久操97| 亚洲精品aa久久伊人| 亚洲中文字幕有码视频一区二区三区| 色偷偷人人玩人人舔人人操人人摸人人爽| 欧美高清第一页| 亚洲欧美日韩精品久| 伊人网青青| 丁香五月激情网| Aa东京男人的天堂| 蜜臀AV秘一区翔田千里| 水澄无码AV| 日本高清视频在线观看黄已三辽| 精品美女久久久久| 最新欧美色网| 99精品九九九九九九| 久干9操| 曰本精品久久久| 久久精品—区二区三区内射| 26uuu国产免费观看| 狠狠热这里都是精品| 香蕉人欧美综合| 99色天堂| 亚州黄站| 日本在线播放不卡一区| 欧美亚洲宗合色性图| 国产又粗又大硬免费色网视频| 婷婷五月天综合网| 理论久久婷婷网8| 亚洲强奸乱伦影视网| 伊人久久亚洲中文字幕不卡| 久久精品国产AV一区二区三区| 麻豆2区1区天美| 综合亚洲欧美| 无码99| 99夜夜操| 国产原创自拍| 亚州性色| 亚州伊人色综台| 国产路线专区| 狠狠久久亚洲欧美专区| 亚洲一区二区AV| 国产精品色| 蜜臀久久99精品久久久久久成人小说| 久久婷婷亚洲| 丰满人妻-区二区三区免费| 亚洲激情久久久伊人综合| 另类天堂| 亚洲熟女综合网| 国产精品一二三免费网站| 欧美色图综合网| 超碰人人妻| 日本506070| 亚洲美女精品| 一区二区三区亚洲| 骚人妻少妇视频| 亚洲日韩国产欧美综合v| 加勒比av网| 五月天色图| 97亚洲欧美| 欧美亚洲一区二区久久久婷精品大包诱| 女沟厕偷窥piss小便| 精品人妻一区二区免费蜜桃| 中文字幕亚洲永久精品| 激情情色五月天| 操91| 一本色道无码DVD中文字幕| 午夜精品久久久99| 强奸乱伦日韩AV| 天天干18禁| 蜜桃在线观看一区二区三区| 在线欧美69V免费观看视频| 亚洲极品| 婷婷色一区| 乱伦色图网址是多少| 九99久久| 天天影视综合网欧美精品| 伊人网青青| 综合天天。| 夜夜中出国产| 盗摄女人妻在线| 99热这里都是精品| 啊啊啊不要啊啊受不了了视频在线| 嫩草影院在线观看精品| 色女网日韩| 久久美女国产| 97精品免费| 婷婷五月天无码 | 国产大学生口爆吞精合集| 玖玖爱视频网站| 91电影色诱| 91色婷婷综合久久中文字幕二区| 91视频精品| 老熟女阿 国产91| 内射黑人| 日本大片日本一区二区免费高清| 91深夜夜| 亚洲欧美日韩偷拍色图| 97在线日韩中文字幕| av操操不卡| 丁香五月性| 亚洲 自拍偷拍 欧美| 97超碰欧美手机| 精品人妻一区二区三区夜夜| 大香蕉男女超碰精品在线| 最新日产中文在线麻豆| 一本色道综合久久欧美| 91 偷| 国产成人啪一区二区| 91美乳| 校园春色之综合网| 九九aV| 最新中文字幕精品在线| 日本1区2区不卡视频| 超碰美女97| 国产青青综合伊人| 色综合20p| 亚洲综合码| 日本超碰在线国产一区| 日本三级日本三级99| 永久免费发布性爱网| 国产高清吃奶免费视频网站| 国产精品 视频| 亚欧洲日韩国产精品| 女人被添高潮免费视频| 欧美老妇曰批的视频| 无码操逼视频一下| 91国产操逼视频| 78超碰| 久久久久白虎| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 国产三级多多影院2022国产AA一级毛片无码 | 亚洲www91| 一区麻豆 高清中文字幕| 2011国产精品| 日韩成人色图| 电影69乱码96| 操死我干死我| 欧美精品91| 久艹伊人精品综合在线| 啊嗯好大视频在线观看| 亚洲精品天天影视综合网| 91亚洲精品青草| 久久发布国产伦子伦精品| oumeisetu综合| 久久,精品一二三| 久久熟女人| 艳美熟妇先锋一二三区| 欧美超碰96| 北京美女一区二区| 97爱碰| 97资源站久久| 日韩三级av片| 97在线免费观看视频| 女性喷水高潮在线观看| 国产多人在线观看视频| 四虎影视永久在线免费| 国产 v乱码一区二| 天天做天天爽| 久久综合日韩亚洲欧美| 午夜福利在线视频1000| 操逼短片| 精品日日人妻| 美日韩男女操屄视频| 日韩黄色av中文字幕| 国产AV激情无码久久无码| 成人免费在线网站| 精品九九| 天天做日日做| 久久婷色| 久久久久久久久久久久久久久乱码| 欧美在线大香蕉| 亚洲美腿丝袜香蕉影视欧美成人| 狠狠爱大香蕉| 老外又粗又长一晚做五次| 久久精品国产亚洲AV高级北京| 婷婷丁香六月| 久久一留热品黄| 伊人在线大香蕉视频久久| 国产精品成人午夜福利| 久久 国产 无码| 99日精品欧美国产| 中文一区二区婷婷视频| 91影视亚洲| 国产精品自拍视频 | 东京热天堂网| jk白丝没脱就开始啪啪| 大香蕉九九| 亚洲自拍另类丝袜综合| 亚州黄站| ji熟女.com| 五月大香蕉| a人欧美综合天堂麻豆| 99超碰网| 久久这里是精品| 91色综| 久久国产熟女影院| 9997se| 日本色色视频网站| 久久久久中出| 91色射| 亚欧性爱在线无码| 国产精品丝袜久久亚洲不卡| 国产h小视频在线观看免费| 亚洲图片偷拍视频区| 久久綜合很很很| 亚洲 欧美 色图| 五月天黄色激情视频| 偷拍偷窥与盗摄视频专区| 日本一二区不卡| 亚洲人妻久久久| 色与欲影视天天看综合网| 黄色AAAAA欧美| 欧美日韩妖精91com| 麻豆伊人网| 97午夜剧场日韩| 新怡红院| 深夜激情无码| 涩涩久久精品| 人人操,人人插| 国产精品一二三区福利| www.成人无码| 久久‘黄片视频| 国产成人天堂| 免费a级毛片av无码久久精品中文字幕| 人妻AV在线| 亚洲欧美天| 亚洲综合精品国产一区| 91精品国久久久久久无码| 我要去看2个日本美女.com曹逼 | 91精品人妻五十路| 大香蕉专区| 精品一久久久| 变态乱伦伪娘灌肠一区二区| 色婷婷综合久久中文字幕雪峰| 国产91精品在线免费| 97电影院超碰| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 无码人妻丰满热妇又大又粗| 91欧美性| 亚洲一区二区中文字幕| 欧美色图在线视频少妇| 欧美日韩国产高清在线一二三区| 日韩天天本| 在线国产福利网址导航| 新视频sss国产| 超碰成人公开| 中文欧丝袜诱惑| 伊人黄色视频免费观看| 淫穴高潮色图| 色婷婷影视| 久久啊啊啊| 在线观看十八禁| 欧美真人抽搐一进一出gif| 欧美国产精品久久九九| 日本97久久久精品| 成人精品一区二区91毛片不卡| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 欧美一二三区四五区| 三级日本一区二区三区| 啊啊啊在线观看免费视频| 高清国产成人无码| 91激情国产| 伊人色综合网| 国产兽交视频在线播放| 97在线青| 色婷婷丁香| 91熟女视频| 欧洲乱码视频| 人妻中文字幕日韩电影| 亚洲一区中文字幕| 99热这里只有精| 亚洲h片在线免费观看| 五月开心久久AV官网| 97最新在线播放视频| 熟女精品日韩一区二区三区| 伊人97色天使| 国产操偷| 91亚洲人| 久久久网一区| 91精品国产高清久久久久久,亚洲成人 | h色99999| 99热这里是精品| 五月天婷婷在线看| 国产女主播视频在线观看| 五月天丁香| 精品人妻1区| 好湿好紧视频| 欧美少妇内射| 无码国产精品午夜不卡(| 国产女大学生AV| 校园春色综合香蕉| 欧美黑人XXXⅩ高潮交| 亚洲欧洲综合成人av一区| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 日韩欧美丝袜诱惑| 亚洲aV无码成人在线观看| 久久大黄片| 久久久久久久综合,国产| 97中文超碰| 秋霞免费AV| 超碰精品日韩欧美国产| 国产嫩草精品A88AV| 欧洲一区二区三区免费| 色色国产| 亚欧性爱ab| 精品久久无码午夜福利| 日韩精品 欧美激情| 夜夜骑天天燥| 久热伊人99re| 激情五月婷婷综合| 操操操日本的逼| 午夜精品久久一区二区| 青青草一本道福利视频| 蜜臀AV成人精品蜜臀| 黄色网址久久精品欧美喷水| 亚洲四虎熟女精品| 亚洲AV无码翔田千里网站| 日日爱99| 久久岛国| 黑人性暴力毛片| 97视频新免费| 久久久久亚洲精品| 嫩草 人人网精品| 一区二区偷拍拍视频| 静品嫩模一区二区| 欧美日韩精品一区二区三区高清| 欧美v亚洲v综合v国产v妖精| 人妻欧美| 亚洲高清欧美总合| 欧美亚洲在线| 精品人妻视频一区二区在线播放 | 国产精品久久久久久9999| 日韩99神马视频播放| AV一二区| 综精品久久久aaaa| 亚洲综合色男人网| 日本三级中国三级99人妇网站| 久久这里只精品99re66图| 欧美强奸乱| 一区操逼日比视频| 国产亚洲美日韩Aⅴ中文字幕无码成人| 1区2区3区中文字幕日韩| 91色噜噜狠狠| 精品无吗久久| yazhousetuoumei| 快点操死我| 欧美综合色站| 欧美国产视频| 亚洲情色图片区| 精品一区二区麻豆| 欧美熟女丝袜| 天天影视网色欲色香| 国产亚热在线久久| 婷婷探花久久精品一区| 欧美色91| 97超碰欧美手机| 91综合网站| 试看日韩黄片| 男女日B国产| 久久亚洲欧美中文字幕国语| 国产自产自拍| 日本精品高清一二区一本到| 亚洲精品国产精品乱码不99| 午夜免费福利视频一区| 高清无码网址| 草b在线| 少妇人妻无码| 白丝在线一区| 天天久久久久久| 91亚洲欧洲| 欧洲黄色网| 久久毛卡| 日本三级大片| 大香蕉十区| 91路www| 99re6在线视频播放免费精品| 精品人妻一区二区三区鲁大师| 97视频在线免费观看| 翔田千里AⅤHD无码| 蜜乳AV一区二区三区四| 屌逼传媒| 丝袜无码a片| 精品一区二区2| 91网站18| 黄色区免费观看中文字幕| 97人妻碰碰中文无码久热丝袜| 久久国产三区| 98精品国产乱码久久久久久| 在线啊啊啊| 男人天堂网站| 乱伦图一区| 9 9精品一区二区三区| 操B久久| 午夜视频久久久| 亚洲āv网址在线观看| 久久三| 久久伊人在线五区| 91男人天堂网| 一区二区乱码福利| 亚洲天堂无码| 高清无码一区二区三区| 色婷亚洲五月在线观看| 亚洲 图片 欧美 色图| 91插B网站| 伊人黄色片| 激情综合五| 日韩美女,国产传媒,视频一区| 欧美激情 亚洲色图| 收看日本人日bb| 99这里有精品| 99999这里都精品| 亚洲伊人久久综合97| 色小视频蜜乳| 操死我了嗯嗯嗯| 呦呦一区| 九九碰九九爱97| 久久国产精品熟女人妻| 91w欧美| 韩国黄色片精品久久久| 日本欧美色| 日韩兔费看黄片| 国产精品久久久久久久久AV大片 | 五月综合色| 1024午夜激情男人的天堂| J?P?NESEHD熟女熟妇伦| 婷婷五月丁香五月| 色哟哟av| 国产探花精品在线| 欧美se亚洲| 91综合中文字幕| 岛国片在线观看视频亚洲| 91爱看| 日本高清免费一本视频在线观看| 国产超碰在线| 色香综合天天影视综合| 国产精品点击进入在线影院| 91N五十路| 啊啊啊啊啊啊好多水| 97精品综合久久| 97久久国产精品| 日韩A优精品在线观看| 91日日| 1769一区| 按摩中文字幕| 国产精品九九九| 亚洲午夜免费狠狠干| 日韩91网| 色色色欧美| 久久精品操| 亚洲综合精品国产一区| 日本精品九九九| 久久夜黄色无码A级大片| 96国产污污污丝袜| wwwxxx日本爽| 久久久久亚洲精品| 成人一级性爱| 九一精品牛牛一区二区| 久久欲| 色五月天AV| 中文字幕五月婷婷免费| 欧美另类自拍| 国产黄片精品在线| 久久日本熟女精品一区| 五月婷网站| 中文字幕一区二区三四五区日日骚| 精品毛片av一区二区| 男人天堂综合| 国产精品一二三在线看| 日韩黄色小说| 麻豆国产免费影片| 中文字幕成人乱码熟女精品国50| 人妻少妇色综合| 成年人黄色| 精品久久久久瑟瑟| 亚洲一区二区三区不卡国产欧美| 加勒比AV网| 国产熟女免费观看久久| 亚洲日韩黑丝| 五月婷婷激情网| 高清孕妇孕交| 久久久久久中文版| 亚洲高清无码AAA久久久精品| 无码精品啪啪啪一区二区三区三州| 这里都是精品在线观看| 国产传媒一区二区三区| 欧美香蕉视xxx| 国产成人精品无码久久| 日本不卡免费二区| 天天摸,夜夜摸| 亚洲性爱成人| 日韩国产九九精品一区二区三区毛片| 成人午夜视频免费播放| 97综合在线| 欧美A√综合网| 中文字幕一区日韩精| 国产精品96| 国产一区二区三区久久精品太古里| 强奸乱伦αv片| 国产久久久| 白 大 人妻 区 在线| 午夜男人一级A片7777| 国产精品点击进入在线影院高清| m欧洲一级午老| 99精品在线观看| 狠狠色噜噜狠狠狠狠2018| 久久久精| 啊啊啊啊啊操我视频| 日韩成人性爱AV| 国产精品天堂| 日韩一级二级三级免费看完整版国语版 | 岛园激情| 操b在线观看| 欧美日日人人天天| 熟妇熟女一区二三区| 人、人、摸,人、人、草| 沈阳熟女高潮对白视频| 久草成人影片| 97色97好| 中文字幕一区av| 亚洲AV秘 精品久久老牛影视| 色臀av| 久久久草草精品| 欧美色图片91| 色综合久久久久| 波多野42部无码喷潮在线观看| 美女啊啊啊啊啊| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 蜜桃久久综合视频| 太久视频| 黄色香蕉视频网站一区| 久久久久久十| 欧美在线中M| 欧美婷婷久久| 亚洲色图激情小说| 色婷婷丁香| 激情综合二| 大香蕉免费3| 97在线免费观看| 久久精品噜噜噜成人看免欧美大片| 天天天天做夜夜夜夜做| 亚州操操穴网| 少妇一线天久久久久久| 国产超碰| 国产乱码精品一区二区三区四川| a片偷拍视频| 黑人娇小av在线播放| 日日骚网站| 97在线观看视频| 日日日色色色色色| 中文字幕女同在线| 九九久久国产精品| 99re6久热只有精品6在线直播| 午夜色婷婷| 国产成人自拍视频在线| 国岛片视频| 国产自产自拍| 色在线亚洲视频www| 国产又色又粗又黄又爽| 91夜色| 精品久久久久久中文字幕视频免费| BBBBB97COM| 亚洲中文字幕一区二区| 日产精品久久久一区二区| 久久九九精品一区二区| 91n.欧美| 亚洲自拍青操视频| 色香91| 色婷婷A V一二三四区麻豆综合| 国产久久久久影院老熟女| SUV一区二区在线看| 日韩图区| 97精品在线| 少妇蹲下买菜露大唇0| 日日玩天天干| 后入合集| 欧美亚洲天天| 欧美日韩亚洲天堂| 精品日韩| 毛片一区二区| 国产在线能看的你懂的| 在线观看不卡一区二区三区| 成人26uuu| 亚洲一级性爱视频免费看| 亚洲色图欧美色图日韩色图| 99精品欧美一区二区三区桃色| 国产精品女久久久久av爽| 黑人操一区二区| 久久老子无码午夜伦不卡| 色婷婷电影网| 久操高青| 啊啊啊啊啊好大好舒服想要| 91天射| 熟女久久| 91老熟女| 性爱视频无打码在线观看| 国产一级操B视频| 亚洲av无码成人精品国产| 999在线电影香蕉| 男人干美女| 日本顶级天天操狠狠操夜夜操中文字幕| 麻豆区久久久久亚| 国产精品午夜高潮呻吟久久av| 久热91| 少妇蜜汁| 欧美日韩青操| 欧美激情 一区| 97在线视频观看| 国产精品一区二区久久精品| 国产宅男宅女在线观看| 簧片免费看视频| 国产视频三区四区| 精品中文日韩字幕视频| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 精品九九九九九九九九九| 极品出轨视频网站| 永久免费观看的毛片的网站| 久久黄色视频一区二区三区 | 狠狠中文字幕| 婷婷五月丁香五月| 亚洲欧美setu| 97chaopengongkai| 自怕偷自怕亚洲精品|