日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RT-Thread学习

發(fā)布時間:2024/3/26 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RT-Thread学习 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、入門

RT-Thread官網(wǎng)  官網(wǎng)文檔   Rt-thread學(xué)習(xí)文檔 
RT-Thread官方bilibili視頻號   GD32官網(wǎng)
教你動手移植RT-Thread到國產(chǎn)MCU    如何移植RT-Thread到GD32單片機上(非studio版)
東方青講RT-Thread  RT-Thread內(nèi)核入門指南
RT-Thread Studio 教程
rtthread移植
野火rt-thread教程
RT-Thread-學(xué)習(xí)分析(詳細版)huawei
RT-Thread-學(xué)習(xí)分析(詳細版)csdn

二、啟動流程

RT-THREAD 自動初始化詳解
RT-Thread啟動流程詳解(硬件初始化篇)
RT-Thread的各種硬件、線程初始化過程
STM32 RT-Thread 系統(tǒng)分析(1)- 啟動文件
RT-Thread學(xué)習(xí)筆記 --(1)RT-Thread開發(fā)環(huán)境搭建
RT-Thread學(xué)習(xí)筆記 --(2)RT-Thread啟動過程分析
RT-Thread學(xué)習(xí)筆記 --(3)RT-Thread自動初始化機制分析
RT-Thread學(xué)習(xí)筆記 --(4)RT-Thread多線程學(xué)習(xí)總結(jié)
RT-Thread學(xué)習(xí)筆記 --(5)RT-Thread線程間同步學(xué)習(xí)總結(jié)
RT-Thread學(xué)習(xí)筆記 --(6)RT-Thread線程間通信學(xué)習(xí)總結(jié)
RT-Thread學(xué)習(xí)筆記 --(7)RT-Thread中斷管理學(xué)習(xí)總結(jié)
RT-Thread學(xué)習(xí)筆記 --(8)RT-Thread時鐘管理學(xué)習(xí)總結(jié)
RT-Thread學(xué)習(xí)筆記 --(9)RT-Thread內(nèi)存管理學(xué)習(xí)總結(jié)
RT-Thread INIT_BOARD_EXPORT無效或進入不了導(dǎo)出的函數(shù)
進入這個界面,下面藍色部分請?zhí)砑?#xff1a;–keep .o(.rti_fn.)

RT-Thread的自動初始化依賴宏開關(guān):RT_USING_COMPONENTS_INIT,分為6個等級,可以查看rtdef.h文件
使用INIT_APP_EXPORT(led_init)宏,初始化函數(shù)就會被自動初始化,不用在其他地方顯式調(diào)用 led_init() 。

/* board init routines will be called in board_init() function */ #define INIT_BOARD_EXPORT(fn) INIT_EXPORT(fn, "1")/* pre/device/component/env/app init routines will be called in init_thread */ /* components pre-initialization (pure software initilization) */ #define INIT_PREV_EXPORT(fn) INIT_EXPORT(fn, "2") /* device initialization */ #define INIT_DEVICE_EXPORT(fn) INIT_EXPORT(fn, "3") /* components initialization (dfs, lwip, ...) */ #define INIT_COMPONENT_EXPORT(fn) INIT_EXPORT(fn, "4") /* environment initialization (mount disk, ...) */ #define INIT_ENV_EXPORT(fn) INIT_EXPORT(fn, "5") /* appliation initialization (rtgui application etc ...) */ #define INIT_APP_EXPORT(fn) INIT_EXPORT(fn, "6") INIT_BOARD_EXPORT(key_gpio_init); /* 先執(zhí)行 01 */ INIT_BOARD_EXPORT(drv_pm_hw_init); /* 02 */ INIT_BOARD_EXPORT(rt_hw_rtc_init); /* 03 */


  • rtthread_startup() 函數(shù)是 RT-Thread 規(guī)定的統(tǒng)一啟動入口。啟動調(diào)度器之前,系統(tǒng)所創(chuàng)建的線程在執(zhí)行 rt_thread_startup() 后并不會立馬運行,它們會處于就緒狀態(tài)等待系統(tǒng)調(diào)度。MDK 的擴展功能 SubSubSub$ 和 SuperSuperSuper$。
  • startup_stm32f103xe.s 開始-> components.c
    根據(jù)宏跳轉(zhuǎn)到對應(yīng)函數(shù),如MDK: int SubSubSub$main(void) ->int rtthread_startup(void)
    rtthread_startup:關(guān)閉中斷 ->板級初始化 -> 打印版本信息-> 定時器初始化->調(diào)度器初始化 -> 信號初始化->創(chuàng)建初始化線程(main線程) -> 定時器線程初始化 -> 空閑線程初始化->啟動調(diào)度器。

三、串口相關(guān)

RT thread 設(shè)備驅(qū)動組件之USART設(shè)備
Rtthread之串口初始化流程分析

rtthread串口接收不定長數(shù)據(jù)

四、finsh相關(guān)

剖析RT-Thread中console與finsh組件實現(xiàn)(1)
剖析RT-Thread中console與finsh組件實現(xiàn)(2)
剖析RT-Thread中console與finsh組件實現(xiàn)(3)

五、線程

5.1 線程使用

動態(tài)方法:rt_thread_create();rt_thread_delete(); 靜態(tài)方法:rt_thread_init();rt_thread_detach();真正開始運行多任務(wù) rt_thread_startup(tid)

線程追尋函數(shù)原型:

靜態(tài): rt_err_t rt_thread_init(struct rt_thread *thread,const char *name,void (*entry)(void *parameter),void *parameter,void *stack_start,rt_uint32_t stack_size,rt_uint8_t priority,rt_uint32_t tick); 動態(tài): rt_thread_t rt_thread_create(const char *name,void (*entry)(void *parameter),void *parameter,rt_uint32_t stack_size,rt_uint8_t priority,rt_uint32_t tick);

系統(tǒng)自帶的線程創(chuàng)建實例:

void rt_application_init(void) {rt_thread_t tid; #ifdef RT_USING_HEAPtid = rt_thread_create("main", main_thread_entry, RT_NULL,RT_MAIN_THREAD_STACK_SIZE, RT_MAIN_THREAD_PRIORITY, 20);RT_ASSERT(tid != RT_NULL); #elsert_err_t result;tid = &main_thread;result = rt_thread_init(tid, "main", main_thread_entry, RT_NULL,main_stack, sizeof(main_stack), RT_MAIN_THREAD_PRIORITY, 20);RT_ASSERT(result == RT_EOK);/* if not define RT_USING_HEAP, using to eliminate the warning */(void)result; #endifrt_thread_startup(tid); }

靜態(tài)創(chuàng)建實例:

/* 變量分配4字節(jié)對齊 */ ALIGN(RT_ALIGN_SIZE) /* 靜態(tài)線程的 線程堆棧*/ static rt_uint8_t led_stack[512]; /* 靜態(tài)線程的 線程控制塊 */ static struct rt_thread led_thread;static void led_thread_entry(void *parameter) {while(1){rt_thread_delay(RT_TICK_PER_SECOND / 2);} ]rt_err_t result;result = rt_thread_init(&led_thread, "led", led_thread_entry, RT_NULL,(rt_uint8_t *)&led_stack[0], sizeof(led_stack), 2, 5); if(result==RT_EOK) {rt_thread_startup(&main_thread); }

動態(tài)創(chuàng)建實例:

static void dynamic_thread_entry(void* parameter);/* 動態(tài)線程的 線程控制塊指針 */ rt_thread_t led2_thread; /* 創(chuàng)建動態(tài)線程 : 堆棧大小512 bytes ,優(yōu)先級 21 ,時間片 2個系統(tǒng)滴答 */ led2_thread = rt_thread_create("led2", dynamic_thread_entry, RT_NULL, 512, 21,2); if (led2_thread != RT_NULL)rt_thread_startup(led2_thread);

官網(wǎng)給的實例:

static struct rt_thread thread1; static rt_uint8_t thread1_stack[512];/* 線程 1 入口 */ void thread1_entry(void* parameter) {int i;while (1){for (i = 0; i < 10; i ++){rt_kprintf("%d\n", i);/* 延時 100ms */rt_thread_mdelay(100);}} }/* 線程 2 入口 */ void thread2_entry(void* parameter) {int count = 0;while (1){rt_kprintf("Thread2 count:%d\n", ++count);/* 延時 50ms */rt_thread_mdelay(50);} }/* 線程例程初始化 */ int thread_sample_init() {rt_thread_t thread2_ptr;rt_err_t result;/* 初始化線程 1 *//* 線程的入口是 thread1_entry,參數(shù)是 RT_NULL* 線程棧是 thread1_stack* 優(yōu)先級是 200,時間片是 10 個 OS Tick*/result = rt_thread_init(&thread1,"thread1",thread1_entry, RT_NULL,&thread1_stack[0], sizeof(thread1_stack),200, 10);/* 啟動線程 */if (result == RT_EOK) rt_thread_startup(&thread1);/* 創(chuàng)建線程 2 *//* 線程的入口是 thread2_entry, 參數(shù)是 RT_NULL* 棧空間是 512,優(yōu)先級是 250,時間片是 25 個 OS Tick*/thread2_ptr = rt_thread_create("thread2",thread2_entry, RT_NULL,512, 250, 25);/* 啟動線程 */if (thread2_ptr != RT_NULL) rt_thread_startup(thread2_ptr);return 0; }

5.2 線程同步

5.2.1 信號量

信號量使用

六、網(wǎng)絡(luò)通信

SAL:(套接字抽象層)、 Socket Adapter Layer、Socket Abstraction Layer
rt-thread之網(wǎng)絡(luò)設(shè)備與BSD套接字組件
rt-thread示例代碼(TCP/UDP)

啟用 BSD Socket 的方法是在 env 中輸入 menuconfig,找到 SAL 組件,再選擇使用 BSD Socket 接口。 各選項順序: RT-Thread Components —-> Network —-> Socket abstraction layer —-> Enable BSD socket operated by file system API

七、Kconfig語法

kconfig常用語法,入門必看
Kconfig 語法分析詳解

7.1 config條目

config TMPFS_POSIX_ACLbool “Tmpfs POSIX Access Control Lists”depends on TMPFSselect GENERIC_ACLhelpPOSIX Access Control Lists (ACLs) support permissions for users and groups beyond the owner/group/world scheme.
  • config是關(guān)鍵字,表示一個配置選項的開始;緊跟著的TMPFS_POSIX_ACL是配置選項的名稱,省略了前綴"CONFIG_"
  • bool表示變量類型,即"CONFIG_ TMPFS_POSIX_ACL "的類型,有5種類型:bool、tristate、string、hex和int,其中tristate和string是基本的類型
    bool變量的值: y和n
    tristate變量的值:y、n和m
    string變量的值: 字符串
  • bool之后的字符串“Tmpfs POSIX Access Control Lists”是提示信息(在上面的配置界面中就是通過它來識別CONFIG_TMPFS_POSIX_ACL),在配置界面中上下移動光標選中它時,就可以通過按空格或回車鍵來設(shè)置CONFIG_ TMPFS_POSIX_ACL的值(即選擇了哪個值就會把該值賦值給CONFIG_TMPFS_POSIX_ACL)
  • depends on:表示依賴于XXX,“depends on TMPFS”表示只有當TMPFS配置選項被選中時,當前配置選項的提示信息才會出現(xiàn),才能設(shè)置當前配置選項
  • select:是反向依賴關(guān)系的意思,即當前配置選項被選中,則GENERIC_ACL就會被選中。

7.2 menu

用于生成菜單名

menu "Floating point emulation"config FPE_NWFPE..............config FPE_NWFPE_XP............. endmenu

7.3 choice條目

choice條目將多個類似的配置選項組合在一起,供用戶單選或多選,這不同于menu條目

choiceprompt "soc x1000 codec type select"depends on SOC_X1000 config SND_ASOC_INGENIC_PHOENIX_ICDCtristate "Audio support for phoenix with internal codec"select SND_ASOC_DMA_V13select SND_ASOC_JZ_AIC_I2S_V13select SND_ASOC_JZ_ICDC_D3#select SND_ASOC_JZ_PCM_V13#select SND_ASOC_FIIO_PCM5242config SND_ASOC_INGENIC_PHOENIX_SPDIFtristate "Audio support for phoenix with spdif"select SND_ASOC_DMA_V13select SND_ASOC_JZ_AIC_SPDIF_V13select SND_ASOC_JZ_SPDIF_V13#select SND_ASOC_JZ_PCM_V13endchoice

7.4 comment條目

顯示注釋信息

menu “Floating point emulation” comment “At least one emulation must be selected” config FPE_NWFPE ... config FPE_NWFPE_XP endmenu

7.5 rt-thread中的Kconfig示例

mainmenu "RT-Thread Configuration"config $BSP_DIRstringoption env="BSP_ROOT"default "."config $RTT_DIRstringoption env="RTT_ROOT"default "../../rt-thread"# you can change the RTT_ROOT default "../.." to your rtthread_root, # example : default "F:/git_repositories/rt-thread"config $PKGS_DIRstringoption env="PKGS_ROOT"default "packages"config $ENV_DIRstringoption env="ENV_ROOT"default "/"source "$RTT_DIR/Kconfig" source "$PKGS_DIR/Kconfig" source "$BSP_DIR/../../drivers/Kconfig" source "$BSP_DIR/../../libraries/Kconfig" menu "RT-Thread Kernel"config RT_NAME_MAXint "The maximal size of kernel object name"range 2 32default 8helpEach kernel object, such as thread, timer, semaphore etc, has a name,the RT_NAME_MAX is the maximal size of this object name.config RT_USING_SMPbool "Enable SMP(Symmetric multiprocessing)"default nhelpThis option should be selected by machines which have an SMP-capable CPU.The only effect of this option is to make the SMP-relatedoptions available to the user for configuration.# 太長了,省略。。。endmenu config LCD_TRULY_TFT240240_2_E tristate "SLCD TRULY TFT240240-2-E with control IC st7789s (240x240)"depends on BACKLIGHT_CLASS_DEVICEdefault n

7.6 使用對照

1、config

//Kconfig中: config BSP_USING_WDTbool "Enable Watchdog Timer"select RT_USING_WDTdefault nconfig RT_CONSOLE_DEVICE_NAMEstring "the device name for console"default "uart1"config BSP_I2C1_SCL_PINint "I2C1 scl pin number"range 1 176default 116//rtconfig.h中: #define BSP_USING_WDT #define RT_USING_WDT#define RT_CONSOLE_DEVICE_NAME "uart1" #define BSP_I2C1_SCL_PIN 116

2、menu

menu "Hardware Drivers Config"config BSP_USING_COM2bool "Enable COM2 (uart2 pin conflict with Ethernet and PWM)"select BSP_USING_UARTselect BSP_USING_UART2default nconfig BSP_USING_COM3bool "Enable COM3 (uart3 pin conflict with Ethernet)"select BSP_USING_UART3default n endmenu

3、if/endif

menu "Hardware Drivers Config"menuconfig BSP_USING_CANbool "Enable CAN"default nselect RT_USING_CANif BSP_USING_CANconfig BSP_USING_CAN1bool "Enable CAN1"default nendif endmenu

4、menuconfig

menu "Hardware Drivers Config"menuconfig BSP_USING_UARTbool "Enable UART"default yselect RT_USING_SERIALif BSP_USING_UARTconfig BSP_USING_UART1bool "Enable UART1"default yconfig BSP_UART1_RX_USING_DMAbool "Enable UART1 RX DMA"depends on BSP_USING_UART1 && RT_SERIAL_USING_DMAdefault nendif endmenu

5、choice

menu "Hardware Drivers Config"menuconfig BSP_USING_ONCHIP_RTCbool "Enable RTC"select RT_USING_RTCselect RT_USING_LIBCdefault nif BSP_USING_ONCHIP_RTCchoiceprompt "Select clock source"default BSP_RTC_USING_LSEconfig BSP_RTC_USING_LSEbool "RTC USING LSE"config BSP_RTC_USING_LSIbool "RTC USING LSI"endchoiceendif endmenu

8. env配置

Env官方文檔
Env工程配置

8.1 環(huán)境配置

在env目錄中運行env.exe或env.bat,右擊標題欄->settings->Intergration->點擊上半部分的register->save settings.
在bsp/stm32f407工程目錄下右鍵->ConEmeu_here,進入當前目錄的env控制臺

8.2 env配置項目(menuconfig)

拷貝/env/sample/Kconfig文件拷貝至工程目錄,修改"RTT_ROOT"路徑,才能使用menuconfig。

config BSP_DIRstringoption env="BSP_ROOT"default "."config RTT_DIRstringoption env="RTT_ROOT"default "./rt-thread"# you can change the RTT_ROOT default "rt-thread" # example : default "F:/git_repositories/rt-thread" # default: "../../"

工程目錄打開env,輸入menuconfig(>rtthread3.0),最終配置修改rtconfig.h內(nèi)容。
項目的配置保存在:.config文件中,而后根據(jù).config內(nèi)容重新生成rtconfig.h內(nèi)容。

scons --genconfig #根據(jù) rtconfig.h 逆向生成 .config

8.3 生成mdk5工程(scons)

scons通過讀取rtconfig.h文件配置成mdk5、mdk4、iar工程并編譯。
進入bsp目錄下對應(yīng)工程目錄下,刪除原有的project.eww、project.uvproj、project.uvprojx三個文件,在當前目錄中打開env,輸入:

scons --target=mdk5 #根據(jù)rtconfig.h生成project.uvprojx工程文件 scons #采用自帶gcc編譯

8.4 軟件包管理(pkgs)

官網(wǎng)軟件包 https://github.com/RT-Thread-packages
工程目錄打開env->menuconfig->RT-Thread online packages按空格鍵選中所需軟件包

pkgs --update #更新軟件包(需要安裝git) scons --targer=mdk5 #重新生成mdk5工程

(5)env設(shè)置

menuconifg -s #進入Env config可配置自動更新軟件包、自動生成工程

9. 工程實踐

9.1 GD32450IIH6上移植

RT-Thread-國產(chǎn)MCU移植系列教程匯總
(1)視頻版1(沒成功)
高手版:如何移植RT-Thread到GD32單片機上(非studio版)

  • (1)復(fù)制/rtthread/bsp目錄下一個相近工程。
  • (2)修改gd32_rom.sct中的內(nèi)存和flash的大小。
  • (3)修改template.uvprojx中的工程名和芯片型號等。
  • (4)替換/Library下的CMSIS、GD32F4xx_standard_peripheral、GD32F4xx_usb_driver,并修改/Libraries目錄下的SConscript文件,將其中的目錄進行替換、CPPDEFINES、.c文件、啟動文件等。
  • (5)修改/drivers下的驅(qū)動,并修改board.h中的GD32_SRAM_SIZE改成實際大小(KB)
  • (6)修改工程目錄下的Kconfig文件,
  • (7)menuconfig修改系統(tǒng)配置,并用scons --targer=mdk5生成mdk工程。
  • (8)編譯修改錯誤。

(2)文檔版(成功)
GD32F405VG 移植RTT
手工向GD32F450移植RT-Thread內(nèi)核
綜合了上面兩篇文章,框架用了第1個,調(diào)試始終卡在main線程的動態(tài)生成那里,考慮是椎的配置有問題,開始以為是大小的配置,后來在受第2篇文章啟發(fā),查看board.c中的rt_hw_board_init中對堆的初始化,決定不使用外部SDRAM,將rtconfig.h中的#define BSP_USING_SDRAM注釋掉。
(或者是把Kconfig中的注掉,其實用snv生成后,也是轉(zhuǎn)成rhconfig.h中的定義)

//Kconfig中關(guān)于使用SDRAM的定義注掉 config BSP_USING_SDRAMbool "Using sdram"default y //board.c中關(guān)于堆初始化的兩種方式選擇(SDRAM、SRAM) void rt_hw_board_init() {/* NVIC Configuration */ #define NVIC_VTOR_MASK 0x3FFFFF80 #ifdef VECT_TAB_RAM/* Set the Vector Table base location at 0x10000000 */SCB->VTOR = (0x10000000 & NVIC_VTOR_MASK); #else /* VECT_TAB_FLASH *//* Set the Vector Table base location at 0x08000000 */SCB->VTOR = (0x08000000 & NVIC_VTOR_MASK); #endifSystemClock_Config();#ifdef RT_USING_COMPONENTS_INITrt_components_board_init(); #endif#ifdef RT_USING_CONSOLErt_console_set_device(RT_CONSOLE_DEVICE_NAME); #endif#ifdef BSP_USING_SDRAMrt_system_heap_init((void *)EXT_SDRAM_BEGIN, (void *)EXT_SDRAM_END); //用SDRAM沒成功 #elsert_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); //用SRAM成功了 #endif } #ifndef __BOARD_H__ #define __BOARD_H__#include <gd32f4xx.h>#define GD32_FLASH_START_ADDRESS ((uint32_t)0x8000000) //自己加的 #define GD32_FLASH_SIZE (2048*1024)#define EXT_SDRAM_BEGIN (0xC0000000U) /* the begining address of external SDRAM */ #define EXT_SDRAM_END (EXT_SDRAM_BEGIN + (32U * 1024 * 1024)) /* the end address of external SDRAM */// <o> Internal SRAM memory size[Kbytes] <8-64> // <i>Default: 64 #ifdef __ICCARM__ // Use *.icf ram symbal, to avoid hardcode. extern char __ICFEDIT_region_RAM_end__; #define GD32_SRAM_END &__ICFEDIT_region_RAM_end__ #else #define GD32_SRAM_SIZE 64 //128 //原來128,網(wǎng)上說大了有問題,就改成64------ #define GD32_SRAM_END (0x20000000 + GD32_SRAM_SIZE * 1024) #endif#ifdef __CC_ARM extern int Image$$RW_IRAM1$$ZI$$Limit; #define HEAP_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit) #elif __ICCARM__ #pragma section="HEAP" #define HEAP_BEGIN (__segment_end("HEAP")) #else extern int __bss_end; #define HEAP_BEGIN (&__bss_end) #endif#define HEAP_END GD32_SRAM_END#endif //components.c int rtthread_startup(void) {rt_hw_interrupt_disable(); rt_hw_board_init(); /* board level initialization 在這里進行堆初始化*/ rt_show_version(); /* show RT-Thread version */ rt_system_timer_init(); /* timer system initialization */ rt_system_scheduler_init(); /* scheduler system initialization */ #ifdef RT_USING_SIGNALS rt_system_signal_init(); /* signal system initialization */ #endif rt_application_init(); /* create init_thread */ rt_system_timer_thread_init(); /* timer thread initialization */ rt_thread_idle_init(); /* idle thread initialization */ rt_system_scheduler_start(); /* start scheduler */ return 0; /* never reach here */ }

(3)用bsp中的復(fù)制移植
參考這篇:教你動手移植RT-Thread到國產(chǎn)MCU

//board.h #define GD32_SRAM_SIZE 192 //128

board.h中的sram為64M時,開lwip就會在出問題。
board.h中的sram為512M時,堆初始化會出問題,因為不連續(xù)。

void rt_system_heap_init(void *begin_addr, void *end_addr)

board.h中的sram為連續(xù)的128或192時,才能正常。

9.2 更改kprintf()串口輸出

一般 rt-thread 發(fā)布的 bsp 庫默認的 rt_kprintf 函數(shù)的輸出設(shè)備是串口1,想要更改輸出設(shè)備為串口1,以 stm32 為例步驟如下:

首先,打開 UART2 設(shè)備   
其次,在 menuconfig 中 RT-Thread Kernel — Kernel Device Object — Using console for rt_kprintf 修改 the device name for console 的值為 uart2   
最后,在文件 <stm32f1xx_hal_msp.c> 中加入串口2相關(guān)的時鐘、引腳配置信息即可

9.3 添加網(wǎng)絡(luò)

基于STM32F429實現(xiàn)web服務(wù)器功能
RT-Thread進階筆記之網(wǎng)絡(luò)框架
RT-thread 項目實戰(zhàn)–添加wifi和net雙網(wǎng)卡

這個是沒有添加drv_enet.c、synopsys_emac.c的報錯:

9.3.1 添加網(wǎng)絡(luò)驅(qū)動文件

修改/bsp/GD32450I/drivers/SConscript文件:使Kconfig中的配置與具體的驅(qū)動文件對應(yīng)

# add uart drivers. if GetDepend('RT_USING_SERIAL'):src += ['drv_usart.c']# add sdram drivers. if GetDepend('BSP_USING_SDRAM'):src += ['drv_exmc_sdram.c']# add eth drivers. if GetDepend('BSP_USING_ETH'):src += ['drv_enet.c']# add eth drivers. if GetDepend('BSP_USING_ETH'):src += ['synopsys_emac.c']

9.3.2 mac結(jié)構(gòu)體

eth_device:

struct eth_device {/* inherit from rt_device */struct rt_device parent;/* network interface for lwip */struct netif *netif;struct rt_semaphore tx_ack;rt_uint16_t flags;rt_uint8_t link_changed;rt_uint8_t link_status;/* eth device interface */struct pbuf* (*eth_rx)(rt_device_t dev);rt_err_t (*eth_tx)(rt_device_t dev, struct pbuf* p); };

gd32_emac:

struct gd32_emac {/* inherit from Ethernet device */struct eth_device parent;rt_uint8_t phy_mode;/* interface address info. */rt_uint8_t dev_addr[MAX_ADDR_LEN]; /* hw address */struct rt_synopsys_eth * ETHERNET_MAC;IRQn_Type ETHER_MAC_IRQ;EMAC_DMADESCTypeDef *DMATxDescToSet;EMAC_DMADESCTypeDef *DMARxDescToGet;#pragma pack(4)EMAC_DMADESCTypeDef DMARxDscrTab[EMAC_RXBUFNB]; #pragma pack(4)EMAC_DMADESCTypeDef DMATxDscrTab[EMAC_TXBUFNB]; #pragma pack(4)rt_uint8_t Rx_Buff[EMAC_RXBUFNB][EMAC_MAX_PACKET_SIZE]; #pragma pack(4)rt_uint8_t Tx_Buff[EMAC_TXBUFNB][EMAC_MAX_PACKET_SIZE];struct rt_semaphore tx_buf_free; };

9.4 硬件初始化

RT-Thread 自動初始化詳解

1 INIT_BOARD_EXPORT(fn) 非常早期的初始化,此時**調(diào)度器還未啟動** 2 INIT_PREV_EXPORT(fn) 主要是用于純軟件的初始化、**沒有太多依賴的函數(shù)** 3 INIT_DEVICE_EXPORT(fn) 外設(shè)驅(qū)動初始化相關(guān),比如網(wǎng)卡設(shè)備 4 INIT_COMPONENT_EXPORT(fn) 組件初始化,比如文件系統(tǒng)或者 LWIP 5 INIT_ENV_EXPORT(fn) 系統(tǒng)環(huán)境初始化,比如掛載文件系統(tǒng) 6 INIT_APP_EXPORT(fn) 應(yīng)用初始化,比如 GUI 應(yīng)用 #define INIT_EXPORT(fn, level) RT_USED const init_fn_t __rt_init_##fn SECTION(".rti_fn."level) = fn /* board init routines will be called in board_init() function */ #define INIT_BOARD_EXPORT(fn) INIT_EXPORT(fn, "1") //commponents.c #ifdef RT_USING_COMPONENTS_INIT /** Components Initialization will initialize some driver and components as following* order:* rti_start --> 0* BOARD_EXPORT --> 1* rti_board_end --> 1.end** DEVICE_EXPORT --> 2* COMPONENT_EXPORT --> 3* FS_EXPORT --> 4* ENV_EXPORT --> 5* APP_EXPORT --> 6** rti_end --> 6.end** These automatically initializaiton, the driver or component initial function must* be defined with:* INIT_BOARD_EXPORT(fn);* INIT_DEVICE_EXPORT(fn);* ...* INIT_APP_EXPORT(fn);* etc.*/ static int rti_start(void) {return 0; } INIT_EXPORT(rti_start, "0");static int rti_board_start(void) {return 0; } INIT_EXPORT(rti_board_start, "0.end");static int rti_board_end(void) {return 0; } INIT_EXPORT(rti_board_end, "1.end");static int rti_end(void) {return 0; } INIT_EXPORT(rti_end, "6.end");/*** RT-Thread Components Initialization for board*/ void rt_components_board_init(void) { #if RT_DEBUG_INITint result;const struct rt_init_desc *desc;for (desc = &__rt_init_desc_rti_board_start; desc < &__rt_init_desc_rti_board_end; desc ++){rt_kprintf("initialize %s", desc->fn_name);result = desc->fn();rt_kprintf(":%d done\n", result);} #elseconst init_fn_t *fn_ptr;for (fn_ptr = &__rt_init_rti_board_start; fn_ptr < &__rt_init_rti_board_end; fn_ptr++){(*fn_ptr)();} #endif }/*** RT-Thread Components Initialization*/ void rt_components_init(void) { #if RT_DEBUG_INITint result;const struct rt_init_desc *desc;rt_kprintf("do components intialization.\n");for (desc = &__rt_init_desc_rti_board_end; desc < &__rt_init_desc_rti_end; desc ++){rt_kprintf("initialize %s", desc->fn_name);result = desc->fn();rt_kprintf(":%d done\n", result);} #elseconst init_fn_t *fn_ptr;for (fn_ptr = &__rt_init_rti_board_end; fn_ptr < &__rt_init_rti_end; fn_ptr ++){(*fn_ptr)();} #endif } int rt_hw_usart_init(void) {struct stm32_uart *uart;struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;uart = &uart1;config.baud_rate = BAUD_RATE_115200;serial1.ops = &stm32_uart_ops;serial1.config = config;MX_USART_UART_Init(&uart->huart);/* register UART1 device */rt_hw_serial_register(&serial1, "uart1",RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,uart);return 0; } INIT_BOARD_EXPORT(rt_hw_usart_init); int rt_hw_pin_init(void) {int result;result = rt_device_pin_register("pin", &_stm32_pin_ops, RT_NULL);return result; } INIT_BOARD_EXPORT(rt_hw_pin_init);

9.5 堆的初始化

上面的移植出現(xiàn)問題,有兩個部分,一個是使用sdram,而板子上沒有sdram,另一個是sram的大小,太小lwip有問題,太大則超過了sram的連續(xù)部分,在初始化堆時報錯。

//使用內(nèi)存堆時,必須要在系統(tǒng)初始化的時候進行堆的初始化,這個函數(shù)會把參數(shù) begin_addr,end_addr 區(qū)域的內(nèi)存空間作為內(nèi)存堆來使用: void rt_system_heap_init(void* begin_addr, void* end_addr); //在使用 memheap 堆內(nèi)存時,必須要在系統(tǒng)初始化的時候進行堆內(nèi)存的初始化 rt_err_t rt_memheap_init(struct rt_memheap *memheap,const char *name,void *start_addr,rt_uint32_t size) //如果有多個不連續(xù)的 memheap 可以多次調(diào)用該函數(shù)將其初始化并加入 memheap_item 鏈表。

9.6 關(guān)于程序的起始地址

9.6.1 設(shè)置一致性

三個地方的設(shè)置要一致:gd32_rom.sct、gd32_rom.ld、rt_hw_board_init()中斷向量設(shè)置。
gd32_rom.ld是魔術(shù)棒Linker當中自定義,默認是取的魔術(shù)棒Target對話框中rom、ram的設(shè)置。其生成的定義在xxx

9.6.2 實際經(jīng)歷

rom起始設(shè)在0x800400,問題卡在:

void rt_mp_free(void *block)level = rt_hw_interrupt_disable();

rom起始設(shè)在0x800000,問題卡在:(原因是中斷向量表向后偏了)

void rt_system_scheduler_start(void)rt_hw_context_switch_to((rt_uint32_t)&to_thread->sp);

KEIL工程boot跳轉(zhuǎn)失敗,死在rt_system_scheduler_start()問題的解決

//board.c中對中斷向量偏移進行了改動 void rt_hw_board_init()//SCB->VTOR = (0x08004000 & NVIC_VTOR_MASK);SCB->VTOR = (0x08000000 & NVIC_VTOR_MASK);

10. bootloader實現(xiàn)OTA在線升級

基于STM32F4實現(xiàn)RT-Thread的串口OTA(Ymodem_ota方式)
RT-Thread在線升級(Ymodem_OTA)

11. webnet應(yīng)用

【rt-thread官網(wǎng)】webnet介紹
【gitee】webnet參考文檔
webnet使用指南(CGI)
rt-thread應(yīng)用篇(03)—基于STM32F429實現(xiàn)web服務(wù)器功能
文件系統(tǒng)要求:
WebNet 軟件包使用,需要文件系統(tǒng)的支持(FAT 文件系統(tǒng),ROMFS 文件系統(tǒng)等,支持 RT-Thread 的設(shè)備虛擬文件系統(tǒng)),用于 WebNet 軟件包中訪問的靜態(tài)頁面的存儲、上傳下載文件的存儲等功能。

解決struct timeval報錯:

#include <sys/time.h>

默認網(wǎng)頁的位置:

//wn_sample.c static void asp_var_version(struct webnet_session* session) {RT_ASSERT(session != RT_NULL);static const char *version = "<html><body><font size=\"+2\">RT-Thread %d.%d.%d</font><br><br>""<a href=\"javascript:history.go(-1);\">Go back to root</a></html></body>";webnet_session_printf(session, version, RT_VERSION_MAJOR, RT_VERSION_MINOR, RT_VERSION_PATCH); //RT_VERSION, RT_SUBVERSION, RT_REVISION } int webnet_module_cgi(struct webnet_session* session, int event) {if (event == WEBNET_EVENT_INIT){/* set default cgi path */if (_cgi_root[0] == '\0'){strcpy(_cgi_root, "/cgi-bin/");}}else if (event == WEBNET_EVENT_URI_PHYSICAL){struct webnet_request* request;char *cgi_path = RT_NULL;RT_ASSERT(session != RT_NULL);request = session->request;RT_ASSERT(request != RT_NULL);/* check whether a cgi request */cgi_path = strstr(request->path, _cgi_root);if (cgi_path != RT_NULL){char* cgi_name;rt_uint32_t index;//judge contain ".cgi"-------自己加的--------char* lastname = cgi_path + strlen(cgi_path)-4; if(strncasecmp(lastname,".cgi",4) == 0){int len = strlen(cgi_path);cgi_path[len-4] = '\0';}//----------end-----------------------------cgi_name = cgi_path + strlen(_cgi_root);for (index = 0; index < _cgi_count; index ++){if ((strlen(cgi_name) == strlen(_cgi_items[index].name))&& strncasecmp(cgi_name, _cgi_items[index].name, strlen(_cgi_items[index].name)) == 0){/* found it */_cgi_items[index].handler(session);return WEBNET_MODULE_FINISHED;}}/* set 404 not found error */request->result_code = 404;}}return WEBNET_MODULE_CONTINUE; }

12. 文件系統(tǒng)

官網(wǎng)fal介紹
fal的api介紹
DFS文件系統(tǒng)管理與devfs/elmfat示例

DFS( Device File System)框架:


沒有開啟fatfs:

12.1 虛擬文件系統(tǒng)使用步驟:

  • 初始化 DFS 組件。
  • 注冊具體類型的文件系統(tǒng)。
  • 掛載文件系統(tǒng)
  • 當文件系統(tǒng)不再使用,可以將它卸載。
//初始化 int dfs_init(void) //注冊文件系統(tǒng) int dfs_register(const struct dfs_filesystem_ops *ops); //掛載 int dfs_mount(const char *device_name,const char *path,const char *filesystemtype,unsigned long rwflag,const void *data); //格式化設(shè)備(device_name)為(fs_name)文件格式 int dfs_mkfs(const char *fs_name, const char *device_name) int dfs_file_open(struct dfs_fd *fd, const char *path, int flags) int open(const char *file, int flags, ...) //卸載 int dfs_unmount(const char *specialfile);

12.2 初始化

加入自動初始化

INIT_PREV_EXPORT(dfs_init);

初始化 DFS:

  • 清除文件系統(tǒng)操作表
  • 清除文件系統(tǒng)表
  • 清除文件描述符表
  • 初始化互斥量
  • 設(shè)置當前工作目錄為“/”

13.3 fal

官網(wǎng)FAL的API
1、這個是在lwip之前初始化fal:

///..\rt-thread\components\net\lwip-2.0.2\src\arch\sys_arch.c(214) : void sys_init(void) #include <fal.h> void sys_init(void) {/* nothing on RT-Thread porting */rt_kprintf("in sys_init: fal_init()----\r\n");/*flash initial here for read to set ipaddr*/fal_init(); // ppp----- }

2、錯誤解決
(1)“expected an expression” 錯誤解決

USED static const struct fal_partition partition_table_def[] SECTION("FalPartTable") = FAL_PART_TABLE;

把其中一行注釋,而應(yīng)該刪除,且上面那個換行符后面有空格也不行。
(2)dfs_mount(FS_PARTITION_NAME, “/webnet”, “l(fā)fs”, 0, 0)失敗
主要是在:dfs_mount()中的dfs_file_open()失敗,調(diào)試時感覺走的不對,該返回的也不返回。
這個是dfs的問題,將/components/dfs整個文件夾替換成可用的。
后來仔細對了下,是/filesystems/romfs/romfs.c中直接將dummy換成webnet了,感覺沒從根本上解決,只是取了個巧:

RT_WEAK const struct romfs_dirent _root_dirent[] = {{ROMFS_DIRENT_DIR, "webnet", (rt_uint8_t *)_dummy, sizeof(_dummy) / sizeof(_dummy[0])},//{ROMFS_DIRENT_FILE, "dummy.txt", _dummy_txt, sizeof(_dummy_txt)}, };

(3)rtthread4.1.1以上的虛擬文件系統(tǒng)中由于結(jié)構(gòu)體調(diào)整,在dfs_file_open()中沒有對data進行賦值,導(dǎo)致文件打開失敗,修改如下:

int dfs_file_open(struct dfs_fd *fd, const char *path, int flags)fd->flags = flags; fd->data = fs; //fa->data沒給值,加上 ppp----

3、打印分區(qū)表

void fal_show_part_table(void) //fal_def.h #define FAL_PRINTF rt_kprintf //printf

4、設(shè)備表和分區(qū)表

  • 分區(qū)表名稱不能重復(fù)
  • 設(shè)備名稱必須與設(shè)備表里定義設(shè)備的名稱一致(.name參數(shù))
  • 分區(qū)表相對設(shè)備的起始地址
  • 該分區(qū)表的大小,以字節(jié)為單位。

board.h中的定義也以字節(jié)為單位:

13.4 littlefs(lfs)

rtthread利用片上flash掛載littlefs文件系統(tǒng)并操作
基于RTT系統(tǒng)的LITTLEFS文件系統(tǒng)移植說明(STM32片內(nèi)FLASH)

13. TFTP

netutils應(yīng)用筆記
TFTP:簡單文件傳輸協(xié)議
netutils軟件包中有TFTP小工具。TFTP (Trivial File Transfer Protocol),端口號為 69。在板卡上開啟TFTP Server后,就可以在PC上使用TFTP Client軟件將HTML網(wǎng)頁文件上傳到板卡的SPI FLASH中。

傳輸文件寫出現(xiàn)錯誤,原因是創(chuàng)建tftpserver時的目錄為"/",這個文件系統(tǒng)不可寫,要改成“/webnet”。總之要根據(jù)自己創(chuàng)建的文件系統(tǒng)來決定。

static int _tftp_msh(int argc, char *argv[])//server = tftp_server_create(path[0], port);server = tftp_server_create("/webnet", port);

板子創(chuàng)建tftp服務(wù)端:

//finsh中輸入 tftp -s

tftp工具軟件選client:

14. 設(shè)備管理

RT-Thread IO設(shè)備管理模型
RT-Thread設(shè)備管理框架
RTThread IO設(shè)備和驅(qū)動學(xué)習(xí)

IO設(shè)備類型:

/* include/rtdef.h */ enum rt_device_class_type {RT_Device_Class_Char = 0, /**< character device */RT_Device_Class_Block, /**< block device */RT_Device_Class_NetIf, /**< net interface */RT_Device_Class_MTD, /**< memory device */RT_Device_Class_CAN, /**< CAN device */RT_Device_Class_RTC, /**< RTC device */RT_Device_Class_Sound, /**< Sound device */RT_Device_Class_Graphic, /**< Graphic device */RT_Device_Class_I2CBUS, /**< I2C bus device */RT_Device_Class_USBDevice, /**< USB slave device */RT_Device_Class_USBHost, /**< USB host bus */RT_Device_Class_SPIBUS, /**< SPI bus device */RT_Device_Class_SPIDevice, /**< SPI device */RT_Device_Class_SDIO, /**< SDIO bus device */RT_Device_Class_PM, /**< PM pseudo device */RT_Device_Class_Pipe, /**< Pipe device */RT_Device_Class_Portal, /**< Portal device */RT_Device_Class_Timer, /**< Timer device */RT_Device_Class_Miscellaneous, /**< Miscellaneous device */RT_Device_Class_Sensor, /**< Sensor device */RT_Device_Class_Touch, /**< Touch device */RT_Device_Class_Unknown /**< unknown device */ };

設(shè)備結(jié)構(gòu)體:

/* include/rtdef.h */ struct rt_device {struct rt_object parent; /**< inherit from rt_object */enum rt_device_class_type type; /**< device type */rt_uint16_t flag; /**< device flag */rt_uint16_t open_flag; /**< device open flag */rt_uint8_t ref_count; /**< reference count */rt_uint8_t device_id; /**< 0 - 255 *//* device call back */rt_err_t (*rx_indicate)(rt_device_t dev, rt_size_t size);rt_err_t (*tx_complete)(rt_device_t dev, void *buffer);#ifdef RT_USING_DEVICE_OPSconst struct rt_device_ops *ops; #else/* common device interface */rt_err_t (*init) (rt_device_t dev);rt_err_t (*open) (rt_device_t dev, rt_uint16_t oflag);rt_err_t (*close) (rt_device_t dev);rt_size_t (*read) (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size);rt_size_t (*write) (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size);rt_err_t (*control)(rt_device_t dev, int cmd, void *args); #endif#if defined(RT_USING_POSIX)const struct dfs_file_ops *fops;struct rt_wqueue wait_queue; #endifvoid *user_data; /**< device private data */ }; rt_device_create() rt_device_destroy() rt_device_register() rt_device_find() rt_device_init() rt_device_open() rt_device_close() rt_device_control() rt_device_read() rt_device_write() rt_device_set_rx_indicate() //設(shè)置接收回調(diào) rt_device_set_tx_complete() //設(shè)置發(fā)送回調(diào)

15. lwip

lwip官方文檔(重點)
【野火】LwIP應(yīng)用開發(fā)實戰(zhàn)指南—基于RT1052
LWIP學(xué)習(xí)筆記6——使用 NETCONN 接口編程
LWIP使用解析【網(wǎng)卡驅(qū)動 比較好】
LWIP使用經(jīng)驗—變態(tài)級(樹狀圖比較好)

LwIP提供了三種編程接口,分別為 RAW/Callback API、Netconn API、Socket API。他們的易用性從左到右依次提高,而執(zhí)行效率從左到右依次降低,用戶可以根據(jù)實際情況,平衡利弊,選擇合適的API進行網(wǎng)絡(luò)應(yīng)用程序的開發(fā)。
啟動時序(圖不錯):

15.1 api

RAW:

err_t raw_bind (struct raw_pcb *pcb, const ip_addr_t *ipaddr) void raw_bind_netif (struct raw_pcb *pcb, const struct netif *netif) err_t raw_connect (struct raw_pcb *pcb, const ip_addr_t *ipaddr) void raw_disconnect (struct raw_pcb *pcb) void raw_recv (struct raw_pcb *pcb, raw_recv_fn recv, void *recv_arg) err_t raw_sendto (struct raw_pcb *pcb, struct pbuf *p, const ip_addr_t *ipaddr) err_t raw_sendto_if_src (struct raw_pcb *pcb, struct pbuf *p, const ip_addr_t *dst_ip, struct netif *netif, const ip_addr_t *src_ip) err_t raw_send (struct raw_pcb *pcb, struct pbuf *p) void raw_remove (struct raw_pcb *pcb)

TCP:

//connect---- tcp_new() tcp_bind() tcp_listen() and tcp_listen_with_backlog() tcp_accept() tcp_connect() //send---- tcp_write() tcp_output() tcp_sent() //recv---- tcp_recv() tcp_recved() void tcp_backlog_delayed (struct tcp_pcb *pcb) void tcp_backlog_accepted (struct tcp_pcb *pcb) err_t tcp_close (struct tcp_pcb *pcb) err_t tcp_shutdown (struct tcp_pcb *pcb, int shut_rx, int shut_tx) void tcp_abort (struct tcp_pcb *pcb) err_t tcp_bind (struct tcp_pcb *pcb, const ip_addr_t *ipaddr, u16_t port) void tcp_bind_netif (struct tcp_pcb *pcb, const struct netif *netif) struct tcp_pcb * tcp_listen_with_backlog (struct tcp_pcb *pcb, u8_t backlog) struct tcp_pcb * tcp_listen_with_backlog_and_err (struct tcp_pcb *pcb, u8_t backlog, err_t *err) void tcp_recved (struct tcp_pcb *pcb, u16_t len) err_t tcp_connect (struct tcp_pcb *pcb, const ip_addr_t *ipaddr, u16_t port, tcp_connected_fn connected) struct tcp_pcb * tcp_new (void) struct tcp_pcb * tcp_new_ip_type (u8_t type) void tcp_arg (struct tcp_pcb *pcb, void *arg) void tcp_recv (struct tcp_pcb *pcb, tcp_recv_fn recv) void tcp_sent (struct tcp_pcb *pcb, tcp_sent_fn sent) void tcp_err (struct tcp_pcb *pcb, tcp_err_fn err) void tcp_accept (struct tcp_pcb *pcb, tcp_accept_fn accept) void tcp_poll (struct tcp_pcb *pcb, tcp_poll_fn poll, u8_t interval) err_t tcp_write (struct tcp_pcb *pcb, const void *arg, u16_t len, u8_t apiflags) err_t tcp_output (struct tcp_pcb *pcb)

UDP:

err_t udp_send (struct udp_pcb *pcb, struct pbuf *p) err_t udp_sendto (struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *dst_ip, u16_t dst_port) err_t udp_sendto_if (struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *dst_ip, u16_t dst_port, struct netif *netif) err_t udp_sendto_if_src (struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *dst_ip, u16_t dst_port, struct netif *netif, const ip_addr_t *src_ip) err_t udp_bind (struct udp_pcb *pcb, const ip_addr_t *ipaddr, u16_t port) void udp_bind_netif (struct udp_pcb *pcb, const struct netif *netif) err_t udp_connect (struct udp_pcb *pcb, const ip_addr_t *ipaddr, u16_t port) void udp_disconnect (struct udp_pcb *pcb) void udp_recv (struct udp_pcb *pcb, udp_recv_fn recv, void *recv_arg) void udp_remove (struct udp_pcb *pcb) struct udp_pcb * udp_new (void) struct udp_pcb * udp_new_ip_type (u8_t type)

總結(jié)

以上是生活随笔為你收集整理的RT-Thread学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

国内精品久久久久久久影视简单 | 在线 成人 | 亚洲精品视频一 | 在线视频app | av再线观看 | 精品一区二区视频 | 黄色三级免费看 | av中文字幕电影 | 色综合久久中文综合久久牛 | 国产欧美日韩一区 | 九九热免费观看 | 99久久精品久久久久久清纯 | 色黄久久久久久 | 久久一区二区免费视频 | 国产麻豆精品传媒av国产下载 | 美女视频久久 | 91热这里只有精品 | 天天天天天天天操 | 日韩精品一区二区三区中文字幕 | 最近高清中文字幕在线国语5 | 日韩三级视频在线看 | av一级免费 | 成片免费观看视频 | 美女网站在线看 | 香蕉视频在线免费看 | 91重口视频| 又黄又刺激又爽的视频 | 激情视频国产 | 伊人狠狠色丁香婷婷综合 | 欧美a在线看 | 国产日韩欧美在线播放 | 欧美日韩国产在线观看 | 狠狠综合久久av | 国产综合在线观看视频 | 欧美日韩性视频在线 | 五月天丁香亚洲 | 国内三级在线观看 | 狠狠色狠狠色综合系列 | www.色午夜,com | 黄视频色网站 | 色姑娘综合| 日日摸日日添日日躁av | 亚洲高清色综合 | 色综合久久久久久久久五月 | 国产午夜三级一区二区三桃花影视 | 国产资源在线播放 | 国产又粗又猛又色 | 国产91aaa | 丁香一区二区 | 国产免费亚洲高清 | 国产剧情av在线播放 | 国产精品成人一区二区三区吃奶 | 在线www色| 欧美午夜理伦三级在线观看 | av电影亚洲| 亚洲自拍偷拍色图 | av大全免费在线观看 | av一区二区在线观看中文字幕 | 国产综合久久 | 激情五月视频 | 久久久精品一区二区 | 久草国产在线观看 | 久久97久久| 久久亚洲影视 | 国产精品久久久久久久久久直播 | 草久在线视频 | 国产97在线观看 | 久久久久久毛片精品免费不卡 | 亚洲男男gaygay无套 | 精品久久久久久久久中文字幕 | av 在线观看 | 久久三级毛片 | 三级免费黄色 | 国产免费影院 | 九九综合九九综合 | 成 人 a v天堂 | 亚洲天堂精品视频在线观看 | 毛片99 | 黄色福利网站 | 婷婷在线五月 | 精品一区二区av | 夜夜夜 | 一区二区视频在线播放 | 人人澡人人澡人人 | 国产精品美女久久久久久2018 | 色国产精品一区在线观看 | 1区2区3区在线观看 三级动图 | 人人爽人人爽人人片 | 九九热视频在线免费观看 | 97视频人人 | 亚洲精品久久久蜜臀下载官网 | 久香蕉| 91女神的呻吟细腰翘臀美女 | 久久香蕉电影 | 久久艹人人 | 久久在现视频 | 免费成人av网站 | 综合网中文字幕 | 99操视频| 日韩免费一级a毛片在线播放一级 | 亚洲成人午夜av | 亚洲国内精品 | 国产伦理久久精品久久久久_ | 黄色特一级| 精品美女久久 | 99色在线 | 中文字幕 婷婷 | 十八岁以下禁止观看的1000个网站 | 黄色精品国产 | av在线h| 黄色h在线观看 | 国产精品成人免费精品自在线观看 | 久久国产精品二国产精品中国洋人 | 97小视频 | 欧美日韩国产综合网 | 色狠狠一区二区 | 激情av在线播放 | 国产一区二区网址 | 久久天天综合网 | 欧美日韩另类在线观看 | 美女网站黄免费 | 九色琪琪久久综合网天天 | 国产精品区一区 | 美女网站在线 | 国产日本在线观看 | 国内视频| 久久综合婷婷综合 | 久久久久成人精品 | 久草网免费 | 毛片.com| 91人人网| 丁香婷婷综合色啪 | 欧美午夜一区二区福利视频 | 国产精品久久久久久麻豆一区 | 久久综合影视 | 99精品乱码国产在线观看 | 久久久久久久久福利 | 美女av在线免费 | 欧美另类亚洲 | 日韩av一区二区在线 | 九九综合久久 | 国产最新在线视频 | 国产高清视频色在线www | 在线精品视频免费播放 | 日日操日日 | 国产精品网站一区二区三区 | 国产精品高清免费在线观看 | 久久优 | 91精品老司机久久一区啪 | 久久精品一 | 99久久电影| 欧美福利片在线观看 | 国产精品原创av片国产免费 | 婷婷婷国产在线视频 | 2023av在线 | av高清一区 | av网站手机在线观看 | 国产成人精品一区二区三区网站观看 | 天天操天天舔天天干 | 国产精品福利无圣光在线一区 | 国产人在线成免费视频 | 国产免费成人av | 97av视频在线观看 | 国内丰满少妇猛烈精品播放 | 国产黄色片久久久 | av天天草| 伊人天堂久久 | 国产精品永久免费在线 | 欧美性生活免费 | av中文字幕在线观看网站 | 精品视频在线免费观看 | 在线观看视频免费播放 | 日日干av | 天堂av网址 | 久久涩视频 | 欧洲一区二区三区精品 | 人人爱夜夜操 | 久草在线免费看视频 | 亚洲高清视频在线 | 一区二区三区在线观看免费 | 国产日韩欧美自拍 | 中文字幕免费高清在线 | 久久激情综合网 | www.狠狠干 | 国产精品久久久久久吹潮天美传媒 | 久99视频| 国产一区视频免费在线观看 | 91精品免费视频 | ww视频在线观看 | 999久久久国产精品 高清av免费观看 | 国产精品一区二区久久 | 热久久99这里有精品 | 91九色在线视频 | 久久久午夜精品福利内容 | 久久久久免费精品视频 | 91av精品 | 精品一区欧美 | 国产精品一区二区三区在线播放 | 国产一区欧美二区 | 久久综合久久综合这里只有精品 | 日韩一区视频在线 | 成人免费观看视频大全 | 国产精品久久久久久久久久久久久 | 欧美国产日韩在线视频 | 99热99热 | 久久久久久福利 | 中国精品一区二区 | 精品久久久久久电影 | 日韩欧美黄色网址 | 午夜黄网 | 中文字幕在线观看视频一区二区三区 | 午夜av电影院 | 2021国产在线视频 | 久久久久高清毛片一级 | 日韩| 丁香六月婷婷 | 五月婷婷伊人网 | 国产黄色片在线免费观看 | 中文字幕国产亚洲 | 中文字幕在线日本 | 国产精品久久久久久久久费观看 | 911av视频 | 欧美成a人片在线观看久 | 啪一啪在线| 久久在视频 | 亚洲欧美日韩不卡 | 日韩在线高清免费视频 | 一区二区三区视频 | 色资源在线观看 | 午夜精品视频福利 | 久久狠狠亚洲综合 | 天堂av免费 | 天天干天天做天天操 | 夜夜躁日日躁狠狠久久av | 国产又黄又硬又爽 | 国产在线不卡精品 | 久草91视频 | 色综合久久五月天 | 日韩欧美一区二区三区视频 | 国产综合婷婷 | 国产精品美女毛片真酒店 | 美女久久久久久久久久久 | 国产精品嫩草在线 | 免费在线日韩 | 黄色a大片 | 国产精品久久久久久久午夜 | 免费成视频 | 亚洲视频axxx | 久久99精品国产91久久来源 | 探花在线观看 | 99国产情侣在线播放 | 国产免费久久 | 狠狠躁夜夜躁人人爽超碰91 | 久久天天草| 亚洲爽爽网 | 九色精品免费永久在线 | 精品国产一区二区三区男人吃奶 | 99在线精品免费视频九九视 | 免费色视频网址 | 欧美-第1页-屁屁影院 | 国产黄色大全 | 天天插综合网 | 午夜影院在线观看18 | 99在线免费观看 | 亚洲视频在线免费看 | 国产手机视频在线播放 | 久久综合九色综合久久久精品综合 | 亚洲国产精品500在线观看 | 精品一区二区三区久久 | 免费看国产a | 成人午夜精品福利免费 | adn—256中文在线观看 | 国产精品久久久久久久久久久久午夜片 | 国产福利午夜 | 日本韩国欧美在线观看 | 天天鲁一鲁摸一摸爽一爽 | 国产裸体bbb视频 | 国产精品video爽爽爽爽 | 911精品美国片911久久久 | 中文字幕av全部资源www中文字幕在线观看 | 国产精品自产拍在线观看网站 | 丁香综合五月 | 天天色成人 | 午夜国产福利在线观看 | 国产97在线视频 | 免费一级片视频 | 日韩欧美精品在线观看视频 | 亚洲 欧洲av | 精品自拍sae8—视频 | 在线免费黄色片 | 久久久精品电影 | 午夜天天操 | 国产精品第2页 | 成人av播放 | 中文字幕在线观看第三页 | 国产高清综合 | 伊人天天狠天天添日日拍 | 九九热精品国产 | 日本最新高清不卡中文字幕 | 在线网站黄 | 中文字幕在线资源 | 四虎影视精品永久在线观看 | 久久国产露脸精品国产 | 成人免费在线看片 | 怡红院久久| 久久久999| 狠狠色综合网站久久久久久久 | 91免费高清观看 | 麻豆 videos | av理论电影 | 亚洲精品久久久蜜桃直播 | 久草视频手机在线 | 久久婷婷综合激情 | 四虎国产 | 91九色视频在线观看 | 久久99亚洲精品久久久久 | 在线国产视频 | 福利区在线观看 | 国产一区免费在线观看 | 精品一二三区视频 | wwwww.国产 | 成年人黄色免费网站 | 一级淫片在线观看 | 黄色免费av | 亚洲激情视频 | 黄色一级大片在线免费看国产一 | 成年人视频在线免费播放 | 亚洲欧美国产日韩在线观看 | 免费黄色网止 | 美女网站久久 | 精品一区二区精品 | 国产成人久久久77777 | 成人av资源 | 亚洲 欧美 国产 va在线影院 | 深夜福利视频在线观看 | 91片网 | 久久久99精品免费观看 | 亚洲午夜精 | 亚洲精品91天天久久人人 | 97人人澡人人添人人爽超碰 | 天天人人综合 | 日韩中文字幕免费视频 | 骄小bbw搡bbbb揉bbbb | 99视频精品免费观看, | 激情综合网五月婷婷 | 久久一区二 | av黄色国产 | 深夜国产在线 | 久久超| 国产成人精品久久亚洲高清不卡 | 国产精品18久久久久久首页狼 | 国产流白浆高潮在线观看 | 中文字幕精品一区 | 国产精品福利视频 | 精品国产一区二区三区四区vr | 9999精品视频| 蜜桃视频精品 | 国产精品免费视频久久久 | 一区二区三区在线观看 | 国产伦理久久精品久久久久_ | 免费三级骚 | 久久精品播放 | 黄色软件在线观看视频 | 亚洲伊人天堂 | 中文字幕在线观看2018 | 婷婷丁香狠狠爱 | 黄色精品在线看 | 国产精品国产三级国产aⅴ入口 | 国产福利免费在线观看 | 成人免费在线播放 | 在线免费黄色av | 丁香婷婷在线观看 | 在线精品在线 | 中文字幕亚洲精品在线观看 | www.色五月.com| 久久a免费视频 | 久久综合九色99 | 日本公妇在线观看 | 欧美日韩精品影院 | 国产精品黄色影片导航在线观看 | 毛片在线网| 亚洲视频 在线观看 | 成人av影视| 亚洲激情在线视频 | 日产av在线播放 | 国产91免费在线观看 | 又色又爽又黄 | 韩国av电影网 | 国产伦精品一区二区三区免费 | 久久精彩免费视频 | 五月天婷婷综合 | 亚洲视频h| 麻豆传媒电影在线观看 | 91精品老司机久久一区啪 | 人人干在线| 国产高清黄 | 超碰久热 | 久久综合成人网 | 国产一区二区三区四区在线 | 免费v片 | 国内精品在线一区 | 一区二区三区四区五区在线视频 | 黄色毛片一级片 | 91免费国产在线观看 | 日日色综合 | 欧美久久久久久久久久久久久 | 色婷婷电影网 | www.久久免费视频 | 粉嫩av一区二区三区免费 | 88av视频| 2018好看的中文在线观看 | 日韩精品一区二区免费 | 久久久亚洲网站 | 日韩在线观看一区二区三区 | 国产91免费在线观看 | 日本深夜福利视频 | 91精品国产入口 | 日韩理论在线播放 | 西西4444www大胆艺术 | 狠狠操在线 | 丁香九月激情综合 | 99久久这里有精品 | 九九九在线观看视频 | 国产在线国偷精品产拍免费yy | 亚洲国产中文字幕 | 久久精品一 | 波多野结衣动态图 | 美女视频黄是免费的 | 99久久精品午夜一区二区小说 | 69视频网站 | 中文字幕在线观看第二页 | 91黄视频在线观看 | 九九热免费视频在线观看 | 国产精品成人免费一区久久羞羞 | 免费av网站在线 | 国产一级三级 | 一区电影 | 国产在线观看h | 一级黄色电影网站 | av经典在线 | 亚洲综合五月天 | 三级a视频 | 久久日韩精品 | 在线观看一级视频 | 超碰个人在线 | 日本一区二区免费在线观看 | 天天操操 | 九九在线视频免费观看 | www久久| 国产69熟| 九九免费在线观看视频 | 亚洲最新av在线网址 | 97超级碰| 久久久2o19精品 | 亚洲伊人成综合网 | 天天操天天干天天玩 | 久久免费视频播放 | 精品96久久久久久中文字幕无 | 天天综合网国产 | 91精彩视频| 五月亚洲综合 | 四虎在线免费 | 国产高清一 | 91精品国产乱码久久 | 欧美 日韩 视频 | 欧美 日韩 视频 | 亚洲区另类春色综合小说 | 国产日韩欧美综合在线 | 国产日女人 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产精品毛片一区二区三区 | 天天干夜夜想 | 99这里精品 | 国产无套视频 | 国产视频一级 | 最新中文字幕在线资源 | 欧美疯狂性受xxxxx另类 | 天天摸天天操天天舔 | 精品久久九九 | 麻豆精品视频在线观看免费 | 人人爱人人添 | 激情文学丁香 | 91在线看 | 六月婷色 | 狠狠干天天 | 亚洲1级片 | 久久久久国产一区二区三区四区 | 精品国产亚洲日本 | 人人网av | 色婷婷亚洲综合 | 国产精品久久久视频 | 久久电影国产免费久久电影 | 久久久午夜精品福利内容 | 五月色婷| 久久www免费人成看片高清 | 国产在线一区观看 | 97福利视频 | 在线观看国产高清视频 | 欧美久久久久久久久久久 | 久久国内精品99久久6app | 人人草人 | 久久国产精品久久w女人spa | 久久永久免费视频 | 成人黄色免费在线观看 | 天天亚洲 | 国产一区久久久 | 欧美色就是色 | 丁香在线观看完整电影视频 | 6080yy午夜一二三区久久 | 久久综合狠狠综合 | 成在线播放 | 国产精品黄色在线观看 | 色国产精品 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 中文字幕在线观看2018 | 伊人精品在线 | 五月在线 | 成人影音在线 | 国产麻豆精品传媒av国产下载 | 中文字幕国产一区二区 | 麻豆国产精品一区二区三区 | 国产精品中文字幕在线播放 | 精品视频不卡 | 久久精品国产一区 | 国产成人精品在线 | 99久久99热这里只有精品 | 天天草天天草 | 免费福利片 | aaa日本高清在线播放免费观看 | 国产一级片久久 | 五月色综合 | 97视频人人澡人人爽 | 视频在线播放国产 | 亚洲a成人v | 黄污网站在线观看 | 在线黄色国产 | 91黄色小网站 | 美女福利视频网 | 超碰97在线看 | 欧美黑人xxxx猛性大交 | 亚洲精品看片 | 久久久久这里只有精品 | 最近中文字幕 | av中文字幕在线看 | 日日操操| 五月婷在线播放 | 国产欧美精品一区二区三区四区 | 麻豆影音先锋 | 天天操天天干天天综合网 | 99久久精品久久久久久动态片 | 日韩视频欧美视频 | 国产精品成人国产乱 | 欧美91视频 | 国产成人综 | av在线直接看 | 国产69久久精品成人看 | 99在线精品视频 | 欧美一级专区免费大片 | 天天干,夜夜爽 | 国语自产偷拍精品视频偷 | 91天天视频| 国产三级久久久 | 久久影视精品 | 亚洲高清av | 欧美激情视频久久 | 日韩在线免费 | 射射色 | 91成人网在线播放 | 99热在线精品观看 | 久久经典视频 | 国产精品18久久久久久久网站 | 久久成年人视频 | 国产专区在线播放 | 久久综合久久88 | 中文字幕在线视频精品 | 国产亚洲综合精品 | 麻豆传媒在线免费看 | 久久精品三级 | 韩国av免费观看 | 国产香蕉97碰碰久久人人 | 色国产视频| 黄色三级久久 | 三三级黄色片之日韩 | 国产剧情一区在线 | 免费在线激情电影 | 99免费精品| 日韩视频一 | 黄色免费网 | 黄色免费看片网站 | 男女拍拍免费视频 | 毛片精品免费在线观看 | 色狠狠久久av五月综合 | 日本久久久亚洲精品 | 亚洲色图色 | 国产激情电影综合在线看 | 国产精品综合av一区二区国产馆 | 超级碰99 | 天天射天天干 | 午夜丰满寂寞少妇精品 | 色综合天天天天做夜夜夜夜做 | 国产一区免费在线观看 | 久久精品一区 | 天天搞天天干天天色 | 久草在线高清视频 | 国产91综合一区在线观看 | 天天狠狠 | 在线观看色网 | 国产亚洲欧美日韩高清 | 国产一区二区在线免费 | 国产精品久久久久久久久毛片 | 中文字幕高清在线 | av在线免费网 | 91色偷偷 | 天天射天天拍 | 婷婷丁香五 | 亚洲日本国产精品 | 久久兔费看a级 | 色综合天天狠狠 | 天天艹天天 | 久久综合福利 | 久草在线手机视频 | 国产 在线观看 | 91麻豆网| 国产伦理久久精品久久久久_ | 日韩精品免费一区二区三区 | 午夜色性片 | 色综合小说 | 在线日本看片免费人成视久网 | 91视频3p| www.天天操.com | www.天天干| 九九在线国产视频 | 日韩一区二区三区在线观看 | 日本在线观看中文字幕无线观看 | 97视频在线免费播放 | 国产日女人 | 爱爱av网站| 日韩欧美成 | 国产精品日韩欧美一区二区 | 久久免费视频在线 | 黄色av免费| 日韩电影一区二区在线 | 国产黄色片在线免费观看 | 久久久久色 | 黄色片免费看 | 日韩免费看片 | 这里只有精品视频在线 | 最新国产一区二区三区 | 黄色午夜 | 国产在线久久久 | 国产精品久免费的黄网站 | 中文av网 | 中文国产在线观看 | 日韩欧美在线高清 | www.99久久.com| 99精品视频在线播放观看 | 精品久久久久国产免费第一页 | 日韩在线精品一区 | 色网站免费在线观看 | 欧美激情xxxx性bbbb | 日韩视频一区二区在线 | 日韩精品专区在线影院重磅 | 久久精品波多野结衣 | 久久久综合精品 | 国产人成免费视频 | 天堂av影院 | 91成熟丰满女人少妇 | 日韩丝袜在线观看 | 色视频成人在线观看免 | 国产福利91精品 | 97在线播放 | www.夜夜操.com | 伊人中文网 | 丁香花在线观看免费完整版视频 | 久久精品国产v日韩v亚洲 | 天天干天天看 | 亚洲国产综合在线 | 亚洲激情精品 | 中文字幕a∨在线乱码免费看 | 国产精品18久久久久久不卡孕妇 | 亚洲a色| 91精品久久久久久久99蜜桃 | 亚洲视频h | 99爱这里只有精品 | 亚洲九九九在线观看 | 成年人免费电影在线观看 | 久久国产精品99国产精 | 色鬼综合网 | 国产亚洲人成网站在线观看 | www视频在线观看 | 亚洲性少妇性猛交wwww乱大交 | 久久久久久久久久影视 | 福利电影一区二区 | 免费观看www小视频的软件 | 久久影院午夜论 | 日本中文字幕系列 | 九九交易行官网 | 亚洲精品美女视频 | 日本中文一级片 | 久久成人免费电影 | 日本中文字幕一二区观 | 亚洲国产中文字幕在线视频综合 | 91大神精品视频在线观看 | 在线免费观看欧美日韩 | 麻豆久久一区二区 | 51精品国自产在线 | 五月天婷婷在线观看视频 | 国产精品一区二区 91 | 国产男女无遮挡猛进猛出在线观看 | 日韩精品久久中文字幕 | 亚洲精品综合久久 | 五月婷婷在线视频观看 | 黄色视屏免费在线观看 | 中文字幕中文字幕 | 天天综合中文 | 国产精品18p| 久久久男人的天堂 | 91国内产香蕉| 欧美精品黑人性xxxx | 99国产精品久久久久老师 | 中文av网站 | 成人性生交视频 | 亚洲色图激情文学 | 国产中文字幕网 | 六月婷婷久香在线视频 | 五月天开心| 免费的国产精品 | 亚洲极色| 最近日本韩国中文字幕 | 色综合网在线 | 国产美女被啪进深处喷白浆视频 | 狠狠网 | 在线观看网站av | 99热在线精品观看 | 国际精品久久久久 | 夜夜夜影院 | 久久久久久久久久免费视频 | 国产黑丝一区二区 | 中文字幕免费高清av | 国产成人久久精品 | 超碰av在线播放 | 国产 视频 久久 | 最近中文字幕免费av | 久草99| 欧美在线观看视频一区二区三区 | 丝袜少妇在线 | 黄色aaa毛片| 色偷偷88888欧美精品久久久 | 精品国产乱码久久久久久1区二区 | 国产一区二区三区免费视频 | 亚洲va欧美va人人爽春色影视 | 久久国产免费视频 | 亚洲精品久久久久58 | 亚洲国产欧美在线看片xxoo | 国产精品女人网站 | 福利视频一区二区 | 精品国产乱码久久久久久久 | 夜夜躁日日躁狠狠久久av | 一区二区三区免费在线 | 香蕉视频在线网站 | 国产精品理论片 | 色婷婷影视 | 日韩免费视频线观看 | 亚洲成人av片在线观看 | 久久999久久 | 成年人免费av网站 | 中文字幕亚洲国产 | 日本视频高清 | 婷婷伊人综合亚洲综合网 | 国产成人一区三区 | 日韩素人在线观看 | 中文字幕字幕中文 | 在线看片成人 | 日日久视频 | 免费看片网页 | 天天色天天骑天天射 | 成人免费观看在线视频 | www.超碰97.com| 91看片黄色 | 中文字幕在线日亚洲9 | 中文字幕在线播放第一页 | 99久久精品免费 | 黄色免费网战 | 成人av教育 | 久久久久久久久久久影院 | 波多野结衣小视频 | 十八岁以下禁止观看的1000个网站 | 国产伦理一区二区三区 | 高清免费在线视频 | 国产在线视频资源 | 国产偷在线 | 久久久久在线观看 | 天天操人人干 | 中文字幕一区在线观看视频 | www.干| 日韩aⅴ视频 | 天天色棕合合合合合合 | 久久久国产精品一区二区三区 | 在线免费高清 | 激情欧美一区二区三区免费看 | 激情在线五月天 | 一区二区 精品 | 91成人国产| 国产91在线播放 | 免费亚洲精品 | 在线国产视频观看 | 天天操欧美 | 亚洲精品自拍视频在线观看 | 亚洲精品在线二区 | 亚洲综合成人专区片 | 日日摸日日 | 欧美色黄 | 亚洲视屏在线播放 | 免费观看xxxx9999片 | 国模一二三区 | 中文字幕.av.在线 | 中文字幕亚洲精品在线观看 | 99久久夜色精品国产亚洲 | 中文字幕一区二区三区精华液 | 久久久久日本精品一区二区三区 | 免费看网站在线 | 亚洲精品av在线 | 亚洲日本欧美在线 | 国内精品久久久久久久久 | 久久久高清免费视频 | 日韩在线播放av | 黄色一级大片在线观看 | 99久视频| 久久久久久毛片精品免费不卡 | 在线看中文字幕 | 中文字幕在线日亚洲9 | 免费成视频 | 91精品久久久久久久久久久久久 | 五月天综合在线 | 人人狠狠综合久久亚洲婷 | 欧美另类亚洲 | 欧美亚洲成人xxx | 国产精品欧美激情在线观看 | 久操中文字幕在线观看 | 日韩在线视频线视频免费网站 | 成人h视频在线 | 国产91精品高清一区二区三区 | 91污污| 爱色av.com| av在线免费观看黄 | 国产精品porn| 99久久视频| 成年人免费观看在线视频 | 久久成人一区二区 | 欧美日韩精品免费观看 | 99r在线播放 | 亚洲国产午夜精品 | 久久精品5 | 色综合 久久精品 | 欧美91在线 | 中文av在线播放 | 欧美日韩视频精品 | www.久久久久| av丁香 | 国产黄色免费 | 中文字幕乱码日本亚洲一区二区 | 日韩欧三级 | www夜夜| 精品亚洲欧美无人区乱码 | 亚洲韩国一区二区三区 | 夜夜高潮夜夜爽国产伦精品 | 91麻豆精品国产91久久久使用方法 | 日韩国产精品一区 | 色综合久久久久综合体 | 狠狠狠色狠狠色综合 | 色亚洲激情 | 国产不卡在线 | 蜜桃视频在线视频 | 免费观看一级成人毛片 | 婷婷四房综合激情五月 | 人人爽网站 | 在线观看日韩精品 | 亚洲六月丁香色婷婷综合久久 | 国产一级二级视频 | 97国产一区二区 | 日韩成人精品一区二区三区 | 一区二区三区在线视频111 | 爱色av.com| 成人欧美日韩国产 | 9ⅰ精品久久久久久久久中文字幕 | 国产精品毛片一区二区在线看 | 成人国产精品久久久久久亚洲 | 国产明星视频三级a三级点| 三级免费黄 | 欧美大jb | 人人澡人人干 | 日本午夜在线亚洲.国产 | 少妇bbb好爽 | 亚洲三级黄色 | 亚洲成人国产 | 久久中文字幕导航 | 91精品对白一区国产伦 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 91c网站色版视频 | 国产日韩高清在线 | 色网站在线免费观看 | 日韩免费高清在线观看 | 日本福利视频在线 | 亚洲一级免费观看 | 狠狠狠干狠狠 | 激情视频国产 | 婷婷九九| 91在线你懂的 | 91九色在线视频观看 | 久香蕉 | 91九色蝌蚪国产 | av中文字幕网站 | 日韩高清免费无专码区 | 色婷婷视频在线观看 | 黄网站免费看 | 国产亚洲精品久久久网站好莱 | 日韩黄色大片在线观看 | 久久天堂亚洲 | 色综合久久久久久久久五月 | 欧美精品一区二区在线观看 | 国产免费高清 | 日本黄色免费播放 | 国产精品免费视频网站 | 国产伦精品一区二区三区高清 | 丁香综合激情 | 中文在线a天堂 | 九九免费观看全部免费视频 | 久久夜av| 亚洲欧美视频一区二区三区 | 精品国产乱码一区二 | 另类五月激情 | 久久99精品久久久久久清纯直播 | 麻豆免费观看视频 | 在线精品播放 | 欧美日韩在线免费观看 | 午夜精品视频在线 | 日韩免费视频在线观看 | 天天干一干| 国产精品毛片一区二区在线看 | 日本黄色免费大片 | 99视频精品全部免费 在线 | 亚洲一区二区视频在线 | 成人午夜毛片 | 久热爱 | 欧美成人理伦片 | 精品一区二区亚洲 | 黄色免费看片网站 | 91福利社在线观看 | 亚洲久草在线视频 | 欧美性粗大hdvideo | 日韩在线短视频 | 亚洲成av人影片在线观看 | 香蕉视频在线免费 | 97热久久免费频精品99 | 久久精品黄| 麻豆国产精品一区二区三区 | 91精品1区| 日韩一区二区三免费高清在线观看 | 国产h在线播放 | 中文视频在线 | 亚洲精品美女久久久 | 天天狠狠操| 日韩女同av| 亚洲精品午夜视频 | 亚洲精品国产精品国自产观看 | 美女网站在线观看 | 亚洲精品久久久蜜臀下载官网 | 久久精品中文字幕一区二区三区 | www.av在线.com | 亚洲日本va在线观看 | 五月综合在线观看 | 天天摸夜夜添 | 91香蕉视频好色先生 | www日韩视频| 国产一区二区综合 | 亚洲最新视频在线播放 | 日韩资源在线观看 | 日韩一级电影在线观看 | 久久免费观看少妇a级毛片 久久久久成人免费 | 久久99最新地址 | 亚洲乱码中文字幕综合 | 天堂av最新网址 | 激情久久五月天 | 国产玖玖在线 | 午夜婷婷在线播放 | 国产精品99在线观看 | 在线一区二区三区 | 91在线中字 | 久久久免费观看视频 | 精品国产人成亚洲区 | 欧美日韩国产一区二区在线观看 | 久久av福利 | 91漂亮少妇露脸在线播放 | 国产精品亚洲视频 | 国内精品久久久久影院男同志 | 国产精品久久99综合免费观看尤物 | 久久爱资源网 | 久久精品黄 |