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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

實(shí)時(shí)操作系統(tǒng)FreeRTOS應(yīng)用之任務(wù)調(diào)試信息獲取

嵌入式技術(shù) ? 來(lái)源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2022-06-08 09:12 ? 次閱讀

1.任務(wù)相關(guān)函數(shù)

1.1獲取任務(wù)狀態(tài)函數(shù)vTaskGetInfo()

void vTaskGetInfo( TaskHandle_t xTask,TaskStatus_t * pxTaskStatus,

BaseType_t xGetFreeStackSpace, eTaskState eState );

函數(shù)功能:獲取指定任務(wù)的狀態(tài),任務(wù)狀態(tài)信息保存在pxTaskStatus中。
使用此函數(shù)需要configUSE_TRACE_FACILITY == 1
形參:
xTask 要獲取的任務(wù)句柄
pxTaskStatus 任務(wù)信息結(jié)構(gòu)體變量
xGetFreeStackSpace 常設(shè)置為pdTRUE,用來(lái)檢測(cè)堆棧空間歷史剩余最小值。值越小說(shuō)明越近堆棧溢出。
eState 保存任務(wù)運(yùn)行狀態(tài)。獲取任務(wù)運(yùn)行狀態(tài)時(shí)間比較長(zhǎng),為了加快vTaskGetInfo函數(shù)執(zhí)行可直接將 TaskStatus_t中的字段eCurrentState就可以由用戶直接賦值,參數(shù)eState就是要賦的值。若不考 慮時(shí)間因素,可以直接將eState設(shè)置為eInvalid,這樣任務(wù)狀態(tài)信息就由函數(shù)vTaskGetInfo去獲取。
返回值 無(wú)。

任務(wù)信息結(jié)構(gòu)體TaskStatus_t

typedef struct xTASK_STATUS
{
TaskHandle_t xHandle; //任務(wù)句柄
const char *pcTaskName ; //任務(wù)名稱
UBaseType_t xTaskNumber; //任務(wù)編號(hào)
eTaskState eCurrentState; // 當(dāng)前任務(wù)狀態(tài), eTaskState是枚舉類型
UBaseType_t uxCurrentPriority; //當(dāng)前優(yōu)先級(jí)
UBaseType_t uxBasePriority; //任務(wù)基礎(chǔ)優(yōu)先級(jí)
uint32_t ulRunTimeCounter; //任務(wù)運(yùn)行總時(shí)間
StackType_t *pxStackBase; //任務(wù)堆棧基地址
configSTACK_DEPTH_TYPE usStackHighWaterMark;//從任務(wù)創(chuàng)建以來(lái)任務(wù)堆棧剩余的最小值,值越小接近 0越有溢出風(fēng)險(xiǎn)
} TaskStatus_t;

任務(wù)狀態(tài) eTaskState

typedef enum
{
eRunning = 0, //運(yùn)行狀態(tài)
eReady, //就緒
eBlocked, //阻塞
eSuspended, //掛起
eDeleted, //刪除
eInvalid //無(wú)效
} eTaskState;

1.2 查詢每個(gè)任務(wù)運(yùn)行時(shí)間vTaskGetRunTimeStats()

void vTaskGetRunTimeStats( char * pcWriteBuffer )
形參
pcWriteBuffer --- 保存任務(wù)時(shí)間信息的存儲(chǔ)區(qū),存儲(chǔ)區(qū)要足夠大來(lái)保存該信息
函數(shù)功能
查詢每個(gè)任務(wù)的運(yùn)行時(shí)間。使用此函數(shù)需要( configGENERATE_RUN_TIME_STATS == 1 ) && (configUSE_STATS_FORMATTING_FUNCTIONS>0)&&(configSUPPORT_DYNAMIC_ALLOCATION == 1 )
若 configGENERATE_RUN_TIME_STATS==1 的話還需要設(shè)置下面宏。
portCONFIGURE_TIMER_FOR_RUN_TIME_STATS(), 此宏用來(lái)初始化一個(gè)外設(shè)給統(tǒng)計(jì)功能提供時(shí)間基準(zhǔn),一般采用定時(shí)器。這個(gè)時(shí)基的分辯率一定要高于FreeRTOS的系統(tǒng)時(shí)鐘,一般這個(gè)時(shí)基的時(shí)間精度比系統(tǒng)時(shí)鐘高10~20倍就可以了。
portGET_RUN_TIME_COUNTER_VALUE 或portALT_GET_RUN_TIME_COUNTER_VALUE這二者實(shí)現(xiàn)其中一個(gè),這兩個(gè)宏用于提供當(dāng)前時(shí)基的時(shí)間值。

1.3 查詢?nèi)蝿?wù)詳細(xì)信息vTaskList()

void vTaskList( char * pcWriteBuffer )
形參:
char * pcWriteBuffer -- 保存任務(wù)狀態(tài)信息。

函數(shù)功能:查詢?nèi)蝿?wù)任務(wù)詳細(xì)信息,使用此函數(shù)( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 )&&( configSUPPORT_DYNAMIC_ALLOCATION == 1 )。
表信息包括任務(wù)名稱、任務(wù)狀態(tài)、優(yōu)先級(jí)、堆棧剩余空間大小、任務(wù)編號(hào)
任務(wù)狀態(tài): 運(yùn)行狀態(tài)(X)、阻塞(B)、就緒(R)、刪除(D)、掛起(S)
任務(wù)編號(hào):這個(gè)編碼每個(gè)任務(wù)都是唯一的,當(dāng)多個(gè)任務(wù)使用同一任務(wù)名時(shí)可以通過(guò)此編號(hào)來(lái)區(qū)分。

2 示例

2.1 創(chuàng)建任務(wù)

#define START_TASK_PRIO 1        //任務(wù)優(yōu)先級(jí)
#define START_STK_SIZE 128       //任務(wù)堆棧大小
TaskHandle_t StartTask_Handler;   //任務(wù)句柄
void start_task(void *pvParameters);//任務(wù)函數(shù)

#define LED0_TASK_PRIO 2     //任務(wù)優(yōu)先級(jí),數(shù)字越大優(yōu)先級(jí)越高
#define LED0_STK_SIZE 128     //任務(wù)堆棧大小
TaskHandle_t LED0Task_Handler; //任務(wù)句柄
void LED0_task(void);         //任務(wù)函數(shù)

#define Quer_TASK_PRIO 2     //任務(wù)優(yōu)先級(jí)
#define Quer_STK_SIZE 128      //任務(wù)堆棧大小
TaskHandle_t QuerTask_Handler; //任務(wù)句柄
void Query_task(void);          //任務(wù)函數(shù)
int main()
{
	Beep_Init();//蜂鳴器初始化
	LED_Init();//LED初始化
	KEY_Init();
	Usart1_Init(115200);//串口1初始化
	/*創(chuàng)建任務(wù)*/
	xTaskCreate((TaskFunction_t)start_task,//任務(wù)函數(shù)
							(const char *)"start_task",//任務(wù)名稱	
							(uint16_t)START_STK_SIZE,//堆棧大小
							NULL,           //傳遞給任務(wù)函數(shù)的參數(shù)
							(UBaseType_t)START_TASK_PRIO,//任務(wù)優(yōu)先級(jí)
							(TaskHandle_t *)&StartTask_Handler//任務(wù)句柄
							);
	vTaskStartScheduler();     //開(kāi)啟任務(wù)調(diào)度		
}
/*開(kāi)始任務(wù)函數(shù)*/
void start_task(void *pvParameters)
{
	taskENTER_CRITICAL();  //進(jìn)入臨界區(qū)
	//創(chuàng)建LED0任務(wù)
	xTaskCreate( (TaskFunction_t  )LED0_task,//任務(wù)函數(shù)
				(const char    *)"LED0_task",//任務(wù)名稱
				 (uint16_t)LED0_STK_SIZE,//堆棧大小
					NULL,           //傳遞給任務(wù)函數(shù)的參數(shù)
				 (UBaseType_t   )LED0_TASK_PRIO,//任務(wù)優(yōu)先級(jí)
				 (TaskHandle_t *)&LED0Task_Handler);//任務(wù)句柄
	xTaskCreate(  (TaskFunction_t )Query_task,//任務(wù)函數(shù)
				(const char    *)"Query_task",//任務(wù)名稱
				(uint16_t )Quer_STK_SIZE,//堆棧大小
				NULL,           //傳遞給任務(wù)函數(shù)的參數(shù)
				(UBaseType_t    )Quer_TASK_PRIO,//任務(wù)優(yōu)先級(jí)
				(TaskHandle_t  *)&QuerTask_Handler);//任務(wù)句柄
	vTaskDelete(StartTask_Handler); //刪除開(kāi)始任務(wù)	
	taskEXIT_CRITICAL();            //退出臨界區(qū)						
}

2.2 任務(wù)1 程序正常運(yùn)行LED指示燈

void LED0_task(void)
{
	while(1)
	{
		LED1=!LED1;
		Delay_Ms(500);
	}
}

2.3 任務(wù)2:通過(guò)按鍵查詢?nèi)蝿?wù)狀態(tài)

char RunTimeInfo[400];//保存任務(wù)信息
void Query_task(void)//任務(wù)函數(shù)
{
	u8 key;
	TaskStatus_t task_info;//保存任務(wù)信息
	while(1)
	{
		key=KEY_GetVal();
		if(key==1)//獲取任務(wù)運(yùn)行時(shí)間,任務(wù)運(yùn)行時(shí)間FreeRTOSRunTimeTicks*50us
		{
			memset(RunTimeInfo,0,400);
			vTaskGetRunTimeStats(RunTimeInfo);//獲取每個(gè)任務(wù)運(yùn)行時(shí)間
			printf("%s\r\n",RunTimeInfo);
		}
		if(key==2)//獲取任務(wù)狀態(tài)
		{
			vTaskGetInfo(NULL,&task_info,pdTRUE,eInvalid);//獲取當(dāng)前任務(wù)狀態(tài)
			printf("task name:%s\r\n",task_info.pcTaskName);//任務(wù)名
			printf("task num:%ld\r\n",task_info.xTaskNumber);//任務(wù)編號(hào)
			printf("task stat:%d\r\n",task_info.eCurrentState);//任務(wù)狀態(tài)
			printf("task baseaddr:%p\r\n",task_info.pxStackBase);//任務(wù)堆棧基地址
			printf("task priority:%ld\r\n",task_info.uxBasePriority);//任務(wù)基礎(chǔ)優(yōu)先級(jí)
			printf("tast now priority:%ld\r\n",task_info.uxCurrentPriority);//任務(wù)當(dāng)前優(yōu)先級(jí)
			printf("tast memory size:%d\r\n",task_info.usStackHighWaterMark);//任務(wù)歷史剩余堆棧最小空間
			printf("tast time:%d\r\n",task_info.ulRunTimeCounter);//任務(wù)運(yùn)行總時(shí)間	
		}
		if(key==3)//查詢?nèi)蝿?wù)詳細(xì)信息
		{
			memset(RunTimeInfo,0,400);
			vTaskList(RunTimeInfo);//獲取任務(wù)狀態(tài)信息
			printf("%s\r\n",RunTimeInfo);
		}
		Delay_Ms(10);
	}
}

2.4 獲取任務(wù)運(yùn)行時(shí)間

(1)獲取任務(wù)運(yùn)行時(shí)間時(shí)需要提供時(shí)間基準(zhǔn),要設(shè)置相應(yīng)的宏,在FreeRTOSconfig.h中

#define configGENERATE_RUN_TIME_STATS	   1     //為1時(shí)啟用運(yùn)行時(shí)間統(tǒng)計(jì)功能 
#define configUSE_STATS_FORMATTING_FUNCTIONS   1
#define configSUPPORT_DYNAMIC_ALLOCATION     1        //支持動(dòng)態(tài)內(nèi)存申請(qǐng)

(2)提供相應(yīng)時(shí)間基準(zhǔn)函數(shù),在timer.h中。
設(shè)置時(shí)間基準(zhǔn)函數(shù)用戶只需要產(chǎn)生時(shí)基單元,設(shè)置好相關(guān)的宏,不需要用戶調(diào)用。在設(shè)置時(shí)間基準(zhǔn)需要保證該時(shí)間基準(zhǔn)的頻率高于FreeRTOS系統(tǒng)頻率,要是系統(tǒng)頻率的10~20倍。
本示例的FreeRTOS系統(tǒng)頻率為configTICK_RATE_HZ ( ( TickType_t ) 1000 ) ,也就是FreeRTOS系統(tǒng)時(shí)間為1ms,所以獲取任務(wù)運(yùn)行時(shí)間的時(shí)間基準(zhǔn)為50us。

/*******用于給FreeRTOS計(jì)算任務(wù)運(yùn)行時(shí)間提供時(shí)間基準(zhǔn)*******/
volatile unsigned long long FreeRTOSRunTimeTicks;
void ConfigureTimeForRunTimeStas(void)//不需要用戶調(diào)用,只需實(shí)現(xiàn)功能即可
{
	FreeRTOSRunTimeTicks=0;
	Tim1_Init(72,50);//初始化定時(shí)器1,周期50us,cnt+1時(shí)間為1us
}
void TIM1_UP_IRQHandler(void)
{
	if(TIM1->SR&1<<0)
	{
		FreeRTOSRunTimeTicks++;//運(yùn)行時(shí)間統(tǒng)計(jì)基數(shù)計(jì)數(shù)器+1
	}
	TIM1->SR=0;//清除標(biāo)志	
}

(3)通過(guò)#define進(jìn)行宏定義,給獲取任務(wù)時(shí)間函數(shù)vTaskGetRunTimeStats()提供時(shí)間基準(zhǔn)接口。在FreeRTOSconfig.h中。

//用于給獲取任務(wù)函數(shù)提供時(shí)間基準(zhǔn)
#defineportCONFIGURE_TIMER_FOR_RUN_TIME_STATS()  ConfigureTimeForRunTimeStas() 
//用于提供當(dāng)前時(shí)間基準(zhǔn)變量 unsigned long long類型
#define portGET_RUN_TIME_COUNTER_VALUE()  FreeRTOSRunTimeTicks 

獲取任務(wù)運(yùn)行時(shí)間

pYYBAGKXDs6ADoxkAABt65t6uA0899.png

2.5 獲取指定任務(wù)信息

獲取指定任務(wù)信息需要設(shè)置宏configUSE_TRACE_FACILITY == 1,在FreeRTOSconfig.h中。

#define configUSE_TRACE_FACILITY	1       //為1啟用可視化跟蹤調(diào)試

執(zhí)行結(jié)果:

pYYBAGKXD0GAasBxAAArvYnoq50322.png

2.6 列表方式獲取任務(wù)詳細(xì)信息

列表方式獲取任務(wù)詳細(xì)信息設(shè)置宏,F(xiàn)reeRTOSconfig.h中。

#define configUSE_TRACE_FACILITY	1       //為1啟用可視化跟蹤調(diào)試
#define configUSE_STATS_FORMATTING_FUNCTIONS	1 
#define configSUPPORT_DYNAMIC_ALLOCATION     1      //支持動(dòng)態(tài)內(nèi)存申請(qǐng)

執(zhí)行結(jié)果:

pYYBAGKXD42AH4zYAAAUVxt7oEw075.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6899

    瀏覽量

    123801
  • STM32
    +關(guān)注

    關(guān)注

    2273

    文章

    10926

    瀏覽量

    357767
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    484

    瀏覽量

    62414
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FreeRTOS嵌入式實(shí)時(shí)操作系統(tǒng)

      1 FreeRTOS操作系統(tǒng)功能   作為一個(gè)輕量級(jí)的操作系統(tǒng)FreeRTOS提供的功能包括:任務(wù)管理、時(shí)間管理、信號(hào)量、消息隊(duì)列、
    發(fā)表于 07-06 11:07 ?6602次閱讀
    <b class='flag-5'>FreeRTOS</b>嵌入式<b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b>

    實(shí)時(shí)操作系統(tǒng)FreeRTOS移植教程

    Free 即免費(fèi)的,RTOS 全稱是 Real Time Operating System,中文就是實(shí)時(shí)操作系統(tǒng)。注意,RTOS 不是指某一個(gè)確定的系統(tǒng),而是指一類系統(tǒng)。比如 uC/O
    的頭像 發(fā)表于 06-08 09:23 ?8830次閱讀
    <b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b><b class='flag-5'>FreeRTOS</b>移植教程

    【案例分享】FreeRTOS的嵌入式實(shí)時(shí)操作系統(tǒng)的實(shí)現(xiàn)

    FreeRTOS是一個(gè)源碼公開(kāi)的免費(fèi)的嵌入式實(shí)時(shí)操作系統(tǒng),通過(guò)研究其內(nèi)核可以更好地理解嵌入式操作系統(tǒng)的實(shí)現(xiàn)原理.本文主要闡述FreeRTOS
    發(fā)表于 07-23 04:30

    請(qǐng)問(wèn)freertos是硬實(shí)時(shí)操作系統(tǒng)嗎?

    freertos是硬實(shí)時(shí)操作系統(tǒng)嗎?都有哪些硬實(shí)時(shí)操作系統(tǒng)啊?
    發(fā)表于 06-13 09:00

    FreeRTOS實(shí)時(shí)操作系統(tǒng)

    FreeRTOS實(shí)時(shí)操作系統(tǒng),Nabto正在努力建立一個(gè)強(qiáng)大的FreeRTOS + Nabto組合的解決方案。我們最新推出AppMyProduct應(yīng)用平臺(tái)可幫助您快速開(kāi)發(fā)遠(yuǎn)程控制設(shè)備
    發(fā)表于 08-04 07:58

    實(shí)時(shí)任務(wù)操作系統(tǒng)(RTOS)

    任務(wù)、進(jìn)程和線程。實(shí)時(shí)任務(wù)操作系統(tǒng)(RTOS)是嵌入式應(yīng)用軟件的基礎(chǔ)和開(kāi)發(fā)平臺(tái),它是根據(jù)操作系統(tǒng)的工作特性
    發(fā)表于 08-24 06:34

    為什么要在單片機(jī)中使用實(shí)時(shí)任務(wù)操作系統(tǒng)

    為什么要在單片機(jī)中使用實(shí)時(shí)任務(wù)操作系統(tǒng)該視頻在113分10秒之后,講了實(shí)時(shí)操作系統(tǒng)的使用價(jià)值。老師講得非常好,我就不過(guò)多贅述了。(這個(gè)視頻
    發(fā)表于 08-24 06:02

    嵌入式實(shí)時(shí)操作系統(tǒng)FreeRTOS基本概述

    嵌入式實(shí)時(shí)操作系統(tǒng)FreeRTOS基本概述在嵌入式領(lǐng)域當(dāng)中,實(shí)時(shí)操作系統(tǒng)的應(yīng)用越來(lái)越廣泛了,目前嵌入式
    發(fā)表于 02-16 07:12

    基于FreeRTOS的嵌入式實(shí)時(shí)操作系統(tǒng)的原理和實(shí)現(xiàn)

    FreeRTOS是一個(gè)源碼公開(kāi)的免費(fèi)的嵌入式實(shí)時(shí)操作系統(tǒng),通過(guò)研究其內(nèi)核可以更好地理解嵌入式操作系統(tǒng)的實(shí)現(xiàn)原理.本文主要闡述FreeRTOS
    發(fā)表于 11-18 03:34 ?6726次閱讀

    什么是操作系統(tǒng)?FreeRTOS中文實(shí)用教程讓你快速入門FreeRTOS

    本文檔的主要內(nèi)容詳細(xì)介紹的是什么是操作系統(tǒng)?FreeRTOS中文實(shí)用教程讓你快速入門FreeRTOS帶你了解了1.認(rèn)識(shí)操作系統(tǒng) 2.輕松上手RTOS 3.
    發(fā)表于 09-12 16:51 ?276次下載
    什么是<b class='flag-5'>操作系統(tǒng)</b>?<b class='flag-5'>FreeRTOS</b>中文實(shí)用教程讓你快速入門<b class='flag-5'>FreeRTOS</b>

    嵌入式實(shí)時(shí)操作系統(tǒng)FreeRTOS在ARM7上移植實(shí)現(xiàn)

    嵌入式實(shí)時(shí)操作系統(tǒng)FreeRTOS在ARM7上移植實(shí)現(xiàn)(嵌入式開(kāi)發(fā)工程師待遇)-嵌入式實(shí)時(shí)操作系統(tǒng)Fre
    發(fā)表于 07-30 12:05 ?21次下載
    嵌入式<b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b><b class='flag-5'>FreeRTOS</b>在ARM7上移植實(shí)現(xiàn)

    STM32-初學(xué)FreeRTOS操作系統(tǒng)

    freeRTOS實(shí)時(shí)操作系統(tǒng)之一,特點(diǎn)是多線程,采用“輪換”的方式實(shí)現(xiàn)“并行”的效果,操作系統(tǒng)內(nèi)可以建立任務(wù),每個(gè)
    發(fā)表于 12-08 14:21 ?14次下載
    STM32-初學(xué)<b class='flag-5'>FreeRTOS</b><b class='flag-5'>操作系統(tǒng)</b>

    FreeRTOS:一個(gè)迷你的實(shí)時(shí)操作系統(tǒng)內(nèi)核

    ** 1、FreeRTOS** FreeRTOS是一個(gè)迷你的實(shí)時(shí)操作系統(tǒng)內(nèi)核。作為一個(gè)輕量級(jí)的操作系統(tǒng),功能包括:
    的頭像 發(fā)表于 06-29 17:15 ?1052次閱讀
    <b class='flag-5'>FreeRTOS</b>:一個(gè)迷你的<b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b>內(nèi)核

    FreeRTOS實(shí)時(shí)操作系統(tǒng)簡(jiǎn)述

    FreeRTOS是一個(gè)為嵌入式系統(tǒng)設(shè)計(jì)的開(kāi)源實(shí)時(shí)操作系統(tǒng)。它提供了一個(gè)多任務(wù)內(nèi)核和一系列組件功能,適合在資源受限的設(shè)備上管理
    發(fā)表于 09-19 12:37 ?1890次閱讀
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b>簡(jiǎn)述

    實(shí)時(shí)操作系統(tǒng)之RT-Thread及FreeRTOS

    RT-Thread與其他很多RTOS如FreeRTOS的主要區(qū)別之一是,它不僅僅是一個(gè)實(shí)時(shí)內(nèi)核,還具備豐富的中間層組件,如下圖所示。FreeRTOS和RT-Thread是兩種常見(jiàn)的嵌入式實(shí)時(shí)
    的頭像 發(fā)表于 05-29 08:10 ?4162次閱讀
    <b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b>之RT-Thread及<b class='flag-5'>FreeRTOS</b>
    主站蜘蛛池模板: 亚洲人毛茸茸bbxx | 天天操精品 | 人人玩人人干 | 劳拉淫欲护士bd字幕 | 欧美三级免费观看 | 午夜欧美性欧美 | 亚洲一区二区影院 | 欧美人成网站免费大全 | 国产精品久久久精品视频 | 午夜免费| 国产无套粉嫩白浆 | 男人午夜禁片在线观看 | h在线观看视频 | 四虎永久地址4hu紧急入口 | 两性色午夜视频免费老司机 | 婷婷丁香色 | 亚洲成成品网站有线 | 久久久久国产精品免费看 | 亚洲三级免费 | 亚洲va久久久噜噜噜久久狠狠 | 曰本三级香港三级人妇99视频 | 欧美婷婷色 | 妇乱子伦激情 | 欧美一级看片免费观看视频在线 | 一区二区在线免费观看 | 午夜看一级特黄a大片黑 | 中日韩一级片 | 午夜影院亚洲 | 亚洲日本色图 | 色网站综合 | 国产视频一区二 | 国产高清一级视频在线观看 | 高清配种视频xxxxx | 国产图片区 | 激情综合六月 | 三级黄色免费网站 | 亚洲区在线播放 | 亚洲乱码卡一卡二卡三 | 人人人人凹人人爽人人澡 | 天天av天天翘天天综合网 | 亚洲春色在线 |