久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當前位置:首頁 >> 技術中心 >> 單片機入門 >> 嵌入式μC/OS-II系統(tǒng)基礎之邵貝貝節(jié)選

嵌入式μC/OS-II系統(tǒng)基礎之邵貝貝節(jié)選

作者:admin 來源:不詳 發(fā)布時間:2018-05-18  瀏覽:39

 μC/OS-II 通過 uCOS_II.H 中定義的 OS_EVENT 數(shù)據(jù)結構來維護一個事件控制塊的所有信息

[程序清單 L6.1],也就是本章開篇講到的事件控制塊 ECB。該結構中除了包含了事件本身的定

義,如用于信號量的計數(shù)器,用于指向郵箱的指針,以及指向消息隊列的指針數(shù)組等,還定義

了等待該事件的所有任務的列表。

typedef struct {

void *OSEventPtr; /* 指向消息或者消息隊列的指針 */

INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /* 等待任務列表 */

INT16U OSEventCnt; /* 計數(shù)器(當事件是信號量時) */

INT8U OSEventType; /* 時間類型 */

INT8U OSEventGrp; /* 等待任務所在的組 */

} OS_EVENT;

.OSEventPtr 指針,只有在所定義的事件是郵箱或者消息隊列時才使用。 當所定義的事件是

郵箱時,它指向一個消息,而當所定義的事件是消息隊列時,它指向一個數(shù)據(jù)結構,詳見 6.06

節(jié)消息郵箱和 6.07 節(jié)消息隊列。

.OSEventTbl[] 和 .OSEventGrp 很像前面講到的 OSRdyTbl[]和 OSRdyGrp,只不過前兩者

包含的是等待某事件的任務,而后兩者包含的是系統(tǒng)中處于就緒狀態(tài)的任務。(見 3.04 節(jié) 就

緒表)

.OSEventCnt 當事件是一個信號量時,.OSEventCnt 是用于信號量的計數(shù)器,(見 6.05 節(jié)

信號量)。

e .OSEventType 定義了事件的具體類型。它可以是信號量(OS_EVENT_SEM)、郵箱

(OS_EVENT_TYPE_MBOX)或消息隊列(OS_EVENT_TYPE_Q)中的一種。用戶要根據(jù)該域的具體值

來調用相應的系統(tǒng)函數(shù),以保證對其進行的操作的正確性。

下面的代碼將一個任務放到事件的等待任務列表中。

程序清單 L6.2 ——將一個任務插入到事件的等待任務列表中

pevent->OSEventGrp |= OSMapTbl[prio >> 3];

pevent->OSEventTbl[prio >> 3] |= OSMapTbl[prio & 0x07];

程序清單 L6.3 從等待任務列表中刪除一個任務

if ((pevent->OSEventTbl[prio >> 3] &= ~OSMapTbl[prio & 0x07]) == 0) {

pevent->OSEventGrp &= ~OSMapTbl[prio >> 3];

}

程序清單 L6.4 在等待任務列表中查找最高優(yōu)先級的任務

y = OSUnMapTbl[pevent->OSEventGrp];

x = OSUnMapTbl[pevent->OSEventTbl[y]];

prio = (y << 3) + x;

void OSEventWaitListInit (OS_EVENT *pevent)

{

INT8U i;

pevent->OSEventGrp = 0x00;

for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {

pevent->OSEventTbl[i] = 0x00;

}

}

程序清單 L6.6 使一個任務進入就緒狀態(tài)

void OSEventTaskRdy (OS_EVENT *pevent, void *msg, INT8U msk)

{

OS_TCB *ptcb;

INT8U x;

INT8U y;

INT8U bitx;

INT8U bity;

INT8U prio;

y = OSUnMapTbl[pevent->OSEventGrp]; (1)

bity = OSMapTbl[y]; (2)

x = OSUnMapTbl[pevent->OSEventTbl[y]]; (3)

bitx = OSMapTbl[x]; (4)

prio = (INT8U)((y << 3) + x); (5)

if ((pevent->OSEventTbl[y] &= ~bitx) == 0) { (6)

pevent->OSEventGrp &= ~bity;

}

ptcb = OSTCBPrioTbl[prio]; (7)

ptcb->OSTCBDly = 0; (8)

ptcb->OSTCBEventPtr = (OS_EVENT *)0; (9)

#if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN

ptcb->OSTCBMsg = msg; (10)

#else

msg = msg;

#endif

ptcb->OSTCBStat &= ~msk; (11)

if (ptcb->OSTCBStat == OS_STAT_RDY) { (12)

OSRdyGrp |= bity; (13)

OSRdyTbl[y] |= bitx;

}

}

程序清單 L6.7 使一個任務進入等待狀態(tài)

void OSEventTaskWait (OS_EVENT *pevent)

{

OSTCBCur->OSTCBEventPtr = pevent; (1)

if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) { (2)

OSRdyGrp &= ~OSTCBCur->OSTCBBitY;

}

pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX; (3)

pevent->OSEventGrp |= OSTCBCur->OSTCBBitY;

}

程序清單 L6.8 因為等待超時將任務置為就緒狀態(tài)

void OSEventTO (OS_EVENT *pevent)

{

if ((pevent->OSEventTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0)

{ (1)

pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;

}

OSTCBCur->OSTCBStat = OS_STAT_RDY; (2)

OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; (3)

}

信號量

μC/OS-II 中的信號量由兩部分組成:一個是信號量的計數(shù)值,它是一個 16 位的無符號整

數(shù) (0 到 65,535 之間) ; 另一個是由等待該信號量的任務組成的等待任務表。 用戶要在 OS_CFG.H

中將 OS_SEM_EN 開關量常數(shù)置成 1,這樣μC/OS-II 才能支持信號量。信號量

μC/OS-II 中的信號量由兩部分組成:一個是信號量的計數(shù)值,它是一個 16 位的無符號整

數(shù) (0 到 65,535 之間) ; 另一個是由等待該信號量的任務組成的等待任務表。 用戶要在 OS_CFG.H

中將 OS_SEM_EN 開關量常數(shù)置成 1,這樣μC/OS-II 才能支持信號量。

程序清單 L6.9 建立一個信號量

OS_EVENT *OSSemCreate (INT16U cnt)

{

OS_EVENT *pevent;

OS_ENTER_CRITICAL();

pevent = OSEventFreeList; (1)

if (OSEventFreeList != (OS_EVENT *)0) { (2)

OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;

}

OS_EXIT_CRITICAL();

if (pevent != (OS_EVENT *)0) { (3)

pevent->OSEventType = OS_EVENT_TYPE_SEM; (4)

pevent->OSEventCnt = cnt; (5)

OSEventWaitListInit(pevent); (6)

}

return (pevent); (7)

}

程序清單 L6.10 等待一個信號量

void OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)

{

OS_ENTER_CRITICAL();

if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { (1)

OS_EXIT_CRITICAL();

*err = OS_ERR_EVENT_TYPE;

}

if (pevent->OSEventCnt > 0) { (2)

pevent->OSEventCnt--; (3)

OS_EXIT_CRITICAL();

*err = OS_NO_ERR;

6-15

} else if (OSIntNesting > 0) { (4)

OS_EXIT_CRITICAL();

*err = OS_ERR_PEND_ISR;

} else {

OSTCBCur->OSTCBStat |= OS_STAT_SEM; (5)

OSTCBCur->OSTCBDly = timeout; (6)

OSEventTaskWait(pevent); (7)

OS_EXIT_CRITICAL();

OSSched(); (8)

OS_ENTER_CRITICAL();

if (OSTCBCur->OSTCBStat & OS_STAT_SEM) { (9)

OSEventTO(pevent); (10)

OS_EXIT_CRITICAL();

*err = OS_TIMEOUT;

} else {

OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; (11)

OS_EXIT_CRITICAL();

*err = OS_NO_ERR;

}

}

}

程序清單 L6.11 發(fā)出一個信號量

INT8U OSSemPost (OS_EVENT *pevent)

{

OS_ENTER_CRITICAL();

if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { (1)

OS_EXIT_CRITICAL();

return (OS_ERR_EVENT_TYPE);

}

if (pevent->OSEventGrp) { (2)

OSEventTaskRdy(pevent, (void *)0, OS_STAT_SEM); (3)

OS_EXIT_CRITICAL();

OSSched(); (4)

return (OS_NO_ERR);

} else {

if (pevent->OSEventCnt < 65535) {

pevent->OSEventCnt++; (5)

OS_EXIT_CRITICAL();

return (OS_NO_ERR);

} else {

OS_EXIT_CRITICAL();

return (OS_SEM_OVF);

}

}

}

程序清單 L6.12 無等待地請求一個信號量

INT16U OSSemAccept (OS_EVENT *pevent)

{

INT16U cnt;

OS_ENTER_CRITICAL();

if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { (1)

OS_EXIT_CRITICAL();

return (0);

}

cnt = pevent->OSEventCnt; (2)

if (cnt > 0) { (3)

pevent->OSEventCnt--; (4)

}

OS_EXIT_CRITICAL();

return (cnt); (5)

}

程序清單 L6.13 查詢一個信號量的狀態(tài)

INT8U OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *pdata)

{

INT8U i;

INT8U *psrc;

INT8U *pdest;

OS_ENTER_CRITICAL();

if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { (1)

OS_EXIT_CRITICAL();

return (OS_ERR_EVENT_TYPE);

}

pdata->OSEventGrp = pevent->OSEventGrp; (2)

psrc = &pevent->OSEventTbl[0];

pdest = &pdata->OSEventTbl[0];

for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {

*pdest++ = *psrc++;

}

pdata->OSCnt = pevent->OSEventCnt; (3)

OS_EXIT_CRITICAL();

return (OS_NO_ERR);

}

程序清單 L6.14 建立一個郵箱

OS_EVENT *OSMboxCreate (void *msg)

6-20

{

OS_EVENT *pevent;

OS_ENTER_CRITICAL();

pevent = OSEventFreeList;

if (OSEventFreeList != (OS_EVENT *)0) {

OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;

}

OS_EXIT_CRITICAL();

if (pevent != (OS_EVENT *)0) {

pevent->OSEventType = OS_EVENT_TYPE_MBOX; (1)

pevent->OSEventPtr = msg; (2)

OSEventWaitListInit(pevent);

}

return (pevent); (3)

}

程序清單 L6.15 等待一個郵箱中的消息

void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)

{

void *msg;

OS_ENTER_CRITICAL();

if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { (1)

OS_EXIT_CRITICAL();

*err = OS_ERR_EVENT_TYPE;

return ((void *)0);

}

msg = pevent->OSEventPtr;

if (msg != (void *)0) { (2)

pevent->OSEventPtr = (void *)0; (3)

OS_EXIT_CRITICAL();

*err = OS_NO_ERR;

} else if (OSIntNesting > 0) { (4)

OS_EXIT_CRITICAL();

*err = OS_ERR_PEND_ISR;

} else {

OSTCBCur->OSTCBStat |= OS_STAT_MBOX; (5)

OSTCBCur->OSTCBDly = timeout;

OSEventTaskWait(pevent);

OS_EXIT_CRITICAL();

OSSched();

OS_ENTER_CRITICAL();

if ((msg = OSTCBCur->OSTCBMsg) != (void *)0) { (6)

OSTCBCur->OSTCBMsg = (void *)0;

OSTCBCur->OSTCBStat = OS_STAT_RDY;

OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;

OS_EXIT_CRITICAL();

*err = OS_NO_ERR;

} else if (OSTCBCur->OSTCBStat & OS_STAT_MBOX) { (7)

OSEventTO(pevent); (8)

OS_EXIT_CRITICAL();

msg = (void *)0; (9)

*err = OS_TIMEOUT;

} else {

6-22

msg = pevent->OSEventPtr; (10)

pevent->OSEventPtr = (void *)0;

(11)

OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; (12)

OS_EXIT_CRITICAL();

*err = OS_NO_ERR;

}

}

return (msg);

}

程序清單 L6.16 向郵箱中發(fā)送一條消息

INT8U OSMboxPost (OS_EVENT *pevent, void *msg)

{

OS_ENTER_CRITICAL();

if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { (1)

OS_EXIT_CRITICAL();

return (OS_ERR_EVENT_TYPE);

}

if (pevent->OSEventGrp) { (2)

OSEventTaskRdy(pevent, msg, OS_STAT_MBOX); (3)

OS_EXIT_CRITICAL();

OSSched(); (4)

return (OS_NO_ERR);

} else {

if (pevent->OSEventPtr != (void *)0) { (5)

OS_EXIT_CRITICAL();

return (OS_MBOX_FULL);

} else {

pevent->OSEventPtr = msg; (6)

OS_EXIT_CRITICAL();

return (OS_NO_ERR);

}

}

}

程序清單 L6.16 向郵箱中發(fā)送一條消息

INT8U OSMboxPost (OS_EVENT *pevent, void *msg)

{

OS_ENTER_CRITICAL();

if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { (1)

OS_EXIT_CRITICAL();

return (OS_ERR_EVENT_TYPE);

}

if (pevent->OSEventGrp) { (2)

OSEventTaskRdy(pevent, msg, OS_STAT_MBOX); (3)

OS_EXIT_CRITICAL();

OSSched(); (4)

return (OS_NO_ERR);

} else {

if (pevent->OSEventPtr != (void *)0) { (5)

OS_EXIT_CRITICAL();

return (OS_MBOX_FULL);

} else {

pevent->OSEventPtr = msg; (6)

OS_EXIT_CRITICAL();

return (OS_NO_ERR);

}

}

}

程序清單 L6.17 無等待地從郵箱中得到消息

void *OSMboxAccept (OS_EVENT *pevent)

{

void *msg;

OS_ENTER_CRITICAL();

if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { (1)

OS_EXIT_CRITICAL();

return ((void *)0);

}

msg = pevent->OSEventPtr; (2)

if (msg != (void *)0) { (3)

pevent->OSEventPtr = (void *)0; (4)

}

OS_EXIT_CRITICAL();

return (msg); (5)

}

程序清單 L6.18 查詢郵箱的狀態(tài)

INT8U OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *pdata)

{

INT8U i;

6-25

INT8U *psrc;

INT8U *pdest;

OS_ENTER_CRITICAL();

if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { (1)

OS_EXIT_CRITICAL();

return (OS_ERR_EVENT_TYPE);

}

pdata->OSEventGrp = pevent->OSEventGrp; (2)

psrc = &pevent->OSEventTbl[0];

pdest = &pdata->OSEventTbl[0];

for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {

*pdest++ = *psrc++;

}

pdata->OSMsg = pevent->OSEventPtr; (3)

OS_EXIT_CRITICAL();

return (OS_NO_ERR);

}

程序清單 L6.19 使用郵箱作為二值信號量

OS_EVENT *MboxSem;

void Task1 (void *pdata)

{

INT8U err;

for (;;) {

OSMboxPend(MboxSem, 0, &err); /* 獲得對資源的訪問權 */

6-26

.

. /* 任務獲得信號量,對資源進行訪問 */

.

OSMboxPost(MboxSem, (void*)1); /* 釋放對資源的訪問權 */

}

}

程序清單 L6.21 建立一個消息隊列

OS_EVENT *OSQCreate (void **start, INT16U size)

{

OS_EVENT *pevent;

OS_Q *pq;

OS_ENTER_CRITICAL();

pevent = OSEventFreeList; (1)

if (OSEventFreeList != (OS_EVENT *)0) {

OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr; (2)

}

OS_EXIT_CRITICAL();

if (pevent != (OS_EVENT *)0) {

OS_ENTER_CRITICAL();

pq = OSQFreeList; (3)

if (OSQFreeList != (OS_Q *)0) {

OSQFreeList = OSQFreeList->OSQPtr;

}

OS_EXIT_CRITICAL();

if (pq != (OS_Q *)0) {

pq->OSQStart = start; (4)

pq->OSQEnd = &start[size];

pq->OSQIn = start;

pq->OSQOut = start;

pq->OSQSize = size;

pq->OSQEntries = 0;

pevent->OSEventType = OS_EVENT_TYPE_Q; (5)

pevent->OSEventPtr = pq; (6)

OSEventWaitListInit(pevent); (7)

} else {

OS_ENTER_CRITICAL();

pevent->OSEventPtr = (void *)OSEventFreeList; (8)

6-33

OSEventFreeList = pevent;

OS_EXIT_CRITICAL();

pevent = (OS_EVENT *)0;

}

}

return (pevent); (9)

}

9.03 OS_CPU.H 文件

OS_CPU.H 文件中包含與處理器相關的常量,宏和結構體的定義。程序清單L9.2是為80x86編

寫的OS_CPU.H文件的內容。

9.04 OS_CPU_A.ASM

μC/OS-II 的移植需要用戶改寫OS_CPU_A.ASM中的四個函數(shù):

OSStartHighRdy()

OSCtxSw()

OSIntCtxSw()

OSTickISR()

9.04.01 OSStartHighRdy()

該函數(shù)由SStart()函數(shù)調用,功能是運行優(yōu)先級最高的就緒任務,在調用OSStart()之前,

用戶必須先調用OSInit(),并且已經至少創(chuàng)建了一個任務(請參考OSTaskCreate()和

OSTaskCreateExt()函數(shù))。OSStartHighRdy()默認指針OSTCBHighRdy指向優(yōu)先級最高就緒任務

的任務控制塊(OS_TCB)(在這之前OSTCBHighRdy已由OSStart()設置好了)。圖F9.3給出了由

函 數(shù) OSTaskCreate() 或 OSTaskCreateExt() 創(chuàng) 建 的 任 務 的 堆 棧 結 構 。 很 明 顯 ,

OSTCBHighRdy->OSTCBStkPtr指向的是任務堆棧的頂端。

程序清單L 9.3 OSStartHighRdy().

_OSStartHighRdy PROC FAR

MOV AX, SEG _OSTCBHighRdy ; 載入 DS

MOV DS, AX ;

LES BX, DWORD PTR DS:_OSTCBHighRdy ; SS:SP = OSTCBHighRdy->OSTCBStkPtr

(1)

MOV SS, ES:[BX+2] ;

MOV SP, ES:[BX+0] ;

;

POP DS ; 恢復任務環(huán)境 (2)

POP ES ; (3)

POPA ; (4)

;

IRET ; 運行任務 (5)

_OSStartHighRdy ENDP

9.05 OS_CPU_C.C

μC/OS-II 的移植需要用戶改寫OS_CPU_C.C中的六個函數(shù):

OSTaskStkInit()

OSTaskCreateHook()

OSTaskDelHook()

OSTaskSwHook()

OSTaskStatHook()

OSTimeTickHook()

OSTaskResume ()的返回值為下述之一:

? OS_NO_ERR:函數(shù)調用成功。

? OS_TASK_RESUME_PRIO:要喚醒的任務不存在。

? OS_TASK_NOT_SUSPENDED:要喚醒的任務不在掛起狀態(tài)。

? OS_PRIO_INVALID:參數(shù)指定的優(yōu)先級大于或等于 OS_LOWEST_PRIO。

OS_MAX_EVENTS 定義系統(tǒng)中最大的事件控制塊的數(shù)量。系統(tǒng)中的每一個消息郵箱,消息隊

列,信號量都需要一個事件控制塊。例如,系統(tǒng)中有 10 個消息郵箱,5 個消息隊列,3 個信號

量,則 OS_MAX_EVENTS 最小應該為 18。只要程序中用到了消息郵箱,消息隊列或是信號量,

則 OS_MAX_EVENTS 最小應該設置為 2。

編輯:admin  最后修改時間:2018-05-18

聯(lián)系方式

0755-82591179

郵箱:ivy@yingtexin.net

地址:深圳市南山區(qū)桃源街道平山社區(qū)平山一路2號南山云谷創(chuàng)業(yè)園二期11棟410-411

Copyright © 2014-2026 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网
51自拍视频在线观看| 两性午夜免费视频| 亚洲人精品午夜射精日韩| 欧美伦理片在线观看| 别急慢慢来1978如如2| 黄色免费视频大全| 波多野结衣家庭教师在线播放| 久久男人资源站| 国产午夜精品视频一区二区三区| 天堂在线中文在线| 成人短视频在线看| 草草草视频在线观看| 男人添女荫道口图片| 播放灌醉水嫩大学生国内精品| 国产二区视频在线| 奇米影视亚洲色图| 激情婷婷综合网| 九一精品久久久| 4444在线观看| 黄色一级一级片| 羞羞的视频在线| 成人国产一区二区三区| 国产精品久久久久久久乖乖| 亚洲欧洲日产国码无码久久99| 欧美一级裸体视频| 亚洲一二三av| 91专区在线观看| 一区二区xxx| 日本a在线天堂| 欧美综合在线观看视频| 午夜影院免费观看视频| 成人免费毛片在线观看| 国产成人精品无码播放| 最新视频 - x88av| 国产情侣av自拍| 日韩不卡视频一区二区| 欧美 激情 在线| 青春草在线视频免费观看| 欧美不卡在线播放| 欧美视频亚洲图片| 99福利在线观看| 成人免费网站入口| 依人在线免费视频| 国产一区亚洲二区三区| 成人在线观看毛片| 午夜免费看毛片| 日本免费黄视频| 日本人妻伦在线中文字幕| 黑人粗进入欧美aaaaa| 日韩成人手机在线| www.五月天色| www.色就是色.com| 欧美女人性生活视频| 17c丨国产丨精品视频| 永久免费黄色片| 一区二区三区欧美精品| 国产一线二线三线在线观看| av免费播放网址| 国产高清精品在线观看| 成人午夜免费在线| www.男人天堂网| 日b视频免费观看| 97在线免费视频观看| 精品综合久久久久| 亚洲免费黄色网| 国产一级片自拍| 激情黄色小视频| 午夜精品免费看| 九九九九九九九九| 一级一片免费播放| www.日本久久| 香蕉精品视频在线| 日本一道在线观看| 精品人妻大屁股白浆无码| 4444在线观看| www.中文字幕在线| 亚洲中文字幕久久精品无码喷水| 红桃av在线播放| 亚洲欧美自拍另类日韩| www.99r| 国产香蕉一区二区三区| 久久免费看毛片| 黄网站欧美内射| 日韩精品一区二区三区不卡| 亚洲天堂国产视频| 一级黄色片播放| 国产亚洲天堂网| 一级黄色在线播放| 97超碰国产精品| 老司机午夜av| 性做爰过程免费播放| 少妇人妻无码专区视频| av丝袜天堂网| 国产又大又长又粗又黄| 国产主播自拍av| 亚洲涩涩在线观看| 丰满少妇大力进入| 久久国产精品国产精品| 在线视频一二三区| 国产一区亚洲二区三区| 亚洲女人在线观看| 精品视频一区二区在线| 6080国产精品| 欧美自拍小视频| 日韩美女爱爱视频| 亚洲 激情 在线| 成人中文字幕在线播放| www.成年人| 婷婷六月天在线| 鲁一鲁一鲁一鲁一澡| 浴室偷拍美女洗澡456在线| 丝袜老师办公室里做好紧好爽| 超碰中文字幕在线观看| 色欲av无码一区二区人妻| 99re99热| 99九九精品视频| 九九热在线免费| 欧美国产亚洲一区| 免费的一级黄色片| 91欧美一区二区三区| www日韩视频| 成年人视频在线免费| www精品久久| 国产精品三级一区二区| 夜夜爽久久精品91| 中文字幕第22页| 91插插插影院| 中文字幕久久av| www激情五月| 国产毛片久久久久久| 老司机久久精品| 手机看片一级片| 女同激情久久av久久| 91精品无人成人www| 成人久久久久久久久| 欧美 日韩 国产在线观看| 久久久亚洲精品无码| 亚洲理论电影在线观看| 国产尤物av一区二区三区| 日韩一二区视频| 精品无码av无码免费专区| 天天想你在线观看完整版电影免费| 樱花草www在线| 三级在线免费观看| 国产一区二区网| 狠狠躁狠狠躁视频专区| 亚洲图色中文字幕| 欧美日韩中文字幕在线播放| 隔壁人妻偷人bd中字| 九色在线视频观看| 少妇网站在线观看| 天堂av免费看| 国产亚洲精品网站| 牛夜精品久久久久久久| 亚洲高清视频免费| 999一区二区三区| 国产熟人av一二三区| 99亚洲精品视频| 北条麻妃69av| 欧美激情第四页| 国产免费裸体视频| 成年人在线观看视频免费| 亚洲第一页在线视频| 国产九色porny| 久久久久久蜜桃一区二区| 黄色一级片国产| 污污的网站免费| 精品国产av无码一区二区三区| 岳毛多又紧做起爽| av动漫免费观看| 成人免费观看毛片| 日韩 欧美 自拍| 美女网站色免费| 男人和女人啪啪网站| 一级片免费在线观看视频| 国产成人无码一二三区视频| 六月婷婷激情网| 老司机午夜性大片| 久久国产乱子伦免费精品| 九一免费在线观看| 污污视频在线免费| 激情五月婷婷久久| 北条麻妃69av| 人妻无码久久一区二区三区免费 | 国产91xxx| 五月天婷婷亚洲| 人妻内射一区二区在线视频| 成人区一区二区| 超碰免费在线公开| 免费成年人高清视频| 黄色三级视频片| 日av中文字幕| 青青青国产在线视频| 妺妺窝人体色www在线小说| 黄色一级片国产| 波多野结衣av一区二区全免费观看| 91香蕉视频免费看| 婷婷视频在线播放| 久久久国产精华液999999| 黄色片一级视频|