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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

OS_Q.C(全)

發布時間:2025/3/21 编程问答 79 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OS_Q.C(全) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本篇介紹以下內容:
  • 從隊列中接收消息*OSQAccept (OS_EVENT ?*pevent,INT8U *perr)
  • 建立一個消息隊列OS_EVENT ?*OSQCreate (void ?**start,INT16U size)
  • 刪除消息隊列OS_EVENT *OSQDel (OS_EVENT *pevent,INT8U opt,INT8U ?perr)
  • 清空消息隊列OSQFlush (OS_EVENT *pevent)
  • 任務等待消息隊列中的消息*OSQPend (OS_EVENT ?*pevent,INT32U timeout,INT8U ?*perr)
  • 取消等待消息的任務OSQPendAbort (OS_EVENT *pevent,INT8U opt,INT8U ? ? *perr)
  • 給隊列發送消息INT8U OSQPost (OS_EVENT *pevent,void *pmsg)
  • 通過消息隊列向任務發送消息INT8U ?OSQPostFront (OS_EVENT ?*pevent,void *pmsg)
  • 消息隊列向任務發消息(允許廣播消息)INT8U ?OSQPostOpt (OS_EVENT ?*pevent,?void *pmsg,INT8U opt)
  • 獲得消息隊列的信息INT8U ?OSQQuery (OS_EVENT ?*pevent,OS_Q_DATA *p_q_data)
  • 隊列單元初始化?OS_QInit (void)

從隊列中接收消息*OSQAccept (OS_EVENT ?*pevent,INT8U *perr):

#if (OS_Q_EN > 0u) && (OS_MAX_QS > 0u) /*2018/2/22 ********************************************************************************************************* * ACCEPT MESSAGE FROM QUEUE * ????????從隊列中接收消息 * Description: This function checks the queue to see if a message is available. Unlike OSQPend(), * OSQAccept() does not suspend the calling task if a message is not available. *描述:該功能是檢測隊列看是否有可獲得的消息。與 OSQPend()不同的是,如果沒有消息可以獲得,OSQAccept()不會被掛起。 * Arguments : pevent is a pointer to the event control block *參數: --pevent:指向事件控制塊的指針。 * perr is a pointer to where an error message will be deposited. Possible error * messages are: * OS_ERR_NONE The call was successful and your task received a * message. * OS_ERR_EVENT_TYPE You didn't pass a pointer to a queue * OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer * OS_ERR_Q_EMPTY The queue did not contain any messages * --perr:錯誤信息指針。OS_ERR_NONE:調用成功,任務接收到消息。OS_ERR_EVENT_TYPE:沒有指向隊列的指針;OS_ERR_PEVENT_NULL:pevent為空指針。OS_ERR_Q_EMPTY:隊列中不包含消息。 * Returns : != (void *)0 is the message in the queue if one is available. The message is removed * from the so the next time OSQAccept() is called, the queue will contain * one less entry. * == (void *)0 if you received a NULL pointer message * if the queue is empty or, * if 'pevent' is a NULL pointer or, * if you passed an invalid event type *返回值: != (void *)0:如果隊列中有可獲得的消息,指向消息。該消息會被移出以便于下次調用OSQAccept()。隊列包含至少一個入口。== (void *)0:以下情況返回空:指向消息的指針為空;隊列為空;pevent為空指針;事件類型無效。 * Note(s) : As of V2.60, you can now pass NULL pointers through queues. Because of this, the argument * 'perr' has been added to the API to tell you about the outcome of the call. ********************************************************************************************************* */#if OS_Q_ACCEPT_EN > 0u void *OSQAccept (OS_EVENT *pevent,INT8U *perr) {void *pmsg;/*指向消息的指針*/OS_Q *pq;/*指向隊列的指針*/#if OS_CRITICAL_METHOD == 3u OS_CPU_SR cpu_sr = 0u;#endif#ifdef OS_SAFETY_CRITICALif (perr == (INT8U *)0) {OS_SAFETY_CRITICAL_EXCEPTION();}#endif#if OS_ARG_CHK_EN > 0uif (pevent == (OS_EVENT *)0) { *perr = OS_ERR_PEVENT_NULL;return ((void *)0);}#endifif (pevent->OSEventType != OS_EVENT_TYPE_Q) {*perr = OS_ERR_EVENT_TYPE;return ((void *)0);}OS_ENTER_CRITICAL();/*進入中斷*/pq = (OS_Q *)pevent->OSEventPtr; /*指向隊列控制塊的指針 */if (pq->OSQEntries > 0u) /*檢測隊列中是否有消息*/{ pmsg = *pq->OSQOut++; /*有消息,提取出最早進入隊列的消息*/pq->OSQEntries--; /* 將隊列中消息數量減1*/if (pq->OSQOut == pq->OSQEnd) /*消息全部被取出*/{ pq->OSQOut = pq->OSQStart;/*首尾指針相等*/}*perr = OS_ERR_NONE;}else/*隊列中沒有消息*/{*perr = OS_ERR_Q_EMPTY;/*錯誤類型為OS_ERR_Q_EMPTY*/pmsg = (void *)0; /* 指向消息的指針設置為空*/}OS_EXIT_CRITICAL();/*退出中斷*/return (pmsg); /* 返回接收到的消息或者空*/ } #endif

建立一個消息隊列OS_EVENT ?*OSQCreate (void ?**start,INT16U ?size):

/*$PAGE*/ /*2018/2/22 ********************************************************************************************************* * CREATE A MESSAGE QUEUE * 建立一個消息隊列 * Description: This function creates a message queue if free event control blocks are available. *描述:該功能是當有空閑的事件控制塊時創建一個消息隊列。 * Arguments : start is a pointer to the base address of the message queue storage area. The * storage area MUST be declared as an array of pointers to 'void' as follows * void *MessageStorage[size] *參數: --start:指向消息隊列存儲區域底部的指針。該存儲區域必須被聲明為void型指針數組。形式如下;void *MessageStorage[size] * size is the number of elements in the storage area * --size:該存儲區的成員數量。 * Returns : != (OS_EVENT *)0 is a pointer to the event control clock (OS_EVENT) associated with the * created queue * == (OS_EVENT *)0 if no event control blocks were available or an error was detected返回值:!= (OS_EVENT *)0:指向事件控制塊的指針。== (OS_EVENT *)0:如果事件控制塊不可獲得或者有其他錯誤信息,返回空。 ********************************************************************************************************* */OS_EVENT *OSQCreate (void **start,INT16U size) {OS_EVENT *pevent;/*指向隊列對應的事件控制塊*/OS_Q *pq;/*指向隊列控制塊的指針*/#if OS_CRITICAL_METHOD == 3u OS_CPU_SR cpu_sr = 0u;#endif#ifdef OS_SAFETY_CRITICAL_IEC61508if (OSSafetyCriticalStartFlag == OS_TRUE) {OS_SAFETY_CRITICAL_EXCEPTION();}#endifif (OSIntNesting > 0u) { return ((OS_EVENT *)0); }OS_ENTER_CRITICAL();/*進入中斷*/pevent = OSEventFreeList;/* 得到空閑的事件控制塊*/if (OSEventFreeList != (OS_EVENT *)0) /*如果有可獲得事件控制塊*/{ OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;/*更新空閑事件列表*/}OS_EXIT_CRITICAL();/*退出中斷*/if (pevent != (OS_EVENT *)0) /*如果獲得了事件控制塊*/{ OS_ENTER_CRITICAL();/*進入中斷*/pq = OSQFreeList; /*獲得空閑的隊列控制塊 */if (pq != (OS_Q *)0) /*如果獲得了空閑的隊列控制塊*/{ OSQFreeList = OSQFreeList->OSQPtr; /*調整空閑列表指針到下一個*/OS_EXIT_CRITICAL();/*退出中斷*/pq->OSQStart = start;/*初始化隊列 頭指針*/pq->OSQEnd = &start[size];/*尾指針*/pq->OSQIn = start;/*進入的指針*/pq->OSQOut = start;/*出去的指針*/pq->OSQSize = size;/*隊列大小*/pq->OSQEntries = 0u;/*隊列內的成員數初始化為0*/pevent->OSEventType = OS_EVENT_TYPE_Q;/*將事件控制塊類型設置為隊列類型*/pevent->OSEventCnt = 0u;pevent->OSEventPtr = pq;/*事件控制塊指針指向隊列*/#if OS_EVENT_NAME_EN > 0upevent->OSEventName = (INT8U *)(void *)"?";/*名字初始化為未命名*/#endifOS_EventWaitListInit(pevent);/*初始化等待列表 */} else/*如果沒有獲得空閑的隊列控制塊*/{pevent->OSEventPtr = (void *)OSEventFreeList; /*將事件控制塊還給事件空閑列表*/OSEventFreeList = pevent;OS_EXIT_CRITICAL();/*退出中斷*/pevent = (OS_EVENT *)0;}}return (pevent); }

刪除消息隊列OS_EVENT ?*OSQDel (OS_EVENT ?*pevent,INT8U opt,INT8U *perr):

/*$PAGE*/ /*2018/2/22 ********************************************************************************************************* * DELETE A MESSAGE QUEUE * 刪除消息隊列 * Description: This function deletes a message queue and readies all tasks pending on the queue. *描述:該功能是刪除消息隊列并且將所有掛起的任務設置為就緒態。 * Arguments : pevent is a pointer to the event control block associated with the desired * queue. *參數: --pevent:指向與隊列對應的事件控制塊的指針 * opt determines delete options as follows: * opt == OS_DEL_NO_PEND Delete the queue ONLY if no task pending * opt == OS_DEL_ALWAYS Deletes the queue even if tasks are waiting. * In this case, all the tasks pending will be readied. * --opt:選擇刪除方式:opt == OS_DEL_NO_PEND:沒有任務掛起時才能刪除。opt == OS_DEL_ALWAYS:即使有任務正在等待也將隊列刪除。在這種情況下,所有掛起的任務都轉為就緒態。 * perr is a pointer to an error code that can contain one of the following values: * OS_ERR_NONE The call was successful and the queue was deleted * OS_ERR_DEL_ISR If you tried to delete the queue from an ISR * OS_ERR_INVALID_OPT An invalid option was specified * OS_ERR_TASK_WAITING One or more tasks were waiting on the queue * OS_ERR_EVENT_TYPE If you didn't pass a pointer to a queue * OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer. * --perr:指向錯誤碼的指針:OS_ERR_NONE:調用成功,隊列被刪除;OS_ERR_DEL_ISR:從中斷服務子程序中刪除隊列;OS_ERR_INVALID_OPT:選擇無效;OS_ERR_TASK_WAITING:一個或者多個任務正在等待該隊列OS_ERR_EVENT_TYPE:沒有指向隊列的指針OS_ERR_PEVENT_NULL:pevent為空指針 * Returns : pevent upon error * (OS_EVENT *)0 if the queue was successfully deleted. *返回值:如果成功刪除隊列,返回值為空,如果沒有成功刪除,返回pevent。 * Note(s) : 1) This function must be used with care. Tasks that would normally expect the presence of * the queue MUST check the return code of OSQPend(). * 2) OSQAccept() callers will not know that the intended queue has been deleted unless * they check 'pevent' to see that it's a NULL pointer. * 3) This call can potentially disable interrupts for a long time. The interrupt disable * time is directly proportional to the number of tasks waiting on the queue. * 4) Because ALL tasks pending on the queue will be readied, you MUST be careful in * applications where the queue is used for mutual exclusion because the resource(s) * will no longer be guarded by the queue. * 5) If the storage for the message queue was allocated dynamically (i.e. using a malloc() * type call) then your application MUST release the memory storage by call the counterpart * call of the dynamic allocation scheme used. If the queue storage was created statically * then, the storage can be reused. 注釋:1)該函數一定要小心使用。等待隊列的任務要檢查OSQPend()的返回值。2)調用OSQAccept()的任務無法得知隊列是否被刪除,除非檢測pevent是否為空指針。3)該函數調用會中斷很長時間,中斷的時間長短與等待任務的數量成正比。4)因為在刪除后所有的任務都會從等待狀態轉為就緒態。所以如果隊列中的消息為互斥量,調用需要小心。因為此時資源是開放的。5)如果消息隊列內存是動態分配的,你的應用程序一定要通過對應的程序釋放存儲空間。如果空間是靜態的,該空間可以被重新使用。 ********************************************************************************************************* */#if OS_Q_DEL_EN > 0u OS_EVENT *OSQDel (OS_EVENT *pevent,INT8U opt,INT8U *perr) {BOOLEAN tasks_waiting;/*布爾型變量標志是否有任務正在等待*/OS_EVENT *pevent_return;/*返回值*/OS_Q *pq;/*指向隊列的指針*/#if OS_CRITICAL_METHOD == 3u OS_CPU_SR cpu_sr = 0u;#endif#ifdef OS_SAFETY_CRITICALif (perr == (INT8U *)0) {OS_SAFETY_CRITICAL_EXCEPTION();}#endif#if OS_ARG_CHK_EN > 0uif (pevent == (OS_EVENT *)0) { *perr = OS_ERR_PEVENT_NULL;return (pevent);}#endifif (pevent->OSEventType != OS_EVENT_TYPE_Q) { *perr = OS_ERR_EVENT_TYPE;return (pevent);}if (OSIntNesting > 0u) { *perr = OS_ERR_DEL_ISR; return (pevent);}OS_ENTER_CRITICAL();/*進入中斷*/if (pevent->OSEventGrp != 0u)/*有任務正在等待隊列*/{ tasks_waiting = OS_TRUE; /* 將等待標志設置為true */}else/*沒有任務等待隊列*/{tasks_waiting = OS_FALSE;/* 將等待標志設置為false*/}switch (opt) /*選擇刪除方式并進行對應操作*/{case OS_DEL_NO_PEND: /* 無掛起才刪除*/if (tasks_waiting == OS_FALSE)/*無任務等待*/{#if OS_EVENT_NAME_EN > 0upevent->OSEventName = (INT8U *)(void *)"?";/*名字初始化為未命名*/#endif/*將隊列控制塊還給空閑隊列列表*/pq = (OS_Q *)pevent->OSEventPtr; pq->OSQPtr = OSQFreeList;OSQFreeList = pq;pevent->OSEventType = OS_EVENT_TYPE_UNUSED;/*將事件類型設置為未使用類型*/pevent->OSEventPtr = OSEventFreeList; /*將事件控制塊還給事件空閑列表*/pevent->OSEventCnt = 0u;OSEventFreeList = pevent; /*更新空閑事件列表*/ OS_EXIT_CRITICAL();/*退出中斷*/*perr = OS_ERR_NONE;pevent_return = (OS_EVENT *)0; /* 隊列已經被刪除,返回空*/}else/*有任務正在等待*/{OS_EXIT_CRITICAL();/*退出中斷*/*perr = OS_ERR_TASK_WAITING;/*設置錯誤類型*/pevent_return = pevent;}break;case OS_DEL_ALWAYS: /*有掛起也刪除*/while (pevent->OSEventGrp != 0u)/*將所有等待的任務轉為就緒態*/{ (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_Q, OS_STAT_PEND_OK);}#if OS_EVENT_NAME_EN > 0upevent->OSEventName = (INT8U *)(void *)"?";#endifpq = (OS_Q *)pevent->OSEventPtr; /*同上*/pq->OSQPtr = OSQFreeList;OSQFreeList = pq;pevent->OSEventType = OS_EVENT_TYPE_UNUSED;pevent->OSEventPtr = OSEventFreeList; pevent->OSEventCnt = 0u;OSEventFreeList = pevent; OS_EXIT_CRITICAL();if (tasks_waiting == OS_TRUE) /*有任務等待時才可能調度*/{ OS_Sched(); /*找到最高優先級任務并進行調度 */}*perr = OS_ERR_NONE;pevent_return = (OS_EVENT *)0; /*隊列被刪除,返回值為空 */break;default:/*兩種選擇都不是*/OS_EXIT_CRITICAL();/*退出中斷*/*perr = OS_ERR_INVALID_OPT;/*設置錯誤類型*/pevent_return = pevent;break;}return (pevent_return); } #endif

清空消息隊列并且忽略發送往隊列的所有消息OSQFlush (OS_EVENT *pevent):

/*$PAGE*/ /*2018/2/22 ********************************************************************************************************* * FLUSH QUEUE * 清空消息隊列并且忽略發送往隊列的所有消息 * Description : This function is used to flush the contents of the message queue. *描述:該功能用來清空消息隊列的內容。 * Arguments : none *參數:無 * Returns : OS_ERR_NONE upon success * OS_ERR_EVENT_TYPE If you didn't pass a pointer to a queue * OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer *返回值:OS_ERR_NONE;成功調用。OS_ERR_EVENT_TYPE:沒有指向隊列的指針。OS_ERR_PEVENT_NULL:pevent為空指針。 * WARNING : You should use this function with great care because, when to flush the queue, you LOOSE * the references to what the queue entries are pointing to and thus, you could cause * 'memory leaks'. In other words, the data you are pointing to that's being referenced * by the queue entries should, most likely, need to be de-allocated (i.e. freed).警告:需要特別小心使用該函數,因為當清空隊列的時候,會釋放隊列中成員指向的一些內容,容易造成內存泄漏。換句話說,在使用完隊列后應該動態釋放空間。 ********************************************************************************************************* */#if OS_Q_FLUSH_EN > 0u INT8U OSQFlush (OS_EVENT *pevent) {OS_Q *pq;/*指向隊列的指針*/#if OS_CRITICAL_METHOD == 3u OS_CPU_SR cpu_sr = 0u;#endif#if OS_ARG_CHK_EN > 0uif (pevent == (OS_EVENT *)0) { return (OS_ERR_PEVENT_NULL);}if (pevent->OSEventType != OS_EVENT_TYPE_Q) { return (OS_ERR_EVENT_TYPE);}#endifOS_ENTER_CRITICAL();/*進入中斷*/pq = (OS_Q *)pevent->OSEventPtr; /* pq指向隊列存儲結構 */pq->OSQIn = pq->OSQStart;/*進入隊列指針*/pq->OSQOut = pq->OSQStart;/*出隊列指針,首尾指向該隊列的開始*/pq->OSQEntries = 0u;OS_EXIT_CRITICAL();/*退出中斷*/return (OS_ERR_NONE); } #endif

任務等待消息隊列中的消息*OSQPend (OS_EVENT ?*pevent,INT32U timeout,INT8U *perr):

/*$PAGE*/ /*2018/2/22 ********************************************************************************************************* * PEND ON A QUEUE FOR A MESSAGE * ????任務等待消息隊列中的消息 * Description: This function waits for a message to be sent to a queue *描述:該功能是等待消息隊列中的消息 * Arguments : pevent is a pointer to the event control block associated with the desired queue *參數: --pevent:指向事件控制塊的指針 * timeout is an optional timeout period (in clock ticks). If non-zero, your task will * wait for a message to arrive at the queue up to the amount of time * specified by this argument. If you specify 0, however, your task will wait * forever at the specified queue or, until a message arrives. * --timeout:可選擇的時間片。如果不為0,任務將會等待消息,到時間到達了設定的時間后不再等待。如果是0,任務就會一直等待,知道有消息到來。 * perr is a pointer to where an error message will be deposited. Possible error * messages are: * OS_ERR_NONE The call was successful and your task received a message. * OS_ERR_TIMEOUT A message was not received within the specified 'timeout'. * OS_ERR_PEND_ABORT The wait on the queue was aborted. * OS_ERR_EVENT_TYPE You didn't pass a pointer to a queue * OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer * OS_ERR_PEND_ISR If you called this function from an ISR and the result * would lead to a suspension. * OS_ERR_PEND_LOCKED If you called this function with the scheduler is locked * --perr:指向錯誤碼的指針:‘OS_ERR_NONE:成功調用,任務收到消息。OS_ERR_TIMEOUT:超時錯。OS_ERR_PEND_ABORT:任務被取消。OS_ERR_EVENT_TYPE:沒有指向隊列的指針。OS_ERR_PEVENT_NULL:pevent為空指針。OS_ERR_PEND_ISR:從中斷服務子程序中調用該功能。OS_ERR_PEND_LOCKED:調度程序被鎖 * Returns : != (void *)0 is a pointer to the message received * == (void *)0 if you received a NULL pointer message or, * if no message was received or, * if 'pevent' is a NULL pointer or, * if you didn't pass a pointer to a queue. *返回值:!= (void *)0:指向收到的消息== (void *)0:以下幾種情況返回值為空:指向消息的指針為空;沒有收到消息;pevent為空指針;沒有指向隊列的指針。 * Note(s) : As of V2.60, this function allows you to receive NULL pointer messages. 注釋:對于V2.60版本,該功能允許收到空指針消息。 ********************************************************************************************************* */void *OSQPend (OS_EVENT *pevent,INT32U timeout,INT8U *perr) {void *pmsg;/*指向消息的指針*/OS_Q *pq;/*指向隊列控制塊的指針*/#if OS_CRITICAL_METHOD == 3u OS_CPU_SR cpu_sr = 0u;#endif#ifdef OS_SAFETY_CRITICALif (perr == (INT8U *)0) {OS_SAFETY_CRITICAL_EXCEPTION();}#endif#if OS_ARG_CHK_EN > 0uif (pevent == (OS_EVENT *)0) { *perr = OS_ERR_PEVENT_NULL;return ((void *)0);}#endifif (pevent->OSEventType != OS_EVENT_TYPE_Q) {*perr = OS_ERR_EVENT_TYPE;return ((void *)0);}if (OSIntNesting > 0u) { *perr = OS_ERR_PEND_ISR; return ((void *)0);}if (OSLockNesting > 0u) { *perr = OS_ERR_PEND_LOCKED; return ((void *)0);}OS_ENTER_CRITICAL();/*進入中斷*/pq = (OS_Q *)pevent->OSEventPtr;/*指向隊列控制塊的指針*/if (pq->OSQEntries > 0u)/*在隊列中有消息*/{ pmsg = *pq->OSQOut++; /*從隊列中取出最早進入的消息 */pq->OSQEntries--; /*更新隊列的數量*/if (pq->OSQOut == pq->OSQEnd) /*隊列中沒有消息了*/{ pq->OSQOut = pq->OSQStart;/*將出隊列的指針指向隊列首*/}OS_EXIT_CRITICAL();/*退出中斷*/*perr = OS_ERR_NONE;return (pmsg);/* 返回收到的消息*/}/*隊列中沒有消息*/OSTCBCur->OSTCBStat |= OS_STAT_Q;/*將事件進入睡眠狀態,由消息隊列喚醒*/OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK;OSTCBCur->OSTCBDly = timeout; /*等待時間置入任務控制中*/OS_EventTaskWait(pevent);/*使任務進入等待消息隊列狀態*/OS_EXIT_CRITICAL();/*退出中斷*/OS_Sched(); /* 找到最高優先級任務并調度 */OS_ENTER_CRITICAL();/*進入中斷*/switch (OSTCBCur->OSTCBStatPend) /*看掛起狀態是超時還是被取消*/{ case OS_STAT_PEND_OK:/*得到消息*/pmsg = OSTCBCur->OSTCBMsg;*perr = OS_ERR_NONE;break;case OS_STAT_PEND_ABORT:/*任務被取消*/pmsg = (void *)0;*perr = OS_ERR_PEND_ABORT; break;case OS_STAT_PEND_TO:/*超時*/default:OS_EventTaskRemove(OSTCBCur, pevent);pmsg = (void *)0;*perr = OS_ERR_TIMEOUT; break;}OSTCBCur->OSTCBStat = OS_STAT_RDY;/*將任務狀態設置為就緒態*/OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK; /* 清除掛起狀態*/OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;/* 清除事件指針 */#if (OS_EVENT_MULTI_EN > 0u)OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)0;#endifOSTCBCur->OSTCBMsg = (void *)0; /*清除收到的消息*/OS_EXIT_CRITICAL();/*退出中斷*/return (pmsg); /* 返回收到的消息*/ }

取消等待的任務INT8U ?OSQPendAbort (OS_EVENT ?*pevent,INT8U ?opt,INT8U ?*perr):

/*$PAGE*/ /*2018/2/22 ********************************************************************************************************* * ABORT WAITING ON A MESSAGE QUEUE * 取消等待消息的任務 * Description: This function aborts & readies any tasks currently waiting on a queue. This function * should be used to fault-abort the wait on the queue, rather than to normally signal * the queue via OSQPost(), OSQPostFront() or OSQPostOpt(). *描述:該功能是將所有等待隊列消息的任務取消并轉為就緒態。該功能是默認取消等待,而不是通過OSQPost(),OSQPostFront()或者OSQPostOpt()通知隊列。 * Arguments : pevent is a pointer to the event control block associated with the desired queue. *參數: --pevent:指向隊列對應的事件控制塊的指針。 * opt determines the type of ABORT performed: * OS_PEND_OPT_NONE ABORT wait for a single task (HPT) waiting on the * queue * OS_PEND_OPT_BROADCAST ABORT wait for ALL tasks that are waiting on the * queue * --opt:取消的方式:OS_PEND_OPT_NONE:只取消最高優先級任務;OS_PEND_OPT_BROADCAST:取消所有任務。 * perr is a pointer to where an error message will be deposited. Possible error * messages are: * OS_ERR_NONE No tasks were waiting on the queue. * OS_ERR_PEND_ABORT At least one task waiting on the queue was readied * and informed of the aborted wait; check return value * for the number of tasks whose wait on the queue * was aborted. * OS_ERR_EVENT_TYPE If you didn't pass a pointer to a queue. * OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer.--perr:指向錯誤碼的指針:OS_ERR_NONE:沒有任務等待隊列消息。OS_ERR_PEND_ABORT:至少一個等待隊列消息的任務是就緒的并且被取消等待;檢查任務數的返回值。OS_ERR_EVENT_TYPE:沒有指向隊列的指針;OS_ERR_PEVENT_NULL:pevent為空指針。 * Returns : == 0 if no tasks were waiting on the queue, or upon error. * > 0 if one or more tasks waiting on the queue are now readied and informed.返回值:== 0:沒有任務等待隊列。> 0:一個或多個等待隊列的任務為就緒態并且被取消。 ********************************************************************************************************* */#if OS_Q_PEND_ABORT_EN > 0u INT8U OSQPendAbort (OS_EVENT *pevent,INT8U opt,INT8U *perr) {INT8U nbr_tasks;/*等待的任務數目*/#if OS_CRITICAL_METHOD == 3u OS_CPU_SR cpu_sr = 0u;#endif#ifdef OS_SAFETY_CRITICALif (perr == (INT8U *)0) {OS_SAFETY_CRITICAL_EXCEPTION();}#endif#if OS_ARG_CHK_EN > 0uif (pevent == (OS_EVENT *)0) { *perr = OS_ERR_PEVENT_NULL;return (0u);}#endifif (pevent->OSEventType != OS_EVENT_TYPE_Q) { *perr = OS_ERR_EVENT_TYPE;return (0u);}OS_ENTER_CRITICAL();/*進入中斷*/if (pevent->OSEventGrp != 0u) /*有任務正在等待*/{ nbr_tasks = 0u;/*數量先初始化為0*/switch (opt) /*選擇取消的類型*/{case OS_PEND_OPT_BROADCAST: /*取消所有的任務*/while (pevent->OSEventGrp != 0u){ (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_Q, OS_STAT_PEND_ABORT);nbr_tasks++;}break;case OS_PEND_OPT_NONE:/*只取消優先級最高的那個任務*/default: /*取消任務就是不讓該任務處于等待狀態,轉為就緒態*/(void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_Q, OS_STAT_PEND_ABORT);nbr_tasks++;break;}OS_EXIT_CRITICAL();/*退出中斷*/OS_Sched(); /*找到最高優先級任務并調度*/*perr = OS_ERR_PEND_ABORT;return (nbr_tasks);/*返回任務的數目*/}OS_EXIT_CRITICAL();/*退出中斷*/*perr = OS_ERR_NONE;return (0u); /*如果沒有任務等待的話,返回0*/ } #endif

該函數最后是返回取消的任務數目。如果有任務正在等待隊列消息,取消后返回任務數量。如果沒有任務等待,返回0。取消等待的任務實際上就是將任務從等待狀態轉為就緒態。

給隊列發送消息INT8U ?OSQPost (OS_EVENT ?*pevent,void ? *pmsg):

/*$PAGE*/ /*2018/2/22 ********************************************************************************************************* * POST MESSAGE TO A QUEUE * 給隊列發送消息 * Description: This function sends a message to a queue *描述:該功能是將消息發送給隊列。 * Arguments : pevent is a pointer to the event control block associated with the desired queue *參數: --pevent:指向隊列對應的事件控制塊的指針 * pmsg is a pointer to the message to send. * --pmsg:指向發送的消息的指針。 * Returns : OS_ERR_NONE The call was successful and the message was sent * OS_ERR_Q_FULL If the queue cannot accept any more messages because it is full. * OS_ERR_EVENT_TYPE If you didn't pass a pointer to a queue. * OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer *返回值:OS_ERR_NONE:成功調用,消息被發送。OS_ERR_Q_FULL:隊列已滿,不能接收新的消息。OS_ERR_EVENT_TYPE:沒有指向隊列的指針。OS_ERR_PEVENT_NULL:pevent為空指針。 * Note(s) : As of V2.60, this function allows you to send NULL pointer messages. 注釋:對于V2.60版本,該功能允許發送空指針消息。 ********************************************************************************************************* */#if OS_Q_POST_EN > 0u INT8U OSQPost (OS_EVENT *pevent,void *pmsg) {OS_Q *pq;/*指向隊列的指針*/#if OS_CRITICAL_METHOD == 3u OS_CPU_SR cpu_sr = 0u;#endif#if OS_ARG_CHK_EN > 0uif (pevent == (OS_EVENT *)0) { return (OS_ERR_PEVENT_NULL);}#endifif (pevent->OSEventType != OS_EVENT_TYPE_Q) { return (OS_ERR_EVENT_TYPE);}OS_ENTER_CRITICAL();/*進入中斷*/if (pevent->OSEventGrp != 0u)/*有任務在等待隊列消息*/{ /* 將最高優先級任務設為就緒態 */(void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_Q, OS_STAT_PEND_OK);OS_EXIT_CRITICAL();/*退出中斷*/OS_Sched();/*找到最高優先級任務并調度*/return (OS_ERR_NONE);}/*沒有任務等待隊列消息*/pq = (OS_Q *)pevent->OSEventPtr; /* 指針指向隊列控制塊 */if (pq->OSQEntries >= pq->OSQSize)/*隊列已滿*/{ OS_EXIT_CRITICAL();/*退出中斷*/return (OS_ERR_Q_FULL);}/*隊列不滿*/*pq->OSQIn++ = pmsg;/* 將消息插入到隊列中 */pq->OSQEntries++; /* 將隊列的消息數量進行更新 */if (pq->OSQIn == pq->OSQEnd)/*如果此時隊列滿了*/{ pq->OSQIn = pq->OSQStart;/*將進入隊列指針指向隊列首*/}OS_EXIT_CRITICAL();/*退出中斷*/return (OS_ERR_NONE); } #endif

通過消息隊列向任務發送消息INT8U ?OSQPostFront (OS_EVENT ?*pevent,?void *pmsg):

/*$PAGE*/ /*2018/2/22 ********************************************************************************************************* * POST MESSAGE TO THE FRONT OF A QUEUE * 通過消息隊列向任務發送消息 * Description: This function sends a message to a queue but unlike OSQPost(), the message is posted at * the front instead of the end of the queue. Using OSQPostFront() allows you to send * 'priority' messages. *描述:該功能是給隊列發送消息,但是與OSQPost()不同,這個消息是發送給隊列的開始,而不是結尾。OSQPostFront()允許你發送優先級高的消息。(消息隊列按照后入先出(LIFO)的方式工作, 而不是先入先出(FIFO)) * Arguments : pevent is a pointer to the event control block associated with the desired queue *參數: --pevent:指向事件控制塊的指針。 * pmsg is a pointer to the message to send. * --pmsg:指向要發送的消息的指針。 * Returns : OS_ERR_NONE The call was successful and the message was sent * OS_ERR_Q_FULL If the queue cannot accept any more messages because it is full. * OS_ERR_EVENT_TYPE If you didn't pass a pointer to a queue. * OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer *返回值:OS_ERR_NONE:調用成功,消息被發出。OS_ERR_Q_FULL:隊列已滿,不能接收消息。OS_ERR_EVENT_TYPE:沒有指向隊列的指針。OS_ERR_PEVENT_NULL:pevent為空指針。 * Note(s) : As of V2.60, this function allows you to send NULL pointer messages.注釋:在V2.60版本中,該功能允許發送空指針消息。 ********************************************************************************************************* */#if OS_Q_POST_FRONT_EN > 0u INT8U OSQPostFront (OS_EVENT *pevent,void *pmsg) {OS_Q *pq;/*指向消息隊列的指針*/#if OS_CRITICAL_METHOD == 3u OS_CPU_SR cpu_sr = 0u;#endif#if OS_ARG_CHK_EN > 0uif (pevent == (OS_EVENT *)0) { return (OS_ERR_PEVENT_NULL);}#endifif (pevent->OSEventType != OS_EVENT_TYPE_Q) { return (OS_ERR_EVENT_TYPE);}OS_ENTER_CRITICAL();/*進入中斷*/if (pevent->OSEventGrp != 0u)/*有任務正在等待隊列消息*/{ /*將最高優先級任務轉為就緒態*/(void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_Q, OS_STAT_PEND_OK);OS_EXIT_CRITICAL();/*退出中斷*/OS_Sched(); /* 找到最高優先級任務并調度 */return (OS_ERR_NONE);}/*沒有任務等待消息*/pq = (OS_Q *)pevent->OSEventPtr; /* 指向隊列控制塊的指針*/if (pq->OSQEntries >= pq->OSQSize)/*隊列已滿*/{ OS_EXIT_CRITICAL();/*退出中斷*/return (OS_ERR_Q_FULL);}if (pq->OSQOut == pq->OSQStart) /*當插入指針=指針的起始地址(指針)*/{ pq->OSQOut = pq->OSQEnd;/*插入指針跳轉到最后地址(指針)*/}pq->OSQOut--;/*插入指針減1*/*pq->OSQOut = pmsg; /*插入當前消息(內容) */pq->OSQEntries++;/* 消息數加1 */OS_EXIT_CRITICAL();/*退出中斷*/return (OS_ERR_NONE); } #endif

該函數與上一個函數十分相似,不同點在于這個函數是將消息插入到隊列的最前端。這樣就讓隊列的進出方式從FIFO(先進先出)變成了LIFO(后進先出)。

消息隊列向任務發消息(允許廣播消息)INT8U ?OSQPostOpt (OS_EVENT ?*pevent,void *pmsg,INT8U ?opt):

/*$PAGE*/ /*2018/2/22 ********************************************************************************************************* * POST MESSAGE TO A QUEUE * 消息隊列向任務發消息(允許廣播消息) * Description: This function sends a message to a queue. This call has been added to reduce code size * since it can replace both OSQPost() and OSQPostFront(). Also, this function adds the * capability to broadcast a message to ALL tasks waiting on the message queue. *描述:該功能將消息發送給隊列。該函數可以減少代碼長度因為它可以代替OSQPost() 和 OSQPostFront()。該功能允許廣播消息給所有等待消息的任務。 * Arguments : pevent is a pointer to the event control block associated with the desired queue *參數: --pevent:指向事件控制塊的指針。 * pmsg is a pointer to the message to send. * --pmsg:指向被發送消息的指針。 * opt determines the type of POST performed: * OS_POST_OPT_NONE POST to a single waiting task * (Identical to OSQPost()) * OS_POST_OPT_BROADCAST POST to ALL tasks that are waiting on the queue * OS_POST_OPT_FRONT POST as LIFO (Simulates OSQPostFront()) * OS_POST_OPT_NO_SCHED Indicates that the scheduler will NOT be invoked * --opt:選擇發送消息方式:OS_POST_OPT_NONE:只給一個等待的任務發送消息,與 OSQPost()相同。OS_POST_OPT_BROADCAST:向所有等待消息的任務發送消息。OS_POST_OPT_FRONT:與OSQPostFront()相同,消息進入隊列方式為LIFO。OS_POST_OPT_NO_SCHED:調度函數將不會被喚醒, * Returns : OS_ERR_NONE The call was successful and the message was sent * OS_ERR_Q_FULL If the queue cannot accept any more messages because it is full. * OS_ERR_EVENT_TYPE If you didn't pass a pointer to a queue. * OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer *返回值:OS_ERR_NONE:調用成功,消息被發出。OS_ERR_Q_FULL:隊列已滿,無法接收消息。OS_ERR_EVENT_TYPE:沒有指向隊列的指針。OS_ERR_PEVENT_NULL:pevent為空指針。 * Warning : Interrupts can be disabled for a long time if you do a 'broadcast'. In fact, the * interrupt disable time is proportional to the number of tasks waiting on the queue.警告:該函數調用后可能會中斷很長時間如果選擇的是broadcast(廣播)方式。中斷時間與等待的任務數有關。 ********************************************************************************************************* */#if OS_Q_POST_OPT_EN > 0u INT8U OSQPostOpt (OS_EVENT *pevent,void *pmsg,INT8U opt) {OS_Q *pq;/*指向消息隊列的指針*/#if OS_CRITICAL_METHOD == 3u OS_CPU_SR cpu_sr = 0u;#endif#if OS_ARG_CHK_EN > 0uif (pevent == (OS_EVENT *)0) { return (OS_ERR_PEVENT_NULL);}#endifif (pevent->OSEventType != OS_EVENT_TYPE_Q) { return (OS_ERR_EVENT_TYPE);}OS_ENTER_CRITICAL();/*進入中斷*/if (pevent->OSEventGrp != 0x00u) /*有任務正在等待消息*/{ if ((opt & OS_POST_OPT_BROADCAST) != 0x00u) /*選擇的方式為廣播方式(給所有任務發消息)*/{while (pevent->OSEventGrp != 0u) /*給所有任務發消息*/{ (void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_Q, OS_STAT_PEND_OK);}}else /*不是廣播方式,將消息發送給優先級最高的任務*/{ (void)OS_EventTaskRdy(pevent, pmsg, OS_STAT_Q, OS_STAT_PEND_OK);}OS_EXIT_CRITICAL();/*退出中斷*/if ((opt & OS_POST_OPT_NO_SCHED) == 0u) /*調度程序沒有被喚醒*/{ OS_Sched(); /*找到最高優先級任務并調度 */}return (OS_ERR_NONE);}/*沒有任務等待消息*/pq = (OS_Q *)pevent->OSEventPtr;/* 指向隊列控制塊的指針 */if (pq->OSQEntries >= pq->OSQSize)/*隊列已滿*/{ OS_EXIT_CRITICAL();/*退出中斷*/return (OS_ERR_Q_FULL);}/*隊列不滿*/if ((opt & OS_POST_OPT_FRONT) != 0x00u)/*將消息放在隊列的最前面*/{ if (pq->OSQOut == pq->OSQStart){ pq->OSQOut = pq->OSQEnd; }pq->OSQOut--;*pq->OSQOut = pmsg; } else/*FIFO方式*/{ *pq->OSQIn++ = pmsg; if (pq->OSQIn == pq->OSQEnd) { pq->OSQIn = pq->OSQStart;}}pq->OSQEntries++; /* 更新隊列中的數目 */OS_EXIT_CRITICAL();/*退出中斷*/return (OS_ERR_NONE); } #endif

獲得消息隊列的信息INT8U ?OSQQuery (OS_EVENT ?*pevent,OS_Q_DATA *p_q_data):

/*$PAGE*/ /*2018/2/22 ********************************************************************************************************* * QUERY A MESSAGE QUEUE * 獲得消息隊列的信息 * Description: This function obtains information about a message queue. *描述:該功能是獲得消息隊列的信息。 * Arguments : pevent is a pointer to the event control block associated with the desired queue *參數: --pevent:指向事件控制塊的指針。 * p_q_data is a pointer to a structure that will contain information about the message queue. * --p_q_data:指向結構體的指針,該指針包含消息隊列的信息。 * Returns : OS_ERR_NONE The call was successful and the message was sent * OS_ERR_EVENT_TYPE If you are attempting to obtain data from a non queue. * OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer * OS_ERR_PDATA_NULL If 'p_q_data' is a NULL pointer返回值:OS_ERR_NONE:調用成功,消息被發出。OS_ERR_EVENT_TYPE:對象不是隊列。OS_ERR_PEVENT_NULL:pevent為空指針。OS_ERR_PDATA_NULL:p_q_data為空指針。 ********************************************************************************************************* */#if OS_Q_QUERY_EN > 0u INT8U OSQQuery (OS_EVENT *pevent,OS_Q_DATA *p_q_data) {OS_Q *pq;/*指向隊列的指針*/INT8U i;OS_PRIO *psrc;/*指向源*/OS_PRIO *pdest;/*指向目的*/#if OS_CRITICAL_METHOD == 3u OS_CPU_SR cpu_sr = 0u;#endif#if OS_ARG_CHK_EN > 0uif (pevent == (OS_EVENT *)0) { return (OS_ERR_PEVENT_NULL);}if (p_q_data == (OS_Q_DATA *)0) { return (OS_ERR_PDATA_NULL);}#endifif (pevent->OSEventType != OS_EVENT_TYPE_Q) { return (OS_ERR_EVENT_TYPE);}OS_ENTER_CRITICAL();/*進入中斷*//*將事件(消息隊列)結構中的等待任務列表復制到pdata數據結構中*/p_q_data->OSEventGrp = pevent->OSEventGrp; /* 等待事件的任務組中的內容傳送到狀態數據結構中*/psrc = &pevent->OSEventTbl[0];/*保存pevent->OSEventTbl[0]對應的地址*/pdest = &p_q_data->OSEventTbl[0];/*保存pdata->OSEventTbl[0]對應的地址*/for (i = 0u; i < OS_EVENT_TBL_SIZE; i++) {*pdest++ = *psrc++;/*地址指針下移一個類型地址,獲取信號量的值*/}pq = (OS_Q *)pevent->OSEventPtr;/*將隊列事件指針保存到pq 中*/if (pq->OSQEntries > 0u)/*如果消息隊列指針中有消息*/{p_q_data->OSMsg = *pq->OSQOut; /* 將最早進入隊列得消息復制到數據結構的OSMsg中 */} else{p_q_data->OSMsg = (void *)0;/*如果隊列中沒有消息(包含一個空指針)*/}p_q_data->OSNMsgs = pq->OSQEntries;/*消息隊列中的消息數放置在數據結構的(OSNMsgs)中*/p_q_data->OSQSize = pq->OSQSize;/*消息隊列中的消息隊列容量放置在數據結構得(OSQSize)中*/OS_EXIT_CRITICAL();/*退出中斷*/return (OS_ERR_NONE); } #endif

獲得消息隊列的信息實際上就是將隊列中的消息復制到隊列對應的結構體中(p_q_data)。

隊列單元初始化void ?OS_QInit (void):

/*$PAGE*/ /*2018/2/22 ********************************************************************************************************* * QUEUE MODULE INITIALIZATION * 隊列單元初始化 * Description : This function is called by uC/OS-II to initialize the message queue module. Your * application MUST NOT call this function. *描述:該功能有uc/os-ii調用,來初始化消息隊列單元。你的應用程序不能調用該函數 * Arguments : none *參數:無 * Returns : none *返回值:無 * Note(s) : This function is INTERNAL to uC/OS-II and your application should not call it. 注釋:該功能為內部函數,你的應用程序不能調用。 ********************************************************************************************************* */void OS_QInit (void) {#if OS_MAX_QS == 1u/*只有一個隊列*/OSQFreeList = &OSQTbl[0];/*隊列空閑列表只指向一個對象*/OSQFreeList->OSQPtr = (OS_Q *)0;/*沒有指向下一個的指針。*/#endif#if OS_MAX_QS >= 2u/*隊列不止一個*/INT16U ix;INT16U ix_next;OS_Q *pq1;/*第一個指向隊列的指針*/OS_Q *pq2;/*第二個指向隊列的指針*/OS_MemClr((INT8U *)&OSQTbl[0], sizeof(OSQTbl)); /*清除隊列表*/for (ix = 0u; ix < (OS_MAX_QS - 1u); ix++)/*初始化空閑隊列控制塊列表*/{ ix_next = ix + 1u;pq1 = &OSQTbl[ix];pq2 = &OSQTbl[ix_next];pq1->OSQPtr = pq2;}pq1 = &OSQTbl[ix];pq1->OSQPtr = (OS_Q *)0;OSQFreeList = &OSQTbl[0]; #endif }到這里整個OS_Q.C文件就看完了。在之前學習的基礎上,這個文件就很簡單了。現在的文件內容看起來思路和之前的文件思路相仿,很容易理解。所以沒有做太多解釋。注釋很清晰。



總結

以上是生活随笔為你收集整理的OS_Q.C(全)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产色a在线观看 | mm1313亚洲精品国产 | 欧美一区二区在线刺激视频 | 99热999 | av免费在线观看1 | 日韩网站视频 | 综合色播 | 天天综合网 天天 | 欧美福利片在线观看 | 狠狠色丁香久久婷婷综合_中 | 午夜资源站 | 欧美人体xx | 免费精品久久久 | 草久视频在线观看 | 成人av午夜 | 91.精品高清在线观看 | 成年人app网址 | 中文字幕av免费 | 婷久久| 久久 亚洲视频 | 久久激五月天综合精品 | 久久夜色精品国产欧美乱 | 日韩特黄av | 国产在线精 | 欧美va日韩va | 99色资源 | 日本婷婷色 | 色婷婷视频在线 | 久久久国产一区二区 | 久久国语露脸国产精品电影 | 在线超碰av | 激情深爱.com | 精品久久久久免费极品大片 | 99 视频 高清| 亚洲自拍偷拍色图 | av电影免费观看 | www黄在线| 国产v在线观看 | 久久天天躁夜夜躁狠狠85麻豆 | 欧美激情精品一区 | 在线观看免费一区 | 8x成人在线 | 欧美精品中文字幕亚洲专区 | 狂野欧美激情性xxxx欧美 | av免费福利| 亚洲精品黄网站 | 大片网站久久 | 天天操天天干天天操天天干 | 黄色三级免费观看 | 中文字幕在线观看播放 | 日本久久免费电影 | 久久经典视频 | 九九热免费精品视频 | 天天操天天操天天操天天操天天操天天操 | 91爱爱网址| 免费观看黄 | 亚洲欧美日韩国产一区二区 | 91 在线视频 | 高清视频一区二区三区 | 国产精成人品免费观看 | 国产97视频| 精品在线小视频 | 久久字幕网 | 免费精品人在线二线三线 | 中文字幕一区二区三区久久蜜桃 | 又黄又刺激视频 | 国产精品美女久久久久久久久 | 最近日本中文字幕a | 成人一级 | 激情婷婷综合网 | 精品一区 在线 | 亚洲国产精品成人va在线观看 | 成人午夜剧场在线观看 | 日韩av电影网站在线观看 | 成人精品久久 | 一级黄毛片 | 欧美性色xo影院 | 欧美成人影音 | 97爱| 国产91免费看 | 在线看国产日韩 | 天天综合网天天综合色 | 久久久久久久久国产 | 亚洲最大av在线播放 | 国产在线无 | 99热国产在线 | 国产精品精品久久久 | www色| 又爽又黄在线观看 | 色播激情五月 | 日韩在线视频在线观看 | 成人av中文字幕在线观看 | 少妇18xxxx性xxxx片 | 黄色成人影视 | 97超碰在| 免费观看第二部31集 | 亚洲高清在线精品 | 99久久网站 | 国产免费又粗又猛又爽 | 黄色av三级在线 | 成人资源在线 | 久久99热这里只有精品 | 国产精品视频内 | 国产精品第一页在线观看 | 亚洲精品国内 | 91看片一区二区三区 | 天天干夜夜爱 | 国产999免费视频 | www.狠狠| 激情视频在线观看网址 | 国产特级毛片aaaaaa高清 | 精品久久久久久久久久久院品网 | 免费在线| 久久人操 | 亚洲一级影院 | 中文字幕在线不卡国产视频 | 免费黄色看片 | 久久夜色精品国产欧美乱极品 | 在线观av | www操操| 男女视频国产 | 久久国产美女 | 久久久久久久久久久黄色 | 开心激情综合网 | 久久午夜视频 | 97成人资源| 国偷自产视频一区二区久 | 欧美一级性生活 | 欧美日韩视频在线观看一区二区 | 国产做aⅴ在线视频播放 | 久久伦理电影 | 天天玩天天干 | 97视频免费在线看 | 国产伦精品一区二区三区… | 国内一级片在线观看 | 99国产精品一区二区 | 色综合久久99 | 日韩在线不卡视频 | 天天干天天干天天干天天干天天干天天干 | 亚洲专区在线播放 | 黄色一区二区在线观看 | 久久精品91视频 | 成人9ⅰ免费影视网站 | 亚洲高清在线 | 一区二区三区日韩在线观看 | 开心激情综合网 | 成人亚洲综合 | 久久久久久激情 | 国产一区电影在线观看 | 99精品在线视频观看 | 亚洲视频大全 | 久久久久久国产精品亚洲78 | 久久综合狠狠 | 免费a网站 | 不卡视频一区二区三区 | 亚洲激情综合网 | 久久精品中文字幕 | 国产剧情一区 | 久久www免费视频 | 日韩激情小视频 | 九九九九色 | 亚洲电影一级黄 | 精品一区二区av | 在线观看免费av网站 | 久久精品一二三区 | 精品福利在线 | 国产91在线观看 | 久久免费精品 | av成人在线电影 | 99产精品成人啪免费网站 | 天天射天天舔天天干 | 综合久久综合久久 | 日韩欧美高清在线 | 中文电影网 | 国产高清网站 | 亚洲国产中文字幕在线 | 四虎影视成人永久免费观看亚洲欧美 | 亚洲国产精品500在线观看 | 91久久久久久久 | 欧美在线观看视频一区二区三区 | 97在线观看视频免费 | 久热免费在线观看 | 日韩毛片在线免费观看 | 日韩女同一区二区三区在线观看 | av免费电影网站 | 天堂网在线视频 | 天天操网站 | 国产一区二区在线免费观看 | 国产无套精品久久久久久 | 成人av电影免费 | 日本动漫做毛片一区二区 | 欧美日韩精品在线观看 | 精品国产中文字幕 | 狠狠干我 | 四虎影视国产精品免费久久 | 国产欧美在线一区 | 久久国产精品久久久久 | 国产经典av | 97超碰站| 在线观看中文 | 亚洲激情久久 | 日韩欧美在线中文字幕 | 欧美极品久久 | 亚洲精品欧美视频 | 色黄久久久久久 | 国产精久久久久久久 | 国产精品午夜8888 | 色婷婷a| 91在线日本 | 99这里只有精品视频 | 亚洲成人资源在线观看 | 久久精彩免费视频 | 五月天婷婷在线视频 | 五月天天色| 国产福利一区二区三区视频 | 91精品国产福利在线观看 | 国产一级免费播放 | 免费av大片 | 久久久精品欧美一区二区免费 | 久久天天躁夜夜躁狠狠85麻豆 | 欧美日韩精品二区第二页 | 97人人视频| 国产成人综| 91丨九色丨勾搭 | 麻豆视频免费在线观看 | 亚洲视频精品 | 国产免费小视频 | 91九色网址| 最近最新mv字幕免费观看 | av动态图片 | 久久久久成| 在线观影网站 | 日韩精品免费专区 | 日本丶国产丶欧美色综合 | 五月婷婷,六月丁香 | 97偷拍在线视频 | 中文在线a∨在线 | 久久久久欠精品国产毛片国产毛生 | 欧美日韩在线免费视频 | 日韩av中文字幕在线免费观看 | 九色视频网址 | 中文字幕.av.在线 | 色婷婷六月天 | 久久精品中文字幕一区二区三区 | 三级av在线| 中文字幕三区 | 欧美国产亚洲精品久久久8v | 综合网天天射 | 欧美91精品国产自产 | 91网站观看 | 久久免费的视频 | 国产亚洲一区二区在线观看 | 欧美精品久久久久久久久久丰满 | 精品1区2区3区 | 日韩精品久久久免费观看夜色 | 狠狠撸电影 | 中文字幕视频在线播放 | 91在线观看欧美日韩 | 国产黄色精品网站 | 欧美一区二区三区在线播放 | 亚洲闷骚少妇在线观看网站 | 超碰成人网 | 麻豆国产精品永久免费视频 | 超碰最新网址 | 欧美日韩视频在线观看一区二区 | 中文字幕在线观看亚洲 | 亚洲国产精品电影在线观看 | 91大神免费视频 | 久久久高清免费视频 | 草久在线观看 | 一区二区三区 中文字幕 | 日韩av高清| 精品a视频 | 欧美一区二视频在线免费观看 | 91视频首页 | 久久精品女人毛片国产 | 国产精品久久久久一区二区国产 | 国产91av视频在线观看 | 成人在线观看免费视频 | 人人爽人人爽人人片 | 国产白浆在线观看 | 草久在线播放 | av电影在线免费 | 亚洲人成网站精品片在线观看 | 国产+日韩欧美 | 国产原创91 | 少妇bbb搡bbbb搡bbbb| 久久午夜鲁丝片 | 免费看国产精品 | 国产精品久久久久久五月尺 | 美女黄视频免费 | 久久8| 9999精品视频 | 中文字幕久久精品亚洲乱码 | 久青草视频 | 婷婷视频在线 | 国产99久久久国产精品免费看 | 国产免费亚洲 | 久久不卡国产精品一区二区 | 国产一级a毛片视频爆浆 | a在线免费观看视频 | 日韩a在线播放 | 欧美一级性视频 | 九九九九九国产 | 中文字幕亚洲不卡 | 亚洲春色综合另类校园电影 | 91视频黄色 | 色91av| 欧美在线日韩在线 | 中文字幕在线观看完整版 | 波多野结衣在线观看一区 | 成人在线视频论坛 | 四虎影视成人永久免费观看亚洲欧美 | 欧美精品一区二区蜜臀亚洲 | 久久99精品久久久久久久久久久久 | 视频在线观看一区 | 国产高清在线不卡 | 韩国av一区二区三区在线观看 | 字幕网av | 免费在线观看一级片 | 2023年中文无字幕文字 | 最近高清中文字幕在线国语5 | 亚洲欧美精品一区 | 国产日本在线观看 | 人人要人人澡人人爽人人dvd | www.eeuss影院av撸| 麻豆久久一区二区 | 欧美激情第28页 | a级国产乱理论片在线观看 伊人宗合网 | 狠狠色丁香婷婷综合久久片 | 色资源中文字幕 | 欧美日韩在线观看一区 | 欧美日韩一区二区免费在线观看 | 亚洲国产理论片 | 中文字幕高清免费日韩视频在线 | 国产裸体无遮挡 | 色综合婷婷久久 | 在线观看自拍 | 欧美一级日韩三级 | 91在线91拍拍在线91 | 99精品视频在线观看免费 | 国产成人久久精品77777综合 | 国产精品免费一区二区三区在线观看 | 成人亚洲网 | 免费a级黄色毛片 | 青青草久草在线 | 国产黄大片在线观看 | 日本爱爱免费视频 | 日本中文字幕在线一区 | 亚洲精品免费在线观看 | 黄色成年片 | 色噜噜在线观看视频 | 91九色蝌蚪视频在线 | 在线观看91网站 | 日本在线观看一区二区 | 成人三级黄色 | 91九色视频国产 | 99热这里有| 伊人天天狠天天添日日拍 | 亚洲视频www | 亚洲精品在线视频观看 | 色综合久久99| 国产成人精品999在线观看 | 亚洲综合导航 | av在线电影播放 | 日韩久久精品一区二区三区下载 | 99精品福利视频 | 丁香av | 中文字幕在线观看免费 | 国产第一页在线观看 | 九七视频在线 | 人人澡视频 | 激情欧美一区二区三区 | 久久久久高清 | 国产精品18久久久久久久久久久久 | 欧美日韩一区三区 | 久久精品久久久精品美女 | 一区二区欧美在线观看 | 国产一区二区三区久久久 | 69国产盗摄一区二区三区五区 | 国产成本人视频在线观看 | 国产成人精品女人久久久 | 国产日韩在线看 | 日韩素人在线观看 | 久久久久久精 | 色视频网站在线观看一=区 a视频免费在线观看 | 91香蕉视频黄色 | 最新日韩电影 | 99久久精品免费看国产四区 | 国产精品一区二区三区99 | 天天在线操 | 成人h在线播放 | 伊人久久av| 免费看黄在线观看 | 国产字幕在线观看 | 亚洲欧美国产精品 | 欧美日韩国产二区三区 | 中文字幕一区在线 | 亚洲一区二区精品视频 | 91精品在线观看视频 | 国产亚洲日本 | 精品国产自在精品国产精野外直播 | 中文字幕你懂的 | 成人一区二区在线观看 | 久久九九久久 | 欧美天堂视频在线 | 天天操天天色天天射 | 在线播放第一页 | 在线国产黄色 | 极品中文字幕 | 91人人插| 国产一区视频免费在线观看 | 在线观看成人国产 | 日日日日干 | 天天综合网久久综合网 | 中文字幕在线资源 | 久久久久久网 | 91精品综合在线观看 | 久久久久亚洲最大xxxx | 成人a在线观看高清电影 | 日韩在线视频二区 | 婷婷色 亚洲 | 99久久精品国 | 婷婷综合 | 国产精品毛片一区二区 | 999视频网 | 久久久久高清毛片一级 | 亚洲精品97 | 夜夜夜影院 | 日日爱视频 | 91成人精品 | 国产一区二区视频在线播放 | 91禁在线看 | 久久久久欧美精品999 | 欧美久草在线 | 狠狠干狠狠操 | 超级碰视频 | 久久久久久久久久免费 | 五月天免费网站 | av天天在线观看 | 中文字幕 国产专区 | 天天操天天综合网 | 操操操影院 | 友田真希x88av | 色婷婷播放 | 日韩激情视频 | 亚洲成av人影院 | 久久成人人人人精品欧 | 韩国中文三级 | zzijzzij日本成熟少妇 | 久久不见久久见免费影院 | 免费在线播放av电影 | 亚洲综合成人在线 | 国产综合在线视频 | 色综合婷婷 | 亚洲更新最快 | av手机版| www色综合| 久久久久久免费网 | 手机看国产毛片 | 在线免费视频一区 | 韩日精品在线观看 | 久久精品3 | 在线视频黄 | 丁香婷婷在线观看 | 国产一级二级在线观看 | 久久久激情网 | 日韩高清国产精品 | 精品亚洲成人 | 国产精品18久久久久久vr | 国产无遮挡又黄又爽在线观看 | 亚洲日本一区二区在线 | 中文字幕欧美日韩va免费视频 | 欧美99热| 欧美韩国日本在线观看 | 精品国产欧美 | 丝袜美腿亚洲 | 成人a大片| 激情综合站 | 9999在线视频 | 国产999免费视频 | 精品美女久久久久 | 国产剧情一区二区在线观看 | 最近日本中文字幕a | 天天综合网 天天 | 国产精品手机在线播放 | 色综合激情网 | 久久精品国产亚洲a | 91大神电影 | 91成人在线观看喷潮 | 中文字幕av全部资源www中文字幕在线观看 | 亚洲精品国精品久久99热一 | 激情久久五月 | 鲁一鲁影院 | 九九热在线观看视频 | av亚洲产国偷v产偷v自拍小说 | 久久精彩视频 | av福利在线免费观看 | 亚洲日本一区二区在线 | 青青五月天 | 丁香六月五月婷婷 | 黄色三级在线看 | 美女黄色网在线播放 | 国产99在线播放 | 欧美日韩国产一区二 | 中文免费在线观看 | 99视频久久 | 亚洲精品美女视频 | 国产精品久久久久久久妇 | 色婷婷播放 | 国产福利一区二区三区视频 | 欧美性粗大hdvideo | 国产香蕉久久 | 视频一区视频二区在线观看 | 夜色资源站国产www在线视频 | 国产看片网站 | 国产精品自产拍在线观看网站 | 三三级黄色片之日韩 | 一区二区三区四区五区在线 | 久久99久久99| 国产精品一区久久久久 | 高清日韩一区二区 | 国产欧美综合视频 | 精品亚洲免费视频 | 在线播放精品一区二区三区 | 久久综合中文字幕 | 91在线porny国产在线看 | 欧洲视频一区 | 999成人 | 国产成人精品在线播放 | 伊人亚洲综合网 | av日韩不卡| 欧美精品久久久久久久久久白贞 | 精品xxx | 人人干人人干人人干 | 国产精品自在线 | 免费精品在线观看 | 欧美一级高清片 | 在线观看免费视频 | 在线激情电影 | 午夜影视av | 欧洲一区二区三区精品 | 亚洲a成人v | 天天躁日日躁狠狠躁av麻豆 | 精品亚洲欧美无人区乱码 | 在线观看免费视频你懂的 | 国产一区二区在线免费 | 在线亚洲精品 | 国产精品 视频 | 免费av片在线 | 国产免费小视频 | 国产96在线 | 四虎影视8848dvd | 国内揄拍国产精品 | 国产香蕉久久精品综合网 | 九九激情视频 | 日韩精品免费一区二区三区 | 久久国产精品一区二区三区四区 | 免费观看黄 | 免费观看mv大片高清 | 久草综合视频 | 超碰在线最新地址 | 9在线观看免费 | 国产成人在线精品 | 91精品一区二区三区蜜臀 | 99国产精品一区 | 亚洲资源网| 黄色天堂在线观看 | 亚洲毛片一区二区三区 | 激情综合国产 | 蜜臀av夜夜澡人人爽人人桃色 | 亚洲japanese制服美女 | 国产高清永久免费 | 日日干,天天干 | 国产亚洲精品久久久久久 | 国外成人在线视频网站 | 韩国精品福利一区二区三区 | 成人av午夜| www天天操 | 97在线看片 | av九九九 | 丁香五月网久久综合 | 国产精品黑丝在线观看 | 蜜臀av性久久久久av蜜臀妖精 | 欧美午夜性 | 成人午夜电影网 | 亚洲自拍自偷 | www免费| 国产亚洲日本 | 国产精品视频全国免费观看 | 91aaa在线观看 | 亚洲美女精品 | 国产精品欧美 | 欧美日韩aa | 中文av免费 | www色com | 日本在线观看一区 | 玖玖综合网 | 日本 在线 视频 中文 有码 | 久久狠狠亚洲综合 | 国产专区精品视频 | 日本公妇在线观看 | 欧美电影在线观看 | 成年美女黄网站色大片免费看 | 国产99一区视频免费 | 色婷婷综合五月 | 国产日产精品一区二区三区四区 | 中字幕视频在线永久在线观看免费 | 黄色a视频 | 天天操偷偷干 | 毛片久久久 | 人人插人人草 | 久久久久久久久久网站 | 999在线观看视频 | 一本一本久久a久久精品牛牛影视 | www.香蕉视频在线观看 | 久久草在线精品 | www.xxx.性狂虐 | 久久久久激情 | av超碰在线 | 永久av免费在线观看 | 国产视频综合在线 | 久久精品激情 | 国产一二区视频 | 91九色网站 | 国产在线a视频 | 成 人 黄 色 片 在线播放 | 精品久久久久久久久久 | 婷婷视频在线播放 | 午夜狠狠操 | 亚洲国产人午在线一二区 | 天天摸日日摸人人看 | 欧美伊人网 | 激情偷乱人伦小说视频在线观看 | 爱色婷婷 | 中文字幕在线一区观看 | 精品无人国产偷自产在线 | 久久久久久久久久影视 | 在线观看黄色的网站 | 91最新视频在线观看 | 国产成人一区二 | 色婷婷激情 | 中文字幕在线一区观看 | 一色av| 九七在线视频 | 欧美网址在线观看 | 国产人成精品一区二区三 | 五月婷婷亚洲 | 天天干 天天摸 天天操 | 国产69精品久久app免费版 | 白丝av免费观看 | 日日日干| 久久久国产精品成人免费 | 伊人www22综合色 | 国产一区观看 | 日韩二三区 | 国产成人精品一区一区一区 | 免费观看的av | 久久综合九色综合久久久精品综合 | 色综合久久久久久久 | 亚洲视频2 | 人人爽人人做 | 亚洲狠狠| 国内精品久久久久影院一蜜桃 | 丁香婷婷在线 | 亚洲视频999 | 久久久精品国产一区二区 | 天天激情站 | 五月天婷亚洲天综合网鲁鲁鲁 | 美女视频久久久 | 欧美日韩亚洲在线观看 | 国产成人精品一区二区在线 | 精品1区2区3区 | 日韩和的一区二在线 | 国产区高清在线 | 五月激情亚洲 | 8x成人免费视频 | 9999精品 | 免费观看成人 | 国产在线播放一区二区三区 | 激情av一区二区 | 欧美日韩在线免费观看视频 | 国产又黄又硬又爽 | 97电影手机 | 五月天网站在线 | 精品久久一二三区 | 免费a级大片 | 丁香高清视频在线看看 | 国产成人精品久久久 | 中文字幕乱在线伦视频中文字幕乱码在线 | 91久久久久久久一区二区 | 久草国产在线 | 日日夜夜天天综合 | 欧美久久久一区二区三区 | 久久成人精品电影 | 九九九视频精品 | 日本黄色一级电影 | 亚洲专区在线播放 | www黄| 91在线看 | 精品久久久免费视频 | 久久免费国产 | 免费观看一级成人毛片 | 美女网站黄免费 | 天天色官网| 又黄又刺激又爽的视频 | 91精品资源 | 国产精品免费成人 | 国产精品初高中精品久久 | 五月天丁香综合 | 特级黄色片免费看 | 日韩欧美大片免费观看 | av+在线播放在线播放 | 人人爽人人爽人人片 | 亚洲最新av网址 | 欧美日韩成人 | 91成人小视频| 日韩国产精品毛片 | 一级国产视频 | 久久视频在线看 | 在线观看视频免费播放 | 国产手机在线播放 | 日韩欧美精品一区二区三区经典 | av在线影视| 激情五月六月婷婷 | 精品女同一区二区三区在线观看 | 91成人在线视频 | 天堂av色婷婷一区二区三区 | 成人国产电影在线观看 | 99久久精品国产欧美主题曲 | 日本系列中文字幕 | 久久精品免视看 | 热re99久久精品国产99热 | 色综合久久久久 | 亚洲精品www久久久久久 | 婷婷精品国产欧美精品亚洲人人爽 | 在线观看视频在线观看 | 2023国产精品自产拍在线观看 | 久久久久一区二区三区 | 免费看一级特黄a大片 | 999久久国精品免费观看网站 | 国产精品网红福利 | 免费观看v片在线观看 | 6699私人影院 | 丰满少妇久久久 | 三级av在线免费观看 | 毛片一区二区 | 婷婷亚洲五月色综合 | 天天干人人干 | 免费视频久久久 | www.97色.com| 久久国产剧场电影 | 中文在线免费观看 | 国产aa免费视频 | 日韩欧美一区二区三区黑寡妇 | 亚洲精品美女久久久久网站 | 亚洲一区美女视频在线观看免费 | 中文在线字幕观看电影 | 色搞搞| 97精品国自产拍在线观看 | 国产无套精品久久久久久 | 五月天激情开心 | 久久亚洲二区 | 香蕉视频网站在线观看 | 成人黄色电影免费观看 | 国产伦理久久精品久久久久_ | 国产成人福利在线观看 | 午夜色婷婷 | 成人一区二区三区在线 | 婷婷五月在线视频 | 91污视频在线 | 麻豆国产网站入口 | 久久久精品国产一区二区三区 | 成人午夜电影在线观看 | 欧美伦理电影一区二区 | 亚洲人成人在线 | 视频一区二区免费 | 99精品视频免费看 | 国产96视频 | 色婷婷久久 | 久久久亚洲网站 | 香蕉视频在线免费看 | 久色免费视频 | 日韩大片在线 | 伊人网av| 亚洲国产成人在线播放 | 欧美日韩精品二区第二页 | 国产91粉嫩白浆在线观看 | 久久国产精品区 | av直接看| 天天操天天爽天天干 | 国产中文字幕一区 | 在线看国产精品 | 久久精品伊人 | 久久精品国产一区 | 99精品视频网站 | 综合天堂av久久久久久久 | 久久99精品久久只有精品 | 午夜av电影院 | 日本69hd | 婷婷成人在线 | 国产精品刺激对白麻豆99 | 中文字幕在线国产精品 | 久久国产精品视频 | 黄色毛片视频免费 | 最新日韩在线观看视频 | 日韩在线视频不卡 | 国产一区二三区好的 | 国产盗摄精品一区二区 | 欧美日韩国内在线 | 亚洲黄色片一级 | 国产精品久久久久久久99 | 久久久久久久久久久免费视频 | 中文有码在线视频 | 国产精品一区二区在线 | 九九久久久久99精品 | 亚洲成人免费在线 | 色婷婷色 | 超碰在线观看av.com | 久久免费99精品久久久久久 | 国产成人精品电影久久久 | 亚洲片在线观看 | 精品国产电影 | 成人毛片一区 | 2023亚洲精品国偷拍自产在线 | 免费美女久久99 | 五月婷婷免费 | 91精品免费看 | 91av电影| 国产成人一区二区精品非洲 | av福利免费| 国产日韩欧美在线观看 | 99综合视频 | 国产小视频在线看 | 久久99视频免费观看 | 中文字幕第一页在线播放 | 69热国产视频 | 亚洲做受高潮欧美裸体 | 国产精品欧美久久久久久 | 色欧美88888久久久久久影院 | 五月婷婷丁香综合 | 黄色aaa级片| 成 人 免费 黄 色 视频 | 中文字幕一区二区三区精华液 | www夜夜操com | www.色婷婷 | 中文在线免费一区三区 | 麻豆影视网 | 99久久国产免费免费 | 精品久久国产精品 | 欧美成人理伦片 | 91免费高清观看 | 免费看精品久久片 | 久久综合福利 | 亚洲一区美女视频在线观看免费 | 国产男女无遮挡猛进猛出在线观看 | 久久成人毛片 | 在线免费观看一区二区三区 | 免费亚洲精品视频 | 国产精品欧美日韩在线观看 | 日韩精品一区二区三区高清免费 | 97成人精品视频在线播放 | 亚洲 欧美 成人 | 免费观看一区二区三区视频 | 在线观看va | 91精品啪在线观看国产线免费 | 黄色精品国产 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 四虎成人av | 午夜影院日本 | 国产永久免费观看 | 99久久夜色精品国产亚洲 | 国产黑丝一区二区三区 | 国产v视频| 男女男视频 | 在线中文字幕av观看 | 久久精品美女视频 | 91av色 | 久久久久亚洲天堂 | 久久免费在线观看视频 | 欧洲色吧 | 夜夜干天天操 | 免费在线一区二区 | 日韩精品第一区 | 久久婷婷开心 | 婷婷综合伊人 | 国产精品午夜久久久久久99热 | 成人国产一区二区 | 国产视频黄 | 精品在线二区 | 在线av资源 | 色天天综合久久久久综合片 | 91天天操 | 国产 视频 高清 免费 | 久久草草影视免费网 | 四虎8848免费高清在线观看 | 这里只有精品视频在线 | 欧美一级视频免费看 | 午夜精品一区二区三区在线观看 | 国产手机视频在线播放 | avav片| 久久久久欧美精品999 | 欧美另类视频 | 成人h在线观看 | 亚洲黄色网络 | 日韩免费在线观看网站 | 国产一区二区三区午夜 | 久久久网站| 欧美伦理电影一区二区 | 在线综合 亚洲 欧美在线视频 | 国产精品门事件 | 国产久视频 | 精品v亚洲v欧美v高清v | 三级动图 | 在线视频婷婷 | 色九九影院 | 亚洲天堂精品视频在线观看 | 91麻豆免费看 | 永久免费观看视频 | 久久精品久久精品 | 久久精品一区二区三 | 亚洲在线综合 | 一区二区三区精品在线视频 | 久久久久伦理电影 | 久久精品官网 | 亚洲精品综合欧美二区变态 | 激情婷婷 | 日韩精品一区二区三区电影 | 中文字幕色网站 | 日日干天天 | 91福利视频免费观看 | 天天草天天爽 | 国产免费观看视频 | 在线观看视频h | 天天干天天看 | 国产日韩欧美在线观看视频 | 日韩有码欧美 | 97人人模人人爽人人少妇 | 中文字幕黄色av | 久久视奸 | 久久69精品久久久久久久电影好 | 蜜臀av性久久久久蜜臀av | 久久精品91久久久久久再现 | 午夜精品久久久99热福利 | 97在线观看免费高清完整版在线观看 | 日本亚洲国产 | www.黄色片网站 | 亚洲另类久久 | 精品国产福利在线 | 91精品欧美一区二区三区 | 九热精品 | 五月婷婷电影网 | 在线免费视频你懂的 | 国产精品综合在线观看 | 日韩av不卡在线播放 | 亚洲最大的av网站 | 探花视频免费观看 | 色国产视频 | 欧美一区二视频在线免费观看 | 国产亚洲精品福利 | 成人网看片 | 久久精品4 | 国产aaa大片| 啪啪免费观看网站 | 国产系列 在线观看 | 五月婷香蕉久色在线看 | 日韩专区一区二区 | av网站有哪些 | 成人国产网址 | 91麻豆免费版| 欧美中文字幕第一页 | 97人人网 | 91视频久久久久 | 黄色aaa级片 | 免费三级影片 | 久久久久久国产精品 | 中文av一区二区 | 久久成人18免费网站 | 国产午夜精品福利视频 | 97久久精品午夜一区二区 | 韩日三级av| 色爱成人网| www.狠狠操.com | 久久精品美女视频网站 | 国产精品久久久久久久久久久免费看 | 日韩亚洲在线 | 国产精品第一 | 美女国产免费 | 成人午夜电影在线播放 | 国产精品久久久久久av | 超碰官网 | 伊人五月 | 午夜精品一区二区三区视频免费看 | 91女人18片女毛片60分钟 | 亚洲精选99 | 日韩欧美高清免费 | 久久三级毛片 | 欧美日韩99|