在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RT-Thread記錄(一、版本開發環境及配合CubeMX)

矜辰所致 ? 來源:矜辰所致 ? 作者:矜辰所致 ? 2022-06-20 00:28 ? 次閱讀

期間幾個月時間關于 RT-Thread 的項目有好幾個,感覺最近 RT-Thread 越來越火,
在幾年前用過 RT-Thread,那個時候都還沒有RT-Thread Studio IDE,現在啥都有了。
RT-Thread官方資料也多,理論,示例,說明應有盡有,自己重新學習一邊,做個記錄貼。

目錄

前言
1、RT-Thread 版本(以哪個版本開始學習)
1.1 RT-Thread Nano
1.2 RT-Thread 標準版
1.3 RT-Thread Smart
2、RT-Thread 開發環境
2.1 開發板(自己畫的開發板)
2.2 開發工具
2.3 環境搭建
2.4 RT-Thread Studio For Vscode
3、第一個工程
3.1 根據自己環境新建工程
3.2 配合 CubeMX 配置使用
3.2.1 SConscript 文件修改
3.2.2 CubeMX 再次修改配置問題記錄
3.3 創建一個跑馬燈任務
————————————————

前言

作為一款國產的操作系統,相對其他操作系統,官網對大部分工程師來說友好到了極點 = =!

什么資料直接可以查看官網即可。所以有問題,先上官網!

1、RT-Thread 版本(以哪個版本開始學習)

目前來說,RT-Thread 主要分為3個大版本,這個在文檔中心就有,這里列出來根據自己的情況簡單說明一下:


1.1 RT-Thread Nano

RT-Thread Nano 和 FreeRTOS 是比較類似的東西 ,一個內核,Nano適用于一些 內存 空間小的MCU, 就比如我現在常用的 STM32L051C8 ,只有8KB 的RAM 空間,在講解FreeRTOS 的時候使用 STM32L051C8 不止一次的提到內存問題。

學習的話根據自己需要,建議還是從標準版本開始學習,因為標準版本包含Nano的一切,還多出了很多組件,方便使用的軟件包等。

實際應用的話,在一般普通的應用項目上,Nano估計用起來還更多,內存就是成本!

RT-Thread Nano 的資料可以查看官方文檔中心,記住一點就行,它是一個極簡版的硬實時內核。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_19,color_FFFFFF,t_70,g_se,x_16


1.2 RT-Thread 標準版

RT-Thread 標準版本是包含 Nano 的,標準版帶帶有豐富的組件軟件包,這是它與 FreeRTOS 主要區別之一,在一些應用,比如 MQTT,云端接入等使用上,RT-Thread 具備現成的軟件包,使用起來簡單方便。
學習的話建議從標準版 入手,雖然在某些情況下,豐富的組件,軟件包可能會讓初學者犯難,組件和軟件包到底是如何與硬件相互關聯,但是只要確實去學習了解了以后,才會發現其便捷之處,同時了解了原理,也能夠針對自己的應用對組件進行對應的裁剪,增加,更加能夠滿足各種項目需求。

介紹還是去官網查看,簡介截取自官網:
RT-Thread 與其他很多 RTOS 如 FreeRTOS、uC/OS 的主要區別之一是,它不僅僅是一個實時內核,還具備豐富的中間層組件:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16


即便是選好了 RT-Thread 標準版 作為學習的版本,但是就標準版而言,也有很多版本:

在這里插入圖片描述

具體版本的不同以及如何選擇可以參考官方說明。

1.3 RT-Thread Smart

RT-Thread Smart 幾年前是沒有的,最近出來的分之,是針對于帶 MMU 的芯片,就是以前可以跑 Linux 系統的芯片。
比如近兩年比較火的多家出了開發板的 STM32MP1 和 IMX6ULL 兩款系列芯片。出的開發板最初當然都是以 Linux 系統為主,現在 RT-Thread 也能夠跑在這些芯片上了。
這個版本就不是本欄目的博文需要記錄的了,如果后期在寫完 嵌入式Linux 后,有機會也來做些記錄。

簡介截取自官網:
RT-Thread Smart(簡稱 rt-smart)是基于 RT-Thread 操作系統衍生的新分支,面向帶 MMU,中高端應用的芯片,例如 ARM Cortex-A 系列芯片,MIPS 芯片,帶 MMU 的 RISC-V 芯片等。rt-smart 在 RT-Thread 操作系統的基礎上啟用獨立、完整的進程方式,同時以混合微內核模式執行。

2、RT-Thread 開發環境

2.1 開發板(自己畫的開發板)

通過上面的介紹,我們將以標準版來進行 RT-Thread 的記錄。

板子使用的是自己以前畫的 STM32F103VGT6(ROM:1MB RAM:96KB):

在這里插入圖片描述

2.2 開發工具

還記得以前學習 RT-Thread 的時候,還沒有出 RT-Thread Studio IDE,整體的工程搭建 需要用到 ENV,SCons 等工具,不管是MDK,IRA,GCC工具鏈開發,都得先用到 ENV 和Scons 工具,配置操作一遍, 對于初學者來說,很不友好,具體的這些詳細介紹可以在官網查詢:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

最初的學習根據官方的文檔手冊視頻等內容,自己倒是也用起來了,但是,一段時間沒用,命令還是忘得差不多了。
現在好了,RT-Thread 官方團隊推出了 RT-Thread Studio 。RT-Thread Studio把以前的這些開發工具集成好了,不用死記以前那些命令,界面圖形話的工程搭建相對以前更加的簡便和直觀。


作為國產的 IDE,界面操作那是相當的友好, 我們本系列的教程是以項目為目的,為了能夠使用 RT-Thread 完成一個完整項目的開發,所以不會去花太多精力去折騰 工程架構的搭建之類的 事情,所以使用 RT-Thread Studio 是完美的選擇。

2.3 環境搭建

根據上面介紹,我們定下使用 RT-Thread Studio 來作為本系列博文的開發 IDE,安裝下載可直接在官方找到,根據手冊安裝走起來:

在這里插入圖片描述


等待安裝完成,運行軟件需要登錄一下 RT-Thread 賬號:

在這里插入圖片描述

根據官方文檔說明,第一步先安裝更新 SDK 包:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

在我這臺電腦上,以前搭建過環境,我有點感覺 RT-Thread Studio 會自動識別電腦中的環境變量,以找到電腦上已經存在的環境,比如上面的版本,和我使用的 GCC 工具鏈版本:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

安裝好了SDK包,基本上就可以開始建立工程測試了。

再次說明, RT-Thread Studio 使用手冊,界面配置等操作,官方文檔,視頻,都有詳細的說明。 這里記錄的是自己使用中必須的步驟。

2.4 RT-Thread Studio For Vscode

(待更新… 先還是使用 IDE 熟練起來,再來 Vscode 里用插件玩玩,畢竟相對來說 還是 IDE 配置更簡單)

3、第一個工程

3.1 根據自己環境新建工程

在上面操作結束以后,我們直接來新建一個工程,新建工程之前:

再次說明一下本文說使用的環境:

  1. 使用 RT-Thread 標準版
  2. 自己畫的開發板,基于STM32F103VGT6

所以我們在 RT-Thread Studio 里面新建項目的界面做如下選擇:

在這里插入圖片描述

點擊完成,等待工程自動生成,因為串口1是在新建工程的時候默認已經配置好,然后直接編譯一下,燒錄:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

通過串口助手連接上開發板,波特率默認的位115200:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

可以看到 RT-Thread 已經在板子上正常運行起來:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

3.2 配合 CubeMX 配置使用

上面的通過終端看到的測試結果,也只用到了 串口 功能,至于萬年不變的開局跑馬燈,我們都沒有看到,那么如何真正的在硬件上能夠體現出來呢,在官方文檔也有對應的介紹:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

但是官方這部分的說明不是太多,我們這里還是需要測試說明下,測試結果前面還算順利,后面的操作也有一些小問題,需要注意?。?!

點擊工程目錄下面的 CubeMx Setting:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

打開了以后注意,以前使用 CubeMx 該怎么設置就怎么設置,時鐘,串口(如果只使用打印串口,不用其他串口通訊這里可以不設置,工程中已經做過打印串口初始化),IO口等,雖然開始我們在工程建立的時候已經是能過時鐘,串口,但是打開了這個設置,就得重新全部設置一遍!

我們根據步驟,把基本的 時鐘,調試方式,串口,LED,按鍵 配置好進行初步的簡單測試。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

在生產代碼前把 Code Generator 欄目勾選一下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

然后點擊生成工程。

工程生成后不需要打開,但是必須關閉 CubeMX,這樣才能在RT-Thread Studio 上正常進行下面的操作 !

生成工程以后,關閉CubeMX會提示cubemx.ioc 已經被修改,是否要保存配置,點擊確定,如下圖:

poYBAGKtyQSAAwIzAAAq4AVOpO8896.png

分析一下使用了CubeMX生成代碼后的工程:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

  • 原來的hal_conf.h就被cubeMX新生成的替換掉
  • RT-Thread Studio 會且只會使用CubeMX生成的 Inc 和 Src 文件夾下的內容
  • 主函數 RT-Thread Studio 會在 CubeMX生成的 main 函數前用 _WEAK 聲明
  • 時鐘初始化函數,會使用 CubeMx 中的設置
poYBAGKtyQSAXF-mAABOWXHMRZo984.png

一些基本的構建現在版本的RT-Thread Studio 都會自動設置好,通過SConscript

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

工程可以直接編譯通過。

我們主函數是在 applications 下面的 main.c 文件中,所以使用CubeMX生成的配置,我們需要在applications 下面的 main.c 文件中包含對應的頭文件,和函數main中調用初始化。

3.2.1 SConscript 文件修改

但是沒想到在這里遇到了一個問題:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

仔細看了看,發現這是找不到這兩個初始化的實現,看著工程架構中確實沒有這兩個.c文件,研究了半天,還是找到方法,修改SConscript文件,類似Makefile:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

注意!修改完SConscript之后,是需要同步 scons 配置才能生效的,操作如下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_19,color_FFFFFF,t_70,g_se,x_16

同步 scons 以后 cubemx -> Src -> 下面多了對應的 .c 文件,重新構建能按照我們的設置編譯了!

額外說明:

上面我示例中我還是使用了MX_USART1_UART_Init();,其實這里并不需要,因為串口1 在工程 drivers 文件夾里的drv_usart.c 文件中已經使用INIT_BOARD_EXPORT(rt_hw_usart_init); 初始化了,所以不需要再次初始化,這里如果再配置一次,也不會出現問題,但是最好是不需要。

通過 Makefile 可以直接看到我們 CubeMX 生成了多少 .c 文件:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_17,color_FFFFFF,t_70,g_se,x_16

我們在上面除了 RT-Thread Studio 默認給我們添加的,我們還添加了 GPIO 和 串口 的驅動文件,還有一個 it 是和中斷有關的,我們并沒有添加??!

那么是不是中斷就無法響應了呢?

還有,如果不添加 CubeMX生成的 GPIO 和 串口 的驅動文件,不使用CubeMX中的初始化,是不是GPIO就不能用了呢?

這些問題暫時不做解釋,RT-Thread 內核自己還有板級驅動, 因為這是后面文章需要介紹的 RT-Thread 內核驅動的一些知識。

3.2.2 CubeMX 再次修改配置問題記錄

第一次我們為了測試,配置比較簡單,所以初始化的外設也比較少,隨著我們學習的深入,需要添加的外設越來越多,我們需要使用 CubeMX setting 再次修改配置,那么一些問題也隨之而來,這里就做個記錄:

1、__WEAK int main(void) 前面的 __WEAK 需要手動添加,注意這兩個下橫線是兩個英文的下劃線。

pYYBAGKtyQ6Ab0CTAAAR7eZOn7Y511.png

2、新添加的外設文件,需要通過修改SConscript文件添加,步驟就按照上面說明:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

注意有個文件stm32f1xx_it.c是不建議加的,因為其中的一些中斷響應函數在 RT-Thread 內部有實現這里會沖突,除非自己完全能懂哪些需要哪些不需要。

(stm32f1xx_it.c這個文件在后面 RT-Thread 應用篇 — 在STM32L051上使用 RT-Thread 系列博文中會使用到,里面說明了如何修改)

3.3 創建一個跑馬燈任務

完成上述配置,我們開始可以跑馬燈走起來了,既然用了 RTOS,那么當然是通過創建 一個 LED 跑馬燈任務來完成我們的快速上手。

我們在程序中 靜態創建一個線程 led1_blink ,上電就啟動調度,開始運行;
動態創建一個線程 led2_blink, 需要通過命令啟動調度,程序源碼如下:

/*
 * Copyright (c) 2006-2022, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2022-02-16     QZH    	first lesson for test
 */

#include 
#include "main.h"
#include "usart.h"
#include "gpio.h"

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include 

static struct rt_thread led1_thread;    //led1線程
static char led1_thread_stack[256];

static rt_thread_t led2_thread = RT_NULL; //led2線程

static void led1_thread_entry(void *par){
    while(1){
        LED1_ON;
        rt_thread_mdelay(1000);
        LED1_OFF;
        rt_thread_mdelay(1000);
    }
}

static void led2_thread_entry(void *par){
    while(1){
        LED2_ON;
        rt_thread_mdelay(500);
        LED2_OFF;
        rt_thread_mdelay(500);
    }
}

int main(void)
{
    MX_GPIO_Init();
    MX_USART1_UART_Init();
    int count = 1;

    rt_err_t rst2;
    rst2 = rt_thread_init(&led1_thread,
                        "led1_blink ",
                        led1_thread_entry,
                        RT_NULL,
                        &led1_thread_stack[0],
                        sizeof(led1_thread_stack),
                        RT_THREAD_PRIORITY_MAX -1,
                        50);

    if(rst2 == RT_EOK){
        rt_thread_startup(&led1_thread);
    }

    while (count++)
    {
        if(count < 11){
            LOG_D("Hello RT-Thread!%d",count);
        }
        if(count >= 0XFFFFFF00) count = 0;
        rt_thread_mdelay(1000);
    }

    return RT_EOK;
}

void led2_Blink(){
    led2_thread = rt_thread_create("led2_blink",
                            led2_thread_entry,
                            RT_NULL,
                            256,
                            RT_THREAD_PRIORITY_MAX -1,
                            50);

    /* 如果獲得線程控制塊,啟動這個線程 */
    if (led2_thread != RT_NULL)
        rt_thread_startup(led2_thread);
}

MSH_CMD_EXPORT(led2_Blink, Led2 sample);

上述代碼測試的結果如下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_18,color_FFFFFF,t_70,g_se,x_16

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RT-Thread
    +關注

    關注

    31

    文章

    1305

    瀏覽量

    40386
  • CubeMx
    +關注

    關注

    0

    文章

    31

    瀏覽量

    1379
收藏 人收藏

    評論

    相關推薦

    RT-Thread記錄(三、RT-Thread線程操作函數)

    講完了RT-Thread開發環境,啟動流程,啟動以后當然是開始跑線程了,那么自然我們得學會如何創建線程以及線程的有關操作。
    的頭像 發表于 06-20 00:31 ?7036次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>記錄</b>(三、<b class='flag-5'>RT-Thread</b>線程操作函數)

    RT-Thread記錄(二、RT-Thread內核啟動流程)

    在前面我們RT-Thread Studio工程基礎之上講RT-Thread內核啟動流程.
    的頭像 發表于 06-20 00:30 ?5096次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>記錄</b>(二、<b class='flag-5'>RT-Thread</b>內核啟動流程)

    rt-thread開發環境

    首先介紹下開發環境:硬件:STM32F107VC金牛開發板。 rt-thread版本:2.0.0下載器:jlink V9
    發表于 08-06 08:05

    記錄RT-Thread Studio配合CubeMX聯合開發遇到的坑

    前言邊開發記錄的過程,寫的可能不是很好,請見諒。在使用CubeMX配合studio聯合開發的時候遇到幾個大坑,在此
    發表于 06-28 14:33

    【原創精選】RT-Thread征文精選技術文章合集

    、I2C通訊)STM32L051上使用RT-Thread (四、串口通訊)STM32L051上使用RT-Thread (五、完結篇)2. RT-Thread開發
    發表于 07-26 14:56

    RT-Thread開發,如何有效學習RT-Thread的五個步驟

    RT-Thread推出RT-Thread Inside戰略開放RT-Thread開發平臺授權合作,與硬件十萬個為什么合作首次推出第
    的頭像 發表于 09-25 09:55 ?3.5w次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>開發</b>,如何有效學習<b class='flag-5'>RT-Thread</b>的五個步驟

    記錄——基于 RT-Thread 實現 USB 虛擬串口

    記錄——基于 RT-Thread 實現 USB 虛擬串口記錄下我在正點原子 F429 阿波羅開發板上實現 USB 虛擬串口的過程,希望可以
    發表于 12-02 17:21 ?6次下載
    <b class='flag-5'>記錄</b>——基于 <b class='flag-5'>RT-Thread</b> 實現 USB 虛擬串口

    RT-Thread零基礎快速入門第0講——環境安裝

    RT-Thread快速入門第1講——環境安裝目錄RT-Thread快速入門第1講——環境安裝、 前言二、 編程資料下載三、 ENV工具下載
    發表于 12-03 14:21 ?14次下載
    <b class='flag-5'>RT-Thread</b>零基礎快速入門第0講——<b class='flag-5'>環境</b>安裝

    RT-Thread STM32 配置系統時鐘(使用外部晶振)

    RT-Thread STM32 配置系統時鐘開發環境芯片:STM32F103RCT6RT-Thread Studio: V1.0.6(現在已經更新到1.1.3,由于本人使用RTT
    發表于 12-14 18:45 ?14次下載
    <b class='flag-5'>RT-Thread</b> STM32 配置系統時鐘(使用外部晶振)

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    機智云設備移植RT-Thread

    開發環境:Keil版本:V5.30RT-Thread版本:3.1.5STM32cubeMX:V6
    的頭像 發表于 04-19 18:39 ?1009次閱讀
    機智云設備移植<b class='flag-5'>RT-Thread</b>

    基于 RT-Thread 的 RoboMaster 電控框架(

    由于 RT-Thread 穩定高效的內核,豐富的文檔教程,積極活躍的社區氛圍,以及設備驅動框架、Kconfig、Scons、日志系統、海量的軟件包……很難不選擇 RT-Thread 進行項目開發
    的頭像 發表于 09-19 19:55 ?817次閱讀

    RT-Thread v5.0.2 發布

    RT-Thread 代碼倉庫地址: ●? https://github.com/RT-Thread/rt-thread RT-Thread 5.0.2
    的頭像 發表于 10-10 18:45 ?1565次閱讀
    <b class='flag-5'>RT-Thread</b> v5.0.2 發布

    RT-Thread移植使用webserver (lwip+httpd)

    開發環境:野火的stm32f407,rt-thread studio版本版本: 2.2.6,stm32f4的資源包為0.2.2,
    的頭像 發表于 10-12 12:49 ?1467次閱讀
    <b class='flag-5'>RT-Thread</b>移植使用webserver (lwip+httpd)

    RT-Thread使用Soft RTC(軟件模擬RTC)

    開發環境:野火的stm32f407,rt-thread studio版本版本: 2.2.6,rt-th
    的頭像 發表于 10-12 17:39 ?765次閱讀
    <b class='flag-5'>RT-Thread</b>使用Soft RTC(軟件模擬RTC)
    主站蜘蛛池模板: 亚洲一区中文 | 免费在线播放黄色 | 韩国黄色三级视频 | www三级免费| 亚洲一区二区视频 | 国产一级毛片国语版 | 在线观看视频免费入口 | 欧美午夜性刺激在线观看免费 | 国产亚洲精品免费 | 亚州人成网在线播放 | 天天爽夜夜爽精品视频一 | 在线色资源 | 唐人社电亚洲一区二区三区 | 在线你懂得| 大象焦伊人久久综合网色视 | 免费播放黄色 | 欧美精品一区视频 | www操| 日本黄色小视频 | 亚洲精品在线视频观看 | 亚洲男人的天堂成人 | 大蕉久久伊人中文字幕 | 97人人干| 欧美a欧美| 韩日成人 | 亚洲伊人成人 | 欧美性猛片xxxxⅹ免费 | 国产伦精品一区二区三区网站 | 天天做天天爱天天爽综合区 | 狠狠干激情 | 国产福利萌白酱喷水视频铁牛 | 成人影院在线观看视频 | 大香伊在人线免费 | 亚洲综合激情 | 日韩免费高清一级毛片在线 | 亚洲国产成人久久午夜 | 国产免费久久精品99久久 | 日本精品视频四虎在线观看 | 丁香视频在线 | bt天堂网在线 | 日本黄色高清视频 |