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

ARTICLE DETAIL

資訊詳情

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

STM32工程化開(kāi)發(fā):用C++封裝驅(qū)動(dòng)與中斷的實(shí)戰(zhàn)指南

STM32工程化開(kāi)發(fā):用C++封裝驅(qū)動(dòng)與中斷的實(shí)戰(zhàn)指南 好久沒(méi)更新這個(gè)系列了后臺(tái)一直有人催“第6篇怎么還不出來(lái)”說(shuō)實(shí)話不是我不想寫(xiě)是因?yàn)榍懊鎺灼选澳芘堋钡牟糠种v完了接下來(lái)會(huì)進(jìn)入一個(gè)比較尷尬的階段你說(shuō)不會(huì)吧其實(shí)點(diǎn)燈串口都玩得轉(zhuǎn)你說(shuō)會(huì)吧真扔一個(gè)稍微完整點(diǎn)的項(xiàng)目過(guò)來(lái)又不知道該從哪兒下手。這篇標(biāo)題里那句“咱們還差活滴”就是我自己的真實(shí)體會(huì)——基礎(chǔ)語(yǔ)法和裸機(jī)外設(shè)都不缺了缺的是把C真正用進(jìn)STM32工程里的那套“干活手法”工程怎么組織、驅(qū)動(dòng)怎么封裝、中斷怎么寫(xiě)才穩(wěn)、通信異常怎么排查、代碼怎么才能給別人維護(hù)。這篇我打算把這些坑都攤開(kāi)聊一聊爭(zhēng)取一次補(bǔ)齊。這篇適合兩類人一是已經(jīng)在用C寫(xiě)STM32、想試試C但不知道從哪里切的人二是已經(jīng)在用C了但總感覺(jué)代碼只是在“把C函數(shù)換個(gè)語(yǔ)法重寫(xiě)一遍”沒(méi)有發(fā)揮出C工程化優(yōu)勢(shì)的人。如果你是純小白剛點(diǎn)完燈建議先翻翻我前面的文章再回來(lái)這篇默認(rèn)你對(duì)GPIO、串口、中斷這些概念已經(jīng)有點(diǎn)手感了。1. 先把工程骨架搭起來(lái)VSCode CMake GCC 的組合拳1.1 為什么不用IDE的一條龍服務(wù)很多人一接觸STM32就是Keil MDK或者STM32CubeIDE這倆確實(shí)省心新建工程點(diǎn)幾下鼠標(biāo)HAL庫(kù)配置好直接就能寫(xiě)代碼。但我個(gè)人的體會(huì)是IDE的舒適圈待久了會(huì)有兩個(gè)很難受的問(wèn)題第一工程文件比如.uvprojx或者.ioc這種格式在多人協(xié)作、代碼評(píng)審、Git回看的時(shí)候體驗(yàn)非常差改了一行配置整個(gè)文件可能都變了diff起來(lái)全是噪音第二IDE幫你做了太多事情你反而搞不清楚編譯鏈接到底發(fā)生了什么出了詭異問(wèn)題只能靠“重開(kāi)工程”來(lái)治。所以從第4篇開(kāi)始我就在自己的小項(xiàng)目里切到了 VSCode CMake arm-none-eabi-gcc 這套組合。VSCode負(fù)責(zé)編輯、C智能提示、Git集成、終端操作CMake負(fù)責(zé)構(gòu)建規(guī)則GCC負(fù)責(zé)真正的編譯鏈接下載調(diào)試交給 J-Link 的命令行工具或者 Cortex-Debug 插件。整套工具鏈都是開(kāi)源的跨平臺(tái)腳本化換個(gè)電腦拉下來(lái)就能構(gòu)建沒(méi)有那種“我這編譯過(guò)了你那兒怎么不認(rèn)”的問(wèn)題。這套東西不是銀彈如果你是公司項(xiàng)目、團(tuán)隊(duì)統(tǒng)一用Keil那就老老實(shí)實(shí)跟著團(tuán)隊(duì)走別一個(gè)人折騰工具鏈耽誤交付。但如果是自己的項(xiàng)目、畢業(yè)設(shè)計(jì)、競(jìng)賽作品或者想在編譯鏈接這塊建立底層認(rèn)知我非常推薦花一個(gè)晚上把這套環(huán)境搭起來(lái)。1.2 工程目錄和CMakeLists核心要點(diǎn)先給一個(gè)我最近在跑的迷你工程結(jié)構(gòu)不算什么標(biāo)準(zhǔn)模板但比較符合“干活”的直覺(jué)project/ ├── CMakeLists.txt ├── ldscript/ │ └── stm32f407vgt6_flash.ld ├── src/ │ ├── main.cpp │ ├── hal/ │ │ ├── gpio.cpp │ │ ├── uart.cpp │ │ └── timer.cpp │ └── bsp/ │ ├── led.cpp │ ├── ultrasonic.cpp │ └── can_bus.cpp └── include/ └── hal/...CMakeLists.txt 里的核心幾段大概是這個(gè)樣子我用的是 STM32F407VGT6Cortex-M4F 內(nèi)核cmake_minimum_required(VERSION 3.16) project(stm32_cpp_demo CXX ASM) set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_C_XX_FLAGS -mcpucortex-m4 -mthumb -mfloat-abihard -mfpufpv4-sp-d16 -O2 -ffunction-sections -fdata-sections -Wall -Wextra -Werrorreturn-type) add_executable(${PROJECT_NAME}.elf src/main.cpp src/hal/gpio.cpp ... ) target_include_directories(${PROJECT_NAME}.elf PUBLIC include) target_link_libraries(${PROJECT_NAME}.elf) target_link_options(${PROJECT_NAME}.elf PRIVATE -T${CMAKE_SOURCE_DIR}/ldscript/stm32f407vgt6_flash.ld -Wl,--gc-sections ) add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD COMMAND ${CMAKE_OBJCOPY} -O ihex ${PROJECT_NAME}.elf ${PROJECT_NAME}.hex COMMAND ${CMAKE_OBJCOPY} -O binary ${PROJECT_NAME}.elf ${PROJECT_NAME}.bin )幾個(gè)必須注意的點(diǎn)-mcpu、-mthumb、-mfloat-abi、-mfpu這組參數(shù)必須和你的芯片匹配F103的話不需要浮點(diǎn)那兩項(xiàng)F407就要帶上否則鏈接時(shí)會(huì)出現(xiàn)奇怪的“relocation truncated”報(bào)錯(cuò)-ffunction-sections -fdata-sections配合-Wl,--gc-sections是把沒(méi)用到的函數(shù)和變量從最終固件里丟掉對(duì)Flash吃緊的芯片屬于救命級(jí)別的選項(xiàng)C模板和靜態(tài)庫(kù)很容易引入大量未被調(diào)用的符號(hào)沒(méi)有這組參數(shù)鏡像體積會(huì)突然暴漲。還有一個(gè)容易踩的坑是C全局對(duì)象構(gòu)造代碼會(huì)被編譯器放到.init_array段如果你的鏈接腳本里沒(méi)有把這段處理好那么全局對(duì)象尤其是那些在構(gòu)造函數(shù)里做了外設(shè)初始化的根本不會(huì)被執(zhí)行到構(gòu)造函數(shù)。很多人寫(xiě)C嵌入式代碼函數(shù)都能跑但類成員變量永遠(yuǎn)是一堆垃圾值排查半天后發(fā)現(xiàn)是鏈接腳本里少了.init_array的處理。1.3 鏈接腳本LD文件到底管了什么LD文件可以理解成一個(gè)倉(cāng)庫(kù)管理員它決定哪些貨物代碼、數(shù)據(jù)放到哪個(gè)倉(cāng)庫(kù)Flash、RAM的哪個(gè)貨架地址區(qū)間上。芯片出廠之后Flash大小和RAM大小是固定的比如F407VGT6Flash是1MBRAM是128KB64KB管理員必須在這個(gè)硬約束下分配空間。LD文件里最核心的就是MEMORY描述MEMORY { FLASH (rx) : ORIGIN 0x08000000, LENGTH 1024K RAM (xrw) : ORIGIN 0x20000000, LENGTH 128K CCMRAM (xrw) : ORIGIN 0x10000000, LENGTH 64K }然后是段的擺放規(guī)則常見(jiàn)的有.text、.rodata、.data、.bss、.heap、.stack。C工程還要特別關(guān)注.init_array : { __init_array_start .; KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array)) __init_array_end .; } FLASH這段的作用是把所有全局對(duì)象構(gòu)造函數(shù)的指針收集起來(lái)啟動(dòng)代碼會(huì)在Reset_Handler里調(diào)用__libc_init_array()然后逐個(gè)執(zhí)行這些構(gòu)造函數(shù)。如果你是自己從零寫(xiě)的啟動(dòng)文件或者用了精簡(jiǎn)版的啟動(dòng)代碼一定要確認(rèn)這里被調(diào)用了否則C的全局對(duì)象形同虛設(shè)。我之前犯過(guò)一個(gè)典型的錯(cuò)誤為了省事直接把一份STM32F103的LD文件拿過(guò)來(lái)給F407用結(jié)果Flash大小對(duì)不上RAM地址段也完全錯(cuò)誤固件燒進(jìn)去運(yùn)行到一半直接死機(jī)。后來(lái)學(xué)乖了永遠(yuǎn)從芯片型號(hào)對(duì)應(yīng)的官方示例或者HAL庫(kù)模板里拿LD文件打底再按需裁剪絕對(duì)不拿近似型號(hào)硬套。2. C在STM32上怎么用才不翻車2.1 哪些C特性可以放心用嵌入式圈子里對(duì)C一直有個(gè)老偏見(jiàn)“C很慢、體積大、不適合單片機(jī)?!边@種說(shuō)法在十年前有一定道理但現(xiàn)在C17編譯器的優(yōu)化能力早已不可同日而語(yǔ)。真正該做的不是拒絕C而是清楚什么能用在MCU上、什么不能。我自己的經(jīng)驗(yàn)是下面這些特性在STM32上是“放心用”的class封裝結(jié)構(gòu)體與函數(shù)外設(shè)驅(qū)動(dòng)天然適配namespace隔離不同驅(qū)動(dòng)模塊比如hal::gpio和app::ledenum class替代無(wú)意義的整型常量constexpr在編譯期完成常量計(jì)算模板有限度用于復(fù)用寄存器操作、位段處理RAII思想用于鎖、中斷屏蔽、SPI片選等資源管理這些特性編譯后不產(chǎn)生額外運(yùn)行時(shí)開(kāi)銷幾乎就是直接映射成機(jī)器指令跟手寫(xiě)C沒(méi)有性能區(qū)別但代碼的組織能力和可讀性會(huì)好一個(gè)量級(jí)。舉一個(gè)最簡(jiǎn)單的例子GPIO寫(xiě)一個(gè)高電平C寫(xiě)法可能是#define LED_PIN GPIO_PIN_5 #define LED_PORT GPIOA HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);換成C類封裝后class Led { public: explicit Led(GPIO_TypeDef* port, uint16_t pin) : port_(port), pin_(pin) {} void on() { HAL_GPIO_WritePin(port_, pin_, GPIO_PIN_SET); } void off() { HAL_GPIO_WritePin(port_, pin_, GPIO_PIN_RESET); } void toggle() { HAL_GPIO_TogglePin(port_, pin_); } private: GPIO_TypeDef* port_; uint16_t pin_; };單看性能二者沒(méi)有任何區(qū)別單看接口Led::on() 比 HAL_GPIO_WritePin(……, GPIO_PIN_SET) 的語(yǔ)義清晰太多了尤其是代碼量上去之后這種區(qū)別會(huì)被極度放大。2.2 外設(shè)驅(qū)動(dòng)類怎么設(shè)計(jì)才像“干活的樣子”類封裝最大的價(jià)值是讓外設(shè)資源的使用者不需要關(guān)心底層寄存器細(xì)節(jié)。設(shè)計(jì)驅(qū)動(dòng)類的時(shí)候我給自己定了幾條約定每個(gè)外設(shè)一個(gè)類構(gòu)造函數(shù)負(fù)責(zé)初始化成員函數(shù)提供操作接口析構(gòu)函數(shù)釋放資源但對(duì)于MCU上的外設(shè)復(fù)位析構(gòu)函數(shù)并不常用因?yàn)橥庠O(shè)生命周期和啟動(dòng)流程強(qiáng)綁定析構(gòu)時(shí)機(jī)很難控制得恰到好處。類內(nèi)部私有成員保存外設(shè)基地址或句柄不在類的內(nèi)部到處公開(kāi)HAL句柄。比如UART驅(qū)動(dòng)外部調(diào)用者只需要send()和注冊(cè)接收回調(diào)不需要知道huart1這個(gè)東西的存在。不裸用new對(duì)象盡量放在靜態(tài)存儲(chǔ)區(qū)或者棧上。嵌入式C里動(dòng)態(tài)內(nèi)存分配是大忌理由后面會(huì)細(xì)說(shuō)。我上一個(gè)項(xiàng)目的驅(qū)動(dòng)目錄大概是這樣組織的hal/ ├── gpio.h ├── gpio.cpp ├── uart.h ├── uart.cpp ├── timer_capture.h └── timer_capture.cpphal 目錄只放芯片相關(guān)、跟具體板子無(wú)關(guān)的驅(qū)動(dòng)bsp目錄放板級(jí)支持比如LED接在哪個(gè)引腳、超聲波接在哪個(gè)引腳。這樣換一塊板子時(shí)只用改bsphal層的代碼可以直接搬走。同時(shí)我不斷提醒自己燒錄一次至少十分鐘能在寫(xiě)代碼階段解決的問(wèn)題絕不到運(yùn)行階段去浪費(fèi)這個(gè)十分鐘。2.3 中斷里的C寫(xiě)法關(guān)鍵是靜態(tài)分發(fā)中斷服務(wù)函數(shù)本質(zhì)上是C函數(shù)而你希望它最終調(diào)用到一個(gè)C類的成員函數(shù)上這中間需要一層“靜態(tài)分發(fā)”的橋接。最常見(jiàn)的做法是把這個(gè)類設(shè)計(jì)成單例然后用一個(gè)全局C函數(shù)或靜態(tài)成員函數(shù)去調(diào)用單例的方法class Button { public: static Button instance() { static Button inst; return inst; } void init() { HAL_GPIO_EXTI_Callback_Register(handle_, exti_callback_); } static void exti_callback_() { instance().onExti(); } private: void onExti() { // 實(shí)際的中斷處理邏輯 } }; extern C void EXTI0_IRQHandler(void) { Button::exti_callback_(); }這里有幾個(gè)細(xì)節(jié)非常重要extern C必不可少因?yàn)橹袛嘞蛄勘硎荂鏈接方式編譯器會(huì)按C的符號(hào)修飾規(guī)則去查找不加extern C就會(huì)鏈接失敗。instance()里的靜態(tài)局部變量在多線程環(huán)境下有初始化競(jìng)態(tài)問(wèn)題但單片機(jī)裸機(jī)環(huán)境下不存在多線程這招很穩(wěn)。中斷處理函數(shù)里不要做任何耗時(shí)操作比如字符串格式化、阻塞式串口發(fā)送、復(fù)雜的浮點(diǎn)運(yùn)算。正確姿勢(shì)是置一個(gè)標(biāo)志位或者把數(shù)據(jù)塞進(jìn)一個(gè)環(huán)形緩沖區(qū)把重活留給主循環(huán)。為什么因?yàn)镾TM32中斷默認(rèn)是可嵌套搶占的你在中斷里磨嘰太久輕則影響實(shí)時(shí)性重則造成低優(yōu)先級(jí)中斷超時(shí)溢出。2.4 哪些C特性一定要繞開(kāi)走說(shuō)完能用的再說(shuō)說(shuō)絕對(duì)不能碰的。第一是異常。STM32的裸機(jī)C編譯環(huán)境默認(rèn)是-fno-exceptionsGCC工具鏈里開(kāi)啟異常后編譯器會(huì)為每個(gè)可能拋異常的函數(shù)加入大量臺(tái)面代碼異常表和展開(kāi)邏輯對(duì)Flash和RAM都會(huì)產(chǎn)生不可忽視的開(kāi)銷。而且MCU上沒(méi)有操作系統(tǒng)兜底拋出的異常找不到catch就直接進(jìn)terminate最終結(jié)果和死機(jī)沒(méi)有區(qū)別。所以寫(xiě)STM32的C一條原則就是“不開(kāi)異常全用錯(cuò)誤碼”。第二是new和delete。小片SRAM本身就沒(méi)有什么內(nèi)存管理能力動(dòng)態(tài)分配很容易產(chǎn)生碎片而且運(yùn)行一段時(shí)間后不確定的問(wèn)題會(huì)更難排查。真需要變長(zhǎng)數(shù)據(jù)優(yōu)先用固定大小環(huán)形緩沖區(qū)或者簡(jiǎn)單粗暴的靜態(tài)對(duì)象池。需要多少內(nèi)存是可以在設(shè)計(jì)階段規(guī)劃出來(lái)的“動(dòng)態(tài)分配”在這個(gè)場(chǎng)景下不是優(yōu)雅是隱患。第三是虛函數(shù)。虛函數(shù)不是不能用但用的地方要克制——尤其是中斷路徑上的調(diào)用虛函數(shù)會(huì)引入一次間接跳轉(zhuǎn)同時(shí)關(guān)閉編譯器內(nèi)聯(lián)優(yōu)化的可能性。如果繼承深度和分支數(shù)量不多虛函數(shù)問(wèn)題不大但如果一個(gè)設(shè)備樹(shù)復(fù)雜到三四個(gè)繼承層次每次調(diào)用都在閃轉(zhuǎn)騰挪那就要重新評(píng)估設(shè)計(jì)。我在中斷高頻路徑上一般只用模板和編譯期分發(fā)不用虛函數(shù)。我的總結(jié)論是在STM32上用C你該把它當(dāng)“帶類的C”來(lái)用不要把桌面端C那套多態(tài)、智能指針、容器、異常往嵌入式里硬塞?!澳苡谩焙汀斑m合”之間隔著一個(gè)大坑。3. 實(shí)戰(zhàn)一個(gè)外設(shè)驅(qū)動(dòng)定時(shí)器捕獲超聲波測(cè)距3.1 硬件連接與設(shè)計(jì)思路前面聊了不少偏“道”的東西現(xiàn)在上一個(gè)具體的“術(shù)”。超聲波測(cè)距模塊HC-SR04是個(gè)非常經(jīng)典而且適合練手的傳感器它對(duì)理解定時(shí)器輸入捕獲特別有幫助。原理其實(shí)很直白給Trig引腳拉一個(gè)大于10us的高電平觸發(fā)信號(hào)模塊會(huì)發(fā)出8個(gè)40kHz的超聲波脈沖然后Echo引腳輸出一個(gè)高電平高電平持續(xù)時(shí)間就是超聲波從發(fā)射到碰到障礙物返回的總時(shí)間。距離和時(shí)間的對(duì)應(yīng)關(guān)系是距離 (聲速 × 時(shí)間) / 2除以2是因?yàn)槁暡ㄗ吡送祪蓚€(gè)距離。聲速在常溫下大約340m/s。這公式一看就很簡(jiǎn)單但實(shí)際寫(xiě)代碼的時(shí)候有幾個(gè)無(wú)形的坑Echo高電平的最長(zhǎng)時(shí)間約38ms對(duì)應(yīng)大概6.5米量程定時(shí)器計(jì)數(shù)頻率如果太高計(jì)數(shù)值會(huì)溢出太低則測(cè)距分辨率粗糙。我的選擇是讓定時(shí)器跑在84MHzF407的主頻2分頻實(shí)際出過(guò)不錯(cuò)的效果換算公式里再除以84MHz就能從計(jì)數(shù)值得出秒。硬件連接我這樣接超聲波模塊引腳STM32引腳說(shuō)明VCC5V模塊就指望高電壓跑3.3V雖然也能轉(zhuǎn)但精度和穩(wěn)定性都差GNDGND共地TrigPA0普通GPIO輸出EchoPA1定時(shí)器捕獲通道配置為輸入捕獲Echo輸出的是5V電壓而STM32的GPIO耐壓通常不超3.6V。這里推薦加一個(gè)電阻分壓或者一個(gè)二極管鉗位再進(jìn)芯片穩(wěn)妥起見(jiàn)我直接串了個(gè)1K電阻實(shí)測(cè)沒(méi)出過(guò)問(wèn)題但如果你要量產(chǎn)該做電平轉(zhuǎn)換就別省。3.2 驅(qū)動(dòng)封裝與代碼實(shí)現(xiàn)驅(qū)動(dòng)類的思路是構(gòu)造函數(shù)里初始化定時(shí)器為輸入捕獲模式measureDistance()啟動(dòng)一次測(cè)距然后等待捕獲到上升沿和下降沿兩次事件記錄兩者的計(jì)數(shù)值差換算成距離。為了讓代碼可以直接抄我用的是STM32的HAL庫(kù)但核心思路是“庫(kù)無(wú)關(guān)”的你換成寄存器操作也一樣// ultrasonic.h #pragma once #include stm32f4xx_hal.h class Ultrasonic { public: explicit Ultrasonic(TIM_HandleTypeDef* htim, uint32_t channel, GPIO_TypeDef* trig_port, uint16_t trig_pin); void init(); bool measure(float* distance_cm); void onCapture(uint32_t capture_value); private: TIM_HandleTypeDef* htim_; uint32_t channel_; GPIO_TypeDef* trig_port_; uint16_t trig_pin_; volatile uint32_t rise_tick_; volatile uint32_t fall_tick_; volatile bool rising_captured_; };// ultrasonic.cpp #include ultrasonic.h Ultrasonic::Ultrasonic(TIM_HandleTypeDef* htim, uint32_t channel, GPIO_TypeDef* trig_port, uint16_t trig_pin) : htim_(htim), channel_(channel), trig_port_(trig_port), trig_pin_(trig_pin), rise_tick_(0), fall_tick_(0), rising_captured_(false) {} void Ultrasonic::init() { HAL_TIM_IC_Start_IT(htim_, channel_); // trigger pin: output GPIO_InitTypeDef gpio {0}; gpio.Pin trig_pin_; gpio.Mode GPIO_MODE_OUTPUT_PP; gpio.Pull GPIO_NOPULL; HAL_GPIO_Init(trig_port_, gpio); } bool Ultrasonic::measure(float* distance_cm) { rising_captured_ false; HAL_GPIO_WritePin(trig_port_, trig_pin_, GPIO_PIN_SET); delay_us(10); HAL_GPIO_WritePin(trig_port_, trig_pin_, GPIO_PIN_RESET); uint32_t timeout 0; while (!rising_captured_ timeout 50000) { timeout; } if (timeout 50000) return false; timeout 0; while (rising_captured_ (fall_tick_ 0) timeout 50000) { timeout; } if (timeout 50000) return false; uint32_t diff fall_tick_ - rise_tick_; float seconds (float)diff / 84000000.0f; *distance_cm seconds * 340.0f / 2.0f * 100.0f; return true; } void Ultrasonic::onCapture(uint32_t capture_value) { if (!rising_captured_) { rise_tick_ capture_value; rising_captured_ true; } else { fall_tick_ capture_value; } }中斷回調(diào)部分要把捕獲值轉(zhuǎn)發(fā)給類// 在另一個(gè)驅(qū)動(dòng)或者bsp層中 void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef* htim) { static Ultrasonic* inst nullptr; if (inst nullptr) { inst g_ultrasonic; // 全局對(duì)象 } inst-onCapture(HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2)); }這段代碼里我故意留下了兩個(gè)“活口”一個(gè)是全局對(duì)象g_ultrasonic的引用另一個(gè)是捕獲通道在宏里寫(xiě)死了。實(shí)際多人協(xié)作時(shí)要做得更干凈一點(diǎn)讓中斷回調(diào)按照定時(shí)器句柄去查表找到對(duì)應(yīng)對(duì)象而不是靠全局單例。不過(guò)對(duì)我們這種自用項(xiàng)目這樣的程度已經(jīng)能穩(wěn)定跑了。3.3 距離計(jì)算與調(diào)試要點(diǎn)測(cè)距跑起來(lái)之后我第一件事是把數(shù)和尺子量出來(lái)的實(shí)際距離對(duì)一下。下表是我在房間實(shí)測(cè)的一組數(shù)據(jù)實(shí)際距離 (cm)捕獲計(jì)數(shù)值 (tick)換算時(shí)間 (us)計(jì)算距離 (cm)209867117.520.05024691293.950.010049411588.2100.0200987841176.0199.9數(shù)值對(duì)得上說(shuō)明公式和時(shí)鐘配置沒(méi)有本質(zhì)問(wèn)題。但如果你實(shí)測(cè)差了老遠(yuǎn)先從三個(gè)方向查第一定時(shí)器時(shí)鐘到底是不是你算的那個(gè)頻率建議把定時(shí)器時(shí)鐘和PSC/ARR組合列成一張表核對(duì)第二超聲波模塊供電要足夠穩(wěn)VCC直接從板子的5V引腳拉、不要和電機(jī)之類的大電流負(fù)載共享電源軌第三連續(xù)測(cè)量時(shí)相鄰兩次啟動(dòng)間隔不要小于60ms模塊本身超聲余震和Echo線上的殘留電平?jīng)]有完全泄放干凈測(cè)出來(lái)會(huì)飄。另外說(shuō)一個(gè)我踩過(guò)的坑方案選的是上升沿和下降沿兩次捕獲但超聲波模塊的Echo信號(hào)在沒(méi)有障礙物時(shí)可能是一段極窄的毛刺或者干脆沒(méi)有上升沿。所以measure()里的超時(shí)計(jì)數(shù)是必須的不然阻塞在那兒整個(gè)系統(tǒng)就“假死”了。這個(gè)設(shè)計(jì)一開(kāi)始沒(méi)有后來(lái)在幫一個(gè)朋友調(diào)他的遙控小車時(shí)碰到過(guò)兩次才補(bǔ)上了超時(shí)保護(hù)。4. 通信接口的坑與排查實(shí)錄4.1 CAN總線突然連不上的排查路徑有段時(shí)間項(xiàng)目里的CAN通信會(huì)間歇性“失聯(lián)”現(xiàn)象很典型兩個(gè)STM32節(jié)點(diǎn)上電后能正常收發(fā)幾分鐘甚至幾十分鐘然后突然就什么都收不到了重新上電又恢復(fù)。最開(kāi)始我懷疑是代碼bug花了大力氣查報(bào)文過(guò)濾、查中斷處理、查郵箱配置都沒(méi)找到問(wèn)題。后來(lái)一步步捋發(fā)現(xiàn)硬件層面的嫌疑最大。CAN是差分總線CANH和CANL必須各有一個(gè)120歐終端電阻掛在總線兩端。我的板子當(dāng)時(shí)只在一端有終端電阻另一端是空的低速時(shí)候影響還小一旦總線上節(jié)點(diǎn)活躍度高、電平跳變頻繁信號(hào)反射就會(huì)把總線電平搞得面目全非。補(bǔ)上缺失的120歐電阻之后問(wèn)題基本絕跡。給一張排查速查表方便你按順序查現(xiàn)象排查點(diǎn)操作完全連不上CANH/CANL接反用萬(wàn)用表量對(duì)地電壓正常約2.5V/1.5V連上但頻繁錯(cuò)誤終端電阻缺失總線兩端各跨接120歐電阻波特率誤碼兩個(gè)節(jié)點(diǎn)波特率不一致統(tǒng)一初始化參數(shù)時(shí)鐘源誤差要在2%以內(nèi)運(yùn)行中突然失聯(lián)總線關(guān)閉狀態(tài)檢查T(mén)EC錯(cuò)誤計(jì)數(shù)超過(guò)255會(huì)進(jìn)Bus-off數(shù)據(jù)收到但報(bào)錯(cuò)幀多位時(shí)序采樣點(diǎn)不合理調(diào)整BS1/BS2比例推薦采樣點(diǎn)87.5%硬件都正常但收不到過(guò)濾器配置List/ Mask模式誤過(guò)濾先全接收測(cè)試對(duì)了有一個(gè)最簡(jiǎn)單也最容易被忽略的動(dòng)作先把總線上的所有節(jié)點(diǎn)全部斷開(kāi)用一個(gè)節(jié)點(diǎn)自發(fā)自收回環(huán)模式如果自發(fā)自收都失敗那是這一側(cè)的控制器配置問(wèn)題跟總線網(wǎng)絡(luò)無(wú)關(guān)。這一招能快速把排查范圍從“全網(wǎng)”縮小到“本機(jī)”。CAN通信的代碼層面還有一個(gè)很惡心的坑發(fā)送郵箱滿了之后如果你沒(méi)有處理好“等待釋放”的邏輯新的報(bào)文會(huì)直接把舊的覆蓋掉或者一直卡在某個(gè)狀態(tài)里面出不來(lái)。我處理這個(gè)問(wèn)題的思路是給發(fā)送增加超時(shí)和隊(duì)列發(fā)送函數(shù)只往隊(duì)列里丟數(shù)據(jù)真正的發(fā)送放在主循環(huán)里做。這個(gè)思路跟UART的環(huán)形緩沖是一樣的本質(zhì)上都是在生產(chǎn)者和消費(fèi)者之間加一層緩沖池。4.2 STM32做USB設(shè)備的簡(jiǎn)要思路有的朋友想做USB設(shè)備比如把STM32模擬成一個(gè)串口CDC、一個(gè)鍵盤(pán)HID或者一個(gè)自定義HID來(lái)跟PC通信。在選型這一步就要注意不是所有STM32都內(nèi)置USB控制器F103系列有USB 2.0 FullSpeed設(shè)備控制器F4系列要到F405/415以上才有具體還是以型號(hào)數(shù)據(jù)手冊(cè)為準(zhǔn)。做USB設(shè)備的核心不完全是C代碼寫(xiě)得有多漂亮而是把USB枚舉流程吃透。設(shè)備描述符說(shuō)“我是誰(shuí)”配置描述符說(shuō)“我要怎么工作”端點(diǎn)描述符說(shuō)“數(shù)據(jù)從哪個(gè)門(mén)進(jìn)出”這三件套不搞定PC就是無(wú)法識(shí)別設(shè)備。調(diào)試的時(shí)候我比較推薦先用廠商的USB例程把環(huán)境跑通然后用USB分析工具看PC和設(shè)備之間到底握了幾次手、卡在哪一步。如果你是第一次做USB CDC虛擬串口我建議先用STM32CubeMX生成一個(gè)最小CDC工程保證PC能識(shí)別到COM口再把發(fā)送和接收分別放進(jìn)環(huán)形緩沖避免阻塞最后再往里加自己的協(xié)議幀。這個(gè)路線看起來(lái)慢但實(shí)際省時(shí)間因?yàn)閁SB枚舉本身就是個(gè)很容易“卡在半路”的過(guò)程你要是直接在自己的業(yè)務(wù)代碼里debug枚舉會(huì)非常痛苦。之前有人拿USB跑著跑著突然設(shè)備掉線十有八九是總線供電不穩(wěn)或者DP/DM走線太長(zhǎng)跟代碼沒(méi)有直接關(guān)系。4.3 上云基于MQTT接入物聯(lián)網(wǎng)平臺(tái)很多STM32項(xiàng)目做出來(lái)之后都希望數(shù)據(jù)能上報(bào)到云端或者能被遠(yuǎn)程控制。最常用的輕量協(xié)議是MQTT它基于發(fā)布/訂閱模型適合低帶寬場(chǎng)景。STM32這邊需要一個(gè)網(wǎng)絡(luò)通道常見(jiàn)方案是接一塊ESP8266或ESP32模塊走AT指令透?jìng)饕部梢杂肳5500這類以太網(wǎng)芯片直連。MQTT上云的過(guò)程概括起來(lái)就三件事網(wǎng)絡(luò)層打通確保STM32能ping通網(wǎng)關(guān)外的IPMQTT層握手客戶端連接broker訂閱topic發(fā)布消息應(yīng)用層設(shè)計(jì)數(shù)據(jù)格式用什么、上報(bào)頻率多高、離線重連怎么處理。實(shí)際運(yùn)行中有一個(gè)最核心的參數(shù)是心跳包。MQTT協(xié)議里QoS為1的消息發(fā)送后如果broker遲遲沒(méi)有回PUBACK連接狀態(tài)會(huì)變成“假活”。我建議客戶端定期比如30秒發(fā)一個(gè)PINGREQ并重視對(duì)PINGRESP的檢測(cè)連續(xù)幾次沒(méi)等到就主動(dòng)斷開(kāi)重連。另一個(gè)非常容易忽略的點(diǎn)是發(fā)布和訂閱的topic設(shè)計(jì)。如果你的設(shè)備數(shù)量多了topic的命名風(fēng)格直接決定后續(xù)管理是否混亂。我在做過(guò)多設(shè)備接入之后把topic統(tǒng)一成device/{設(shè)備ID}/data和device/{設(shè)備ID}/cmd這種格式后端解析處理非常舒服設(shè)備側(cè)切分字符串也簡(jiǎn)單。不要把多個(gè)業(yè)務(wù)塞進(jìn)一個(gè)大topic然后再在payload里判斷那樣維護(hù)起來(lái)是災(zāi)難。至于云端平臺(tái)各家大同小異創(chuàng)建設(shè)備、拿到密鑰、按文檔把連接參數(shù)填進(jìn)代碼。不要被各種專有名詞唬住絕大多數(shù)平臺(tái)的底層就是MQTT broker換皮不換骨。4.4 屏幕ID讀錯(cuò)與造輪子的邊界有朋友發(fā)來(lái)一個(gè)問(wèn)題ILI9341屏幕用讀ID命令讀出來(lái)的值是0xA1A1不是手冊(cè)上寫(xiě)的0x9341問(wèn)我是不是買到了假屏。這個(gè)問(wèn)題我特意查過(guò)A1A1大概率不是假屏而是讀命令本身沒(méi)走通。ILI9341在SPI模式下和并行模式下讀ID的方式不完全一樣。SPI模式需要先把讀ID的命令字節(jié)發(fā)對(duì)然后還要給個(gè)dummy字節(jié)時(shí)序不對(duì)、或者上電后沒(méi)有等模塊內(nèi)部復(fù)位完成讀回來(lái)的就是默認(rèn)值。這里尤其要檢查上電延時(shí)模塊的復(fù)位引腳拉高后至少要等5ms再發(fā)命令如果你還在用早期的0x93命令建議換成更穩(wěn)的0xD3讀法。這類問(wèn)題的解法有兩條路一是調(diào)時(shí)序把SPI時(shí)鐘極性相位配置成模式0或者模式3具體看模塊手冊(cè)把CS片選信號(hào)拉穩(wěn)二是不求屏幕有多聰明直接跳過(guò)讀ID按ILI9341初始化序列跑一遍只要能點(diǎn)亮能顯色LCD驅(qū)動(dòng)就收工。這個(gè)過(guò)程其實(shí)是“造輪子”還是“用輪子”的一個(gè)經(jīng)典抉擇。我個(gè)人傾向于把讀ID作為調(diào)試輔助手段不做成啟動(dòng)流程的硬依賴不然屏幕上電稍有不穩(wěn)整個(gè)固件就可能掛在這條命令上。5. 嵌入式C工程化的幾個(gè)進(jìn)階習(xí)慣5.1 芯片第一腳與硬件細(xì)節(jié)確認(rèn)別想當(dāng)然有人說(shuō)“芯片第一腳怎么確認(rèn)”這種問(wèn)題太基礎(chǔ)了。但我實(shí)際帶過(guò)項(xiàng)目發(fā)現(xiàn)很多人把第一腳認(rèn)錯(cuò)就是因?yàn)樘氘?dāng)然只記得絲印圓圈忘了芯片正面圓點(diǎn)朝下的排布結(jié)果整個(gè)板子或者調(diào)試器接口全亂套。STM32芯片上一般會(huì)有三個(gè)視覺(jué)標(biāo)識(shí)圓點(diǎn)、斜角缺角、絲印凹槽。圓點(diǎn)確實(shí)對(duì)應(yīng)第一腳但得看清圓點(diǎn)到底離哪個(gè)角最近再配合數(shù)據(jù)手冊(cè)上的pinout圖確認(rèn)不能只憑習(xí)慣。這里我想說(shuō)的是硬件細(xì)節(jié)上面的“想當(dāng)然”會(huì)直接埋下軟件排查的巨坑。芯片第一腳認(rèn)錯(cuò)是一片板子的事而SPI片選極性、CAN終端電阻、晶振負(fù)載電容這種細(xì)節(jié)看似都是硬件工程師的活兒但嵌入式軟件開(kāi)發(fā)者必須會(huì)看原理圖、會(huì)量電壓否則出了問(wèn)題只會(huì)“代碼背鍋”。另外USB的DP/DM線如果沒(méi)做差分等長(zhǎng)處理通信質(zhì)量會(huì)明顯變差。我見(jiàn)過(guò)一個(gè)項(xiàng)目USB枚舉十次有七八次失敗排查到最后是走線把DP拉得太長(zhǎng)跟主控代碼一點(diǎn)關(guān)系都沒(méi)有。嵌入式這行軟硬之間的界限永遠(yuǎn)沒(méi)有你想象的那么清晰。5.2 可復(fù)用驅(qū)動(dòng)的設(shè)計(jì)標(biāo)準(zhǔn)目標(biāo)是“下次不用改”驅(qū)動(dòng)寫(xiě)得好不好有一個(gè)很硬的標(biāo)準(zhǔn)換一塊板子、換一個(gè)芯片型號(hào)驅(qū)動(dòng)代碼能不能做到“只改配置、不改邏輯”。我自己在寫(xiě)驅(qū)動(dòng)前會(huì)先自問(wèn)幾個(gè)問(wèn)題這個(gè)類的構(gòu)造函數(shù)參數(shù)是不是只依賴“引腳號(hào)”“外設(shè)時(shí)鐘頻率”這種抽象資源而不是依賴具體的開(kāi)發(fā)板型號(hào)類的內(nèi)部有沒(méi)有寫(xiě)死某個(gè)全局變量、某個(gè)中斷號(hào)對(duì)外暴露的接口命名是否能讓調(diào)用者不翻源碼就猜到語(yǔ)義我給自己定了一個(gè)簡(jiǎn)單檢查清單每寫(xiě)完一個(gè)驅(qū)動(dòng)就對(duì)照一遍硬件相關(guān)的引腳、時(shí)鐘、中斷號(hào)是否都收在構(gòu)造函數(shù)參數(shù)或者配置結(jié)構(gòu)體里類內(nèi)部不直接調(diào)用其他驅(qū)動(dòng)的靜態(tài)對(duì)象比如Uart::instance().send()每個(gè)公共函數(shù)盡量有返回值或者錯(cuò)誤碼不靠外部變量判斷成功失敗代碼里不出現(xiàn)“過(guò)一會(huì)兒再改回來(lái)”的臨時(shí)分支。這話聽(tīng)起來(lái)很老生常談但真的去檢查的時(shí)候我自己寫(xiě)的老代碼總有不達(dá)標(biāo)的地方。比如早期寫(xiě)的一個(gè)串口驅(qū)動(dòng)發(fā)送函數(shù)里偷偷依賴了一個(gè)全局變量g_uart_busy換板子的時(shí)候忘了改排查了一整天才追到這個(gè)“幽靈依賴”。5.3 從寫(xiě)代碼到架構(gòu)思維的轉(zhuǎn)換最后一個(gè)想聊的是“嵌入式架構(gòu)師”這個(gè)方向。很多人寫(xiě)了三五年STM32發(fā)現(xiàn)始終在一個(gè)水平上打轉(zhuǎn)點(diǎn)燈、驅(qū)動(dòng)、調(diào)試、修bug。想往上拔我覺(jué)得光過(guò)“C語(yǔ)法”這一關(guān)是不夠的更關(guān)鍵的是建立分層思維。一套成熟的嵌入式代碼至少分三層驅(qū)動(dòng)層負(fù)責(zé)和芯片外設(shè)打交道中間件層負(fù)責(zé)協(xié)議棧、文件系統(tǒng)、網(wǎng)絡(luò)服務(wù)這些通用模塊應(yīng)用層負(fù)責(zé)具體業(yè)務(wù)邏輯。每層之間通過(guò)穩(wěn)定的接口通信而不是兩個(gè)模塊之間直接互相調(diào)用全局函數(shù)。以前寫(xiě)代碼經(jīng)常是一個(gè)任務(wù)把ADC采集、濾波、LCD刷新、串口上報(bào)全部塞在一個(gè)while(1)里看著挺順但任何一處改動(dòng)都可能把整塊邏輯帶崩。分層之后每一層的職責(zé)清晰了調(diào)試和復(fù)用都變得非常順暢。狀態(tài)機(jī)也是架構(gòu)思維里繞不開(kāi)的一環(huán)。嵌入式系統(tǒng)天然是事件驅(qū)動(dòng)的用狀態(tài)機(jī)來(lái)表示業(yè)務(wù)邏輯比一長(zhǎng)串if-else要可靠得多。尤其是一個(gè)按鍵要支持單擊、雙擊、長(zhǎng)按一個(gè)通信協(xié)議要處理多種幀狀態(tài)的時(shí)候狀態(tài)機(jī)的優(yōu)勢(shì)是壓倒性的。從“能寫(xiě)代碼”到“能設(shè)計(jì)代碼”的轉(zhuǎn)變有點(diǎn)像從會(huì)炒一盤(pán)菜到能統(tǒng)籌一桌宴席。炒菜拼手感宴席拼的是食材、工序、備菜和風(fēng)險(xiǎn)的提前規(guī)劃。后者才是架構(gòu)師的日常。這個(gè)過(guò)程沒(méi)有捷徑就是寫(xiě)完一個(gè)模塊之后回頭看看問(wèn)自己一句“如果下次換一個(gè)項(xiàng)目這套東西還能留下來(lái)多少”留下來(lái)越多說(shuō)明你的C不是白學(xué)的你的STM32也不是白用的。最后再分享一個(gè)我個(gè)人的編排習(xí)慣所有模塊的頭文件里必須寫(xiě)清“這個(gè)類負(fù)責(zé)什么、不負(fù)責(zé)什么”然后是初始化順序說(shuō)明。有一次接手別人的STM32工程對(duì)方把一堆初始化全塞在main()里沒(méi)有注釋我為了搞清楚哪個(gè)先哪個(gè)后硬是翻了一上午芯片手冊(cè)。從那以后我給自己立了規(guī)矩凡是C類的構(gòu)造函數(shù)要么在名字里體現(xiàn)依賴順序要么在頭文件頂部用注釋寫(xiě)清楚。這點(diǎn)小動(dòng)作看起來(lái)不重要但對(duì)維護(hù)一個(gè)持續(xù)迭代的嵌入式項(xiàng)目來(lái)說(shuō)價(jià)值非常大。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
九九伊人网| 综合伊人激情| 久久精品中文字幕观看| 欧美一区二区三区日韩| 91女在线观看| 欧美韩国你懂得在线| 久久熟女久| 99少妇内射| 翔田千里AⅤHD无码| 大色综合网| 天天色悠悠激情| 蜜臀久久在线视频| 亚洲高清欧美总合| h无码动漫在线观看| 五月丁香影院| 久久亚州大香蕉| 东京热综合久久一区二区 | 国产精品自拍xxxx| 亚洲综合影片| 激情小说亚洲色图| 无码国产精品午夜不卡(| 91中文精品日韩欧美在线| 亚洲有薄码区久久在线一区| 麻豆国产视频精品观看| 欧美性天天影视| 激情视频一二三| 综合亚洲欧美精品日韩?v| 去干网最新版| 精品久久久久久久| 91在线视频免费中出| 久久久久久中文| 男人天堂电影院| 亚洲久热| 大香蕉黄色一级片免费看| 亚洲欧美精品91| 99re28在线观看| 91在线页| 久久亚洲AV无码专区国产精品| 欧美91丝袜| 另类在线| 情趣丝袜无码操逼视频| 麻豆区久久久久亚| 97视频620| 久久午夜鲁丝片| 久操视频免费观看| 午夜寂寞欧美| 黑人精品一区二区在线播放| 草草草草视频| 四虎影视在线| 欧美自拍偷拍免费观看| 操死我了啊啊啊| 在线无码视频| 欧美激情区| 97精品视频免费| 一区二区三区高清天码| 亚洲素人综合| 青青草视频久久久久| 国产乱伦性爱区| 97久久久久久久久久| 狠狠操夜夜操蜜桃视频三区| 中日亚韩免费视频| 国产视频大全| 在线 亚洲 网爆 自拍| 激情小说亚洲| 中文字幕免费在线观看| 东京日日夜夜| 果冻传媒A片麻豆熟妇人妻| 超碰97资源中文字幕| 日韩性爱视频免费在线| 高清孕妇孕交 交| 亚av顶级裸体一区二区三区四区五区 | 九九九热| 91色插| 亚洲综合激情五月久久| 色激情综合网站| 精品免费一区二区三区在线亚洲人成| 久久免费99精品久久久久久| 97资源久久| 色亚州人久干视频在线观看免费版| 久久久草成人网站久久久草成人久久久草久久久 | 99爱久久视频频| 久热在线精品免费观看| 国产剧情在线| 欧美色网络| 超碰偷拍| 欧美激情 亚洲色图| 试看60秒| 97国产超湿| 一,爱啪啪,在线免费视频| 素人伊尹大香蕉免费下载视频| 亚洲另类色图片| 伊人久久88国产女| 啊…啊…操我用力操我| 天天插夜夜操| 久操精品网| 国产又黄又粗的视频| 婷婷综合网| 久久久久久久久999| 欧美一品道| 国产麻豆一区二三区| 99re在线视频国产| 欧美人妻一区二区| 精品无码欧美三级| 蜜臀va69| 色香av| 色97干| 欧美性高潮| 亚洲熟女综合一区二区| 精品无码久久久久久久久果冻糖心 | 精品视频在线观看| 人人贴人人摸| 99综合网| 久久久中文版| 最新9久久久9免费视频| 日韩综合第八区国产精品| 天美传媒精品久久视频| 97se综合| 青青操在线视频| 97超碰超| 夜夜草天天| 久综合国内精品自在自线| 亚洲一卡二卡在线免费| 久久精品无码不卡| 亚洲97在线| 国产综合色精品在线观看| 久久线上视频免费看| 日韩BBN| 欧美在线亚洲| 国产精品乱码久久久久久久久| 色爱亚洲| av一区二区三区四区| 欧美性天天影视| 天天上日日上日韩精品| 国产不卡精品91| 欧美亚洲素人制服精品| A片 AV一级在线播放观看免费| 强奸乱亚洲| 国内91熟女人妻丝袜天天精品视频在线 | 欧美高清16| 51久久夜色精品国产麻豆| 亚洲AV秘 精品久久老牛影视| 亚洲动态色图| 激情专区综合| 日韩9999| 久操精品| 综合自拍| 老鸭窝黄色视频网站| 国产精品乱人伊人网| 欧美人妻色| 精品传媒在线一区| 国产精品色片一区二区| 91天天c| 亚州高清av| 国产激情视频一区区三区| 91日韩| 亚洲国产午夜真人一级片中文字幕精品黄网站| 久久免费中文字幕在线观看| 91n.欧美| 成人精品一区二区91毛片不卡| 亚洲丁香花色| 亚洲天天精品| 少妇三p| 九九热三级片| 亚洲精品日日夜夜52| 一牛影视久久久一区二区三区| 亚洲一区制服诱惑| 2020中文在线一区二区三区| 亚洲日韩AV视色| 啊啊啊啊在线观看网址| 人妻丝袜美腿中文字幕| 超碰人人妻| 变态另类专区| www.色婷婷| 99久草| 人妻-91porn| 欧美亚洲厕所精品偷拍91| 97超碰欧美| 欧美激情总合网| 欧日韩一二三f区| 国产1769在线| 2020中文字幕在线| 久热这里| 韩国三级色呦呦| 黑丝内射一区二区三区| 国产白丝AV| 激情综合色| 婷婷丁香人妻| 丁香五月天激情综合| 欧美色爱综合| 91麻豆天美国产欧美| 亚洲午夜精品久久久中文影院| 久久国内| 日韩小电影| 99爱视频| 日韩欧美大力操| 欧美国产有色电影| 26uuu国产成人综合| 久久久内射良家| 911粉嫩人妻| 蜜臀网址在线| 亚洲AV免费在线观看| 欧美18老人禁| 日韩色图 一区二区| 色婷婷激一区二区三区| 日韩欧美中文字亚洲慕| 日韩三级在线观看mp4| 天天干干天天干干| 97视频免费在线| 丁香五月影院| 天天看精品动漫视频一区| 欧美性区| 99精品热| 精品无码不卡视频| 欧美日韩狠狠爱| 小草三级久久观看| 在线岛| 麻豆天天躁天天揉揉AV| 99热97| 久久精品人人做人人看| 国产精品97超碰| 99丝袜福利在线播放| 国产精品 久久久精品一牛| AV丝袜东京热| 国产精品久久久久绯色| 日韩性爱高清免费视频| 午夜性生活av免费在线看| 日本 免费 一区二区三区 久久香蕉| 自拍视频一区在线观看| 久久在线观看免费视频| 黑人粗大V S日韩女优视频| 五月天婷婷色| 色婷婷电影网| 视频黄色国产一级| 国产精品久久久| 国产精品suv一区| 一区二区偷拍拍视频| 7777奇米影视久久| 97超碰碰| 啊啊啊啊网站| 99色热| 欧美熟女丝袜| 少妇人妻精品| 91久热这里只有精品| 综合久久久久久久综合网| 欧美97色| 久伊人网78| 欧美亚洲影视| 91大胆欧美| www久久99| 91人妻少妇| 久久久久人| 综合网欧| 精品一区二区三区四区外站| 天天综合影院91| 国产精品三级视频网站| 综合欧美日本三级| 十八禁的黄污污免费网站| 欧美少妇色图| 大香蕉中文在线| 5252色欧美在线男人的天堂| 青青草久草AV| 伊人96在线| 99re在线视频国产| 岛国不卡超碰护士AV在线播放| 亚州综合AⅤ| 玖玖爱综合| 国内精品不卡无毒99999| 激情深爱五月天| 久久人妻精品| 天天干天天爽| 久久久蜜桃一区二区三区| 成人午夜视频免费播放| 人妻精品视频一区二区| 欧美视频在线视频免费va| 国产伦乱91| 亚洲砖码砖专无区2023| 女人喷水视频在线观看| www.色综合| 大香蕉黄色一区| 亚洲av乱伦色图网站| 免费综合亚洲中文| 97色干| 婷婷久久久| 国产精品老师| 情侣开房子拍 日韩无码 女的很漂亮| 91美腿丝袜在线观看| 91九九九馒头| 亚洲和欧美裸体美女双飞视频| 欧美日韩亚洲高清不卡一区二区三区| 红桃视频高潮| 欧美精品三区| 久久人| 国产黄色视频久久| 亚洲国产综合图区中文字幕| 婷婷操视频| 日韩操逼HD| 日本网色| 欧美老妇综合网| 久久久久ab| 亚洲宗合网| 91少妇高潮| 欧美天天| 黑人精品成人一区二区三区 | 91艹B视频| 久久高清欧美国产| 免费看美国人人爽,人人操 | 人人操人人舒服| 草草影院日本第一页| 日本国产欧美高清在线| 欧美久久九九| 校园春色综合香蕉| 天天cao在线| 亚洲国产精品有声| 男人的天堂网免费| 97超碰超欧美。| 97国产|免费| 国产兽交视频在线播放| 99re视频在线观看这里只有精品| 色噜噜人妻丝袜AV资源| 97精品免费视频网站| 蜜乳Av成人片网站| 久草久热| 99re视频在线播放青草| 在线无码视频| 又大又长又爽| 亚洲欧美97√| 在线强奷到舒服的无码视频 | 麻豆天美AV传媒第一页| 免费一级黄色录像影片| 亚洲五月丁香花狠狠干一区二区三区| 加勒比AV天堂| 色色色色日本| 天天碰操中国年青熟妇| 亚洲欧美伦综合| 极品尤物女神在线观看| 天堂国产AV| 天天综合青苹果| 家庭乱伦性爱av| 中文字幕加勒比海高清无码免费视频| 亚洲天堂另类| 欧美久久伊人| 无码人妻系列少妇| 欧美日韩不卡a片| 欧美在线官网| 欧美成人性活片| 久久久精品国产亚洲AV无码| 欧洲精品欧洲精品| 欧美成人午夜免费福利785| 九九热超碰97亚洲最新香蕉| 污色区网站| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 久久精品亚洲婷婷| 九九九一二三| 超碰人人在线| 青青草依人大香蕉| 五月丁香成人网| 人人澡人人澡人人| 黄网色一区二区三区四区精品| 九九九九欧美| 8050无码八戒| 99re这里只有精品2| 日本精品无码三级网站| 超碰久久综合| 欧美强奸一区二区诱惑| 欧美一二级| 国产精品久久久久久片| 夜夜夜爽www精品视频| 久精品无码av一区二免费国产在线观看| 精品网站99999| 人人操 欧美| 国产白领连续中出在线观看| 久久日韩精品一区二区| 极品AV网站在线观看| 四虎午夜影院| 超碰精品人妻狠狠干| 日本熟妇人妻中出视频| 国产精品另类| 99国内精品| 在线观看一级α片刺激高潮视频| 青青操在线亚洲视频观看欧美在线| 黄色片A级一区二区三区| 日本东京热大香蕉a片| 日韩无码操逼片| 超碰97导航| 俺去俺来也在线www| 久久久无码精品人妻二区| www.夜夜操| 操逼无码操逼| 国产日韩中文字幕欧美| 67914亚洲精品| 国产午夜福利专区综合| 午夜福利在线合集| 亚洲,欧美,春色,另类| 欧美黄色手机在线观看| 日韩电影免费网站麻豆视频| 欧美图片偷拍| 日本福利二区视频| 国产高清视频无码在线| 色噜噜狠狠色综无码久久| 热久久91婷婷| 六月丁香五月婷婷| 国产精品干干干| 欧美综合1性辶| 亚熟在线| 久久午夜伦| 久久无码一区二区二三区性色| 亚欧美综合网。| 国产欧美日韩在线观看麻豆传媒公司| 国产一区二区三区视频在线看| 91大香蕉伊人| 国产乱码精品久久久久久| 男人的天堂不卡一区二区| 久久久久久亚洲中文| 欧美熟妇精品黑人巨大91| 五月天综合网| 国产欧美日韩女同性恋ww喷水精品 | 福利伊人玖玖国产| 张柏芝国产一区在线观看| 久湿久久| 国产天天看| 国产 日韩 欧美 人妻 熟女 中文| 国产美女销魂在线观看不卡| 亚洲人妻久久| 精品无人区麻豆乱码1区2区图片| 久久亚洲不卡一区二区三区| 天堂亚洲欧美| 日本九九久久99| 97色五月天完| 伊人久久88国产女| 国内毛片无码一级毛片| 久久av成人无码免费| 日韩成人无码| 久久久久国产精品久久久| 97操97干| 少妇九九九九| 日韩欧美蜜桃精品久久中文字幕久久| 91美女視頻| 妇人噜噜| 日韩美女,国产传媒,视频一区| 91色女| 蜜臀久久99精品久久久老,,| 日韩成人精品中文字幕| 玖玖婷婷五月天| 国产精品无码论坛| 91一起操| 五月天激情综合网| 中文高清一区二区的| 91碰碰碰| 国产精品久久发布| 久久久久久久久九九久孕交| 好吊色一区| 黑人中出21连凳花野真衣| 久久久不能久久久久| AV天堂丝袜| 欧美 青青草| 另类av天堂| 日韩电影天堂视频一区二区| 天天草AV| 狠狠躁伊人中文字幕| 久久东京热成人| 五十路三区在线| 黄色大片视频在线免费看| 91欧洲国产成人久久精品网站| 亚州一区二区| 午夜国产成人精品视频| 成人a级高清视频在线观看| 黄色AAAAA欧美| 日韩一级片在线看| 98一区二区精品| 色第一页| 亚洲干B| 天天澡天天爽日日AV| 亚洲 欧美 日韩 国产一区二区| 97超碰人人模人人拍人人| 国产精品分类在线观看| 久草国产在线视频| 九九色热| 中 文字幕一区二区三四 五 区日 日 骚 | 五月婷婷综合在线| 亚洲免费精品一区| 9长久久精品| 日韩电影中文字幕| 亚洲欧美国产中文视频| 日韩探花精品在线视频| 97五月天| 夜夜 中文视频rt| 91n处女在线观看| 偷拍 欧美 日韩| 人人摸人人叼| ai欧美亚洲小说| 97美日韩视频| 国产女人操逼视频| 国产夜夜艹| 日本黄色XXX| 女色综合| 五月天婷婷综合网| 97在线青| J?P?NESEHD熟女熟妇伦| 91人妻Pr| 综合色拍| 操国产逼| 曰韩欧美国产传媒麻豆第一区| 日韩大香蕉精品在线视频| 91爱网| 自拍大香蕉乱插| 久插不卡| 国产免费一区2区3区| 国产懂色精品国产av| 婷婷伊人一区| 五月情色天| 97任你吞精| 神马久久69| 日韩精品在线视频,日韩精品……| 911粉嫩人妻| 狠狠夜色午夜久久综合在线| 操东北女人| 99re在线观看| 日本高清一区二区在线| 三级片大波波| 秋霞一级鲁丝片A片| aⅴ日韩成人电影av在线免费看av大全| WWW4虎| 天堂性色| 这里只有精品视频| 天天综合网在线91| 亚洲欧美日韩夜夜| www.acm成人黄色毛片| 一级岛国大片| 操操操操网黑人| 国产品精品自在在线午夜免费 | 国产女上位好爽在线| AV中文字幕三四五| 日本日皮视频逼| 亚洲精品蜜桃久久久久久久| 蜜乳Av成人片网站| 又摸又舔在线观看网站| 一级AV性爱| 黄色高清久久无码依人| 免费国产电影一区二区| 蜜臀人妻少妇久久在线观看| 大香蕉乱级| 麻豆九九九| 日韩精品在线视频在线观看| 好屌色综合| 免费的很黄很污的全部视频| 亚洲诱惑天堂 | 不卡中文字幕aⅴ在线| 青青草在线成人视频| 超碰97欧美| 天天舔九色婷婷| 95自拍视频在线观看| 蜜屁Av| 国产精品久久久久久 百度| 成人天天爽| 综合五月婷婷| 超碰97人妻免费在线| 伊人久久大香线综合无码| 欧美日韩国产另类综合| 福利大香蕉| 99热思思| 波多野42部无码喷潮在线观看| 四虎在线免费视频| 久久婷五月| 亚洲欧美日韩制服另类| 色哟哟AV| 宅男91视频在线播放| 天天艹天天日| 五月天伊人网| 成熟熟女国产精品一区二区| 久久人妻精品| 精品亚洲国产成人精品| 久久久无码精品人妻二区| 91人妻丝袜无码| 久久久国产亚洲精品系列| 激情在线青青操| 午夜精品久久久久| 草草影院在线视频| 99re公开精品免费视频 | 国模精品娜娜一二三区| 久久国产成人精品国产成人亚洲| 天天干人妻| 亚洲 欧美 天天| 国产一区二区三区白丝| 久久久久久久久久9| 亚洲在高跟鞋自慰久久在色线| 亚洲国产成人高清在线| 免费人成在线观看网站品爱网| 色97欧美| 日本新免费二区三区| 丁香五月av| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 日本孕妇一区二区视频操逼免费看 | 亚洲欧洲日本精品中文a∨| 超碰 国产熟女精品一区| 97青青操视频| www色色色com| 中文字幕狠狠玩| 国产精品福利视频播放| 99无码| 亚洲欧美综合图片| 97天天弄| 夜夜操夜夜爽夜夜高潮| 色色99| 手机看av网站在线看| 欧美18老人禁| 偷拍 欧美 日韩| 91精品91久久久久77777| 婷婷五月花| 男女激情黄色网址| 最新av中文字幕高清| 亚洲综合97| 欧美日韩不卡传媒| 久久精品99久久久久久| 亚洲一本色码中文字幕| 天天综合网91入口| www老逼91| 天天插天天射| AV综合中文字幕干| 日韩国产中文字幕| 操逼视频亚洲| 国产成人精品一区| 老熟女熟妇| 91亚洲不卡一区| oumeisetu综合| 91九色首页| 国产精品又黄又猛又粗| 精品一区二区三区国产 | 3p国产欧美99热| 国产高清精品福利| 熟女视频久久| 伊人久久婷婷| 99无码精品| 91在线欧色| 亚洲欧洲偷拍一区| 91最新综合| 嗯嗯啊啊用力视频免费| 97精彩视频网站| 日韩av三四区| 国产熟女一区二区丰满| 97色爱| ,国产乱人伦精品一区二区三区| 五月婷婷色色| 淫色网综合| 欧美色图天堂网m| 欧美老妇女内射网址| 国产美女激情| 中文字幕av丝袜| 后入式999| 中文字幕乱妇免费视频| 乱操9999| 久久久蜜桃臀无码视频| 欧美色图20p| 懂色中文一区二区三区 | 日本九九久久99播| 极品内射| 亚洲图片偷拍欧美| 啊啊啊好想要| 日韩精品在线观看观看| 大香蕉久操| 精品人妻一二三| 国产真实子伦对白| 入口操逼网站| 日韩国语字幕| 午夜AV污污污| 亚洲综合影院| 曰韩精品视频一区二区| 五月婷婷丁香六月| 97天天综合网| 亚洲资源一区| 久久久久久久久久久免费精品| 欧美成人一区二区三区在线播放| 久久一区二区三区入口| 96AV精品| 欧美综合 站| 97Ai亚洲| 日韩一级片在线看| 青青草视频久久久久| 少妇蹲下买菜露大唇0| 97视频在线播放| 怡红院一区二区熟女人妻| 国产丝袜美女诱惑| 五月天精品| 精品人妻中文字幕4399| 999在线电影香蕉| 97视频在线观看网站| 中国一级αV| 人人射人人操人人摸| 老色69| 老色鬼成人精品视频下载大在线观看| 中文字幕人成乱码熟女香港| 天天干天天干天天干| 99最新日韩偷拍视频| 亚洲AV麻豆Aⅴ无码电影一| 日韩成人大片一区二区| 中国小夫妻勾搭露脸淫荡对白| 欧洲人妻视频| 丁香五月自拍| 98超碰日本| 国产肏逼网站| 嗯嗯啊啊操死我| 久久久精品,3| 色婷婷狠狠18禁| 欧美精品三区| 免费久久一级毛片大黄| 黄页| 午夜一区| 91精品丝袜久久久久久| 欧美顶级黄片AAAAA在线免费看| 91 综合 色| 天天懆天天日| 久久爱超碰网| 日韩人妻一二三区视频| 熟妇人妻一区二区| 在线观看亚洲成人精品| 伊人天堂在线| 精品九九| 香蕉99秘 精品一区丁香| 久操免费在线| 天天综合在线4| 97在线免费看视频| 99999久久久久9国产精品| 天天做天天爱| 日韩久久超碰色| 韩国一级做a久久久久| 伊人五月天| 亚洲日韩电影| 最新欧美色网| 国产精品久久久啊| 婷婷色香| 亚欧无码在线| 91男女| 亚洲人成网www| 青青草久草| 宅男午夜在线视频| 免费一级a毛片久久久久久鸭绿欲| 亚洲熟妇熟在线电影视频| 国产操逼视频在线观看| 色色色色色色色色综合| 亚洲精品日韩国产欧美| 日本三级精品| 欧美78p| 天天激情综合站| 不卡一区视频| 任你草| 男人天堂网址| 校园春色欧美| 99色色网| 99这里只有精品国产| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 操逼操2| 激情综合av| 国产日韩欧美三级片| 欧美超碰97| 欧美激情亚洲情色| 麻豆天美国美国产| 久久成人午夜精品影院| 久久久久久九九九九九| 国产超碰在线一区| 99久久9| 国产高清午夜成人在线观看| www.acm成人黄色毛片| 日本福利社| 久久精品中文字幕观看| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 91丝袜在线视频| 制服乱伦| 尹人免费观看视频在线| 好舒服视频| 大香蕉97久久| 国产毛片久久久久久久| 亚洲激情片| 欧美一区二区三区成人性生活 | 91老熟女91老女人| 99999精品成人| 久久鲁干| 国产三级资源在线观看| 91欧| 老熟妇一区二区三区啪啪| 日韩精品.久久精品.AV女优.天美传媒| 亚洲国产av中文字幕久久| 91丝袜| 大香蕉92| 91精品免费| 麻豆天美制片厂网站视频| 黄污污污污| 日本午夜精品理论片A级APP发布| 国产野战露脸在线播放| 天天看天天日天天操| 大香蕉日亚洲日本亚大 | 12一15性XXXX粉嫩国产| 黄色工厂这里只有精品| 亚洲色图 图片| 九九九久久久久| 国产精品国产自产拍高清AV| 亚洲日本加勒比在线| 激情五月天社区| 一区二区高清视频| 中文字幕乱亚洲美女精品一区| 高清不卡 中文 人妻| h色99999| 秋霞一区二区三区四区五区六区七区| 亚洲熟女综合| 色色色色色色色色色色色色色色综合| 欧美激情综合色综合啪啪五月| 九九综合久久| 九九aV| 免费看一级a性色生活片久久无| 国产野战露脸在线播放| 免费观看性欧美一级| 91夜色| 亚洲一区操| 极品销魂美女一区二区| 日本精品中文字幕视频| 天天看夜夜看日日干| 五月丁香六月综合缴清无码 | 亚洲国产精品久久AV| 日日夜夜摸| 久久大黄片| 久久性爱视频免费看| 亚洲综合第一页| 91视频伊人| 亚洲激情综合另类男同| 日日操丁香五月天| 户外裸露刺激视频第一区| 97人人操人人摸人人爱| 黄网色一区二区三区四区精品| 亚洲蜜桃V妇女| 成人 日韩欧美一区| 天天日天天舔| av午夜玫瑰| 欧美色图人妻| 另类欧美色| 精品九九九九| 人干人人人操人人摸| 蜜乳性色无码专日粉嫩骚逼AV| 亚洲超碰在线| 国产玖玖| 天天综合网1| 91美女国产在线| 啊啊啊好多水| 丁香九月 婷婷| 激情五月丁香五月| 密臀在线免费观看| 久久久久久裸体| 久久9免费视频| 亚洲欧美校园| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 欧美少妇高潮| 少妇久久久| 综合久久久久久久综合网| 亚洲强奸乱伦影视网| 色噜噜综合在线| 啊好爽快点-国产一区二区三区撒尿在线-成人AV | 国产高潮AA片免费看| 成人贴图日韩欧美| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 婷婷五月天色色| 91肏屄网| 午夜美女诱惑电源网| 韩国一级做a久久久久| 免费在线观看国内色片网站网址| 久久婷婷五月天| 亚洲欧美在线综合| 国语精品对白| 亚洲精品a人片在线观看视| 一区二区三区在线资源| 走光一区92下载| 97chaopenrihan| 亚洲一区二区三区在线激情| 91一起操| 四虎AV影视国产精品亚洲精品| 五月天婷婷社区| 日本高清视频xxxx| 人妻天天夜夜爽一区二区| 99黄页网站| 亚洲欧美国产va在线播放频| 丝袜美腿制服人妻二区中文字幕| 怡红院怡春院| 小电影欧美91| 中文字幕精品一区二区精| 69超碰综合| 亚洲天在线| 中国一级特黄大片护士| 夜夜高潮夜夜爽| 九久久精| 狠狠综合| 国产精品第一页国产大屁股视频免费区i| 韩国免费播放一级毛片| 99热综合| 天天欧美| 特级丰满少妇一级AAAA爱毛片| 欧美中文狠| 欧美亚洲天堂| 人妻精品综合中文字幕在线| 欧洲一区二区| 色婷婷香蕉| 午夜AV污污污| 91成人在线免费视频| 丝袜无码a片| 性爱视频无打码在线观看| 搡老女人老91二区| 国产亚洲中文不卡二区| 哈哈操电影AV| 欧美人人曰人人操人人射射| 亚洲男人的天堂V| 久久无码精品| 伊人色综合超碰| 人人摸人人入| 吉田爱美AV在线| 狠狠91| 日日天天久久啊啊aaa| 亚洲天堂欧美| 天天综合香 ld视频| 国产一级内射高清视频| 亚洲欧美色综合| 日韩三级在线观看网站| 蜜臀久久在线视频| 欧美亚洲色图另类国产| 劲爆欧美人妖三区91| 国产成人一级av88| 国产精品69久久久久孕妇欧美| 免费观看的黄色的网站| 97精品一区二区视频在线观看| 欧美日韩精品一区二区三区高清| 日日日大屁股骚女人精品| 在线国产一区二区av| 少妇蹲下买菜露大唇0| 色九九综合| 欧美懂色综合网| 欧美一区二区传媒| 欧美日韩黄片精品在线| 懂色av中文字幕一区二区三区天美| 欧美成人四级在线播放| 欧洲一区二区三区四区在线观看| 亚欧高清在线| 视频一区二区免费在线| 亚洲男人的天堂一区二区| 国产精品999zyz| 伊人少妇久久久| 成年女人一区| 亚乱色| 青青青青青手机视频| 性色高清在线| 久久九九国产精品| 网友自拍第一页| 欧美亚洲第1页| 亚洲精品中文字幕一区在线视频| 色吊丝 日日骚 清纯唯美| 涩爱AV在线| 国产精品久久久久久久黄无码| 91精品网站| 成人资源中文字幕在线观看天天 | 国产av白丝| 尤物av网站免费在线播放| 91影视亚洲| 色播五月丁香| 欧美性爱日韩性爱| 欧美热图99| 色官网色综合| 中出欧美| rivers-china.com| 中文字幕视频一区视频二区| 综合 欧美 亚洲 日本| 97久久国产| 久久久久921| 欧美性色综合网| 爱做久久久久久| 岛国激情视频软件| 黑人性欧美| 日韩一级二级三级免费看完整版国语版 | 九九热男人天堂| 国产成人无码啪| 亚洲综合电影| 中文字幕国产| 久久中文字幕女同性恋一区| 久久伊人网视频一区二区三区 | 91N综合网| 伊人 俄罗斯 a v| 大香蕉伊人一区在线观看| 亚洲一区二区精品福利| 国产欧美精选激情视频| 精品高潮| 天天拍夜夜| 久久人妻无码毛片A片麻豆| 91麻豆天美传媒HD| 男人兔费天堂| 婷婷五月天网| 五月丁香啪啪啪| 搡老人老9丨女老熟人| 欧洲欧美视频一区二区| 99热婷婷一区二区三| 超碰欧美97资源| 传媒免费一区二区三区| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 女性91网站| 高清无码学生妹高潮| 亚洲97p| 国产SV一线| 久久极品伊人| 大香蕉人妻| 能看的av| 狠狠爱综合网| 国产精品免费视频不卡| 国产一区二区在线电影| 超97在线精品视频| 秋霞免费AV| 无码精品一区二区三区潘金莲| 嫩草影院性色| 亚洲欧美日韩精品久久久一区二区| 人妻一二三区| 国产免a费看黄片在线| 黑人美精品 A片| 国产一区二区精品久久99| 成人免费看吃奶视频网站| 高潮毛片无遮挡高清免费| 三级AV入口| 97干天天| 精人妻无码一区二区三区伊人直播 | 一二三四区电影| 午夜福利一区二区三区四区五区色婷婷| 91碰碰| 日本国产二线女色| 一区二区三区高清| 成人午夜高潮av猛片| 乱性AV| 色婷婷视频| 岛园激情| 久久亚洲影院一区二区| 欧美78p| 亚洲另类久操网| 96国产污污污丝袜| 操逼无毒无码免费视频| 男人综合网| 国产精品99999| 小日子操bb在线看| 欧美特大黄一级片片免费| 日韩一区二区三区四区五区| 淫妻综合网| WWW4虎| 少妇高潮喷水无套久久久久久| 欧美丝袜中文字幕07在线| 熟女熟妇伦久久影院毛片一区二区| 加勒比综合88| 影音先锋少妇| 日韩精品永久在线观看| 嗯啊啊啊轻点视频| 中国小夫妻勾搭露脸淫荡对白| 国产一区二区在线看| 亚洲中字幕日本一区二区三区| 国产AV色黄看到爽| 一起草av| 少妇毛片久久| 国内毛片四区| 久久中文字幕一区不卡| 黄色大香焦1级‘′‘| 色妺妺在线视频| 欧美日韩婷婷中文| 97在线免费看视频| 欧美人与性动交a美精品| 久久草大香蕉| 男人的天堂久久狠| 麻豆91熟妇人妻中文字幕茄子| 国产精品人人爽人人做可爱福利| 色婷婷99| 97久久久精品| 亚洲精品99999| 岛国视频免费在线观看| 欧美色九九九| 久久久久国色αv免费观看| 99久久久无码国产精品性啊聊| 亚洲欧美中文日韩视频中国语| 91人妻视频在线| 色综合天天爱去电影网| 欧美亚洲另类在线蜜桃| 狠狠中文字幕| 超碰九九| 人人操人人操草草| 久久一区无码| 亚州男人天堂| 性色av网站| 久草在| 久久久精品91八戒| 亚洲天堂区| 校园春色美腿丝袜 | 2017天天插| 无码精品人妻一区二区三区妖精| 操香逼| 日韩激情电影中文字幕| 婷婷久久综合| 亚洲激情在线| 99久久婷婷国产综合精品草原| www.男人天堂| 日韩亚洲国产视频| 中文字幕片| 麻豆视频国产一区二区| 一本色道综合久久欧美| 五月花婷婷| 国产99热| 搡老女人老妇女老妇老熟女怎么读| 亚91网| 九九九九九九九精品视频| 97久久久久久久久久| 欧美日韩第一页| 日韩BBN| 成人三级片无码| 亚洲第一视频 欧美风情 日韩| www网站黄| 熟女熟妇伦久久影院毛片一区二区 | 69少妇一区二区| 中文字幕97色| 亚洲日韩精品久久久久一区壹牛 | 天天日天天插| 夜夜爽夜夜操| 麻豆国产尤物AV| 99无码狠狠久久| 久久內射| 97天堂| 亚洲欧美九九九| 中文字幕一区二区三区高清| 久久国产对白激情浪潮 | 天天日少妇逼AV| 欧美色图色综合| 毛片电影一区二区三区| 久久久91| 熟妇视频一区二区三区在线观看| 国产精品久久久啊| 99在线观看无大码| 亚洲成人久久一区二区| 91碰碰| 国产一二三在线视频五十路| 欧美91精品国产自产| 天堂性色| 欧美色综合网| 欧美另类精品xxxx| 久久亚码| 9118禁| 人人摸.人人色| 网页导航五月天免费一二三区| 97精品97| 福利伊人玖玖国产| 强奸乱亚洲| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 蜜臀无码一区二区| 91无码人妻| 亚欧高清在线| 91n.欧美| 亚洲色堂免费视频| 二男一女成人A片| 免费视频观看60秒| 色嘟嘟人妻天堂网| 人人看人人爰人人操| 漂亮人妻被强中文字幕hd| 激情综合网激情五月天| 中文字幕精品免费一区二区| 97精品在线| 五月综合久久| 伊人久久在线视频观看| 97Ai亚洲| 97欧美色资源| 国产欧美伊人|