国产精品毛片久久久久久久 I 欧美操穴 I 欧美成人一级 I 黄网址在线观看 I 美女激情网站 I 久久网av I 超污网站在线观看 I 曰本无码人妻丰满熟妇啪啪 I 国产欧美大片 I 天天草夜夜操 I 干美女少妇 I 日韩美女激情 I 亚洲女同在线 I 老司机激情影院 I 精品国产亚洲一区二区麻豆 I 亚洲天堂五码 I 亚洲产国偷v产偷v自拍涩爱 I 欧洲午夜精品 I 乱人伦精品 I 国产精品欧美一级免费 I 91精品论坛 I 日本视频专区 I 久久理论电影网 I 精品国产亚洲第一区二区三区 I 久久av在线看 I 亚洲综合精品四区 I 久久久国产乱子伦精品 I 午夜人妻久久久久久久久

首頁(yè) 智能 > 正文

RTOS任務(wù)進(jìn)行單元測(cè)試的4種策略

https://www.beningo.com/4-tactics-to-unit-test-rtos-tasks/

超過(guò)50%的嵌入式軟件項(xiàng)目使用實(shí)時(shí)操作系統(tǒng)(RTOS)。不幸的是,使用RTOS會(huì)給使用現(xiàn)代開(kāi)發(fā)技術(shù)(如測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)、DevOps或自動(dòng)測(cè)試)的開(kāi)發(fā)者帶來(lái)一些問(wèn)題。例如,當(dāng)開(kāi)發(fā)者試圖為他們的任務(wù)編寫(xiě)測(cè)試時(shí),他們遇到的第一個(gè)問(wèn)題是任務(wù)函數(shù)包含一個(gè)無(wú)限循環(huán)!任何直接調(diào)用任務(wù)函數(shù)的測(cè)試都會(huì)被認(rèn)為是一個(gè)無(wú)限循環(huán)!因此,任何直接調(diào)用任務(wù)函數(shù)的測(cè)試將永遠(yuǎn)不會(huì)完成。這篇文章將探討對(duì)RTOS任務(wù)進(jìn)行單元測(cè)試的幾種策略,其中包括:

  • 循環(huán)的重新定義
  • 完成信號(hào)
  • 任務(wù)排除
  • 通過(guò)OSAL使用主機(jī)線程(強(qiáng)烈建議)。

注意:在這篇文章中,我們將把任務(wù)和線程作為同義詞。我們還將使用ThreadX作為RTOS的例子。


(相關(guān)資料圖)

任務(wù)的剖析

在RTOS任務(wù)中,有幾個(gè)部分用于管理任務(wù)行為。首先,初始化部分聲明變量,實(shí)例化對(duì)象,初始化驅(qū)動(dòng)程序,并負(fù)責(zé)將傳遞給任務(wù)的任何數(shù)據(jù)轉(zhuǎn)換成正確的類型。接下來(lái),有一個(gè)無(wú)限循環(huán),執(zhí)行所有任務(wù)的行為。例如,如果我們寫(xiě)了管理傳感器的任務(wù),我們希望任務(wù)的無(wú)限循環(huán)能定期檢索和處理傳感器的數(shù)據(jù)。最后,任務(wù)完成部分規(guī)定了任務(wù)完成后的情況。

典型的任務(wù)使用ThreadX可能看起來(lái)像下面的代碼片段:

{    void Task_Sensors(ULONG ThreadInput)    {        // SECTION 1: Initialization        (void) ThreadInput;             SensorData_t SensorRawData;        SensorData_t SensorData;        SensorData_t pSensorDataTx = &SensorData;             Sensor_Init();             // SECTION 2: Tasks main function / behavior / purpose        while(true)        {            SensorRawData = Sensor_Sample();            SensorData    = SensorProcess(SensorRawData);                 (void)tx_queue_send(SensorTxQ, (void *)&pSensorDataTx, TX_WAIT_FOREVER);                 tx_thread_sleep(TASK_SENSORS_PERIOD_MS);                }             // SECTION 3: TasK Completion Activities    }

我發(fā)現(xiàn),編寫(xiě)周期性任務(wù)的開(kāi)發(fā)人員希望他們的任務(wù)能夠無(wú)限期地運(yùn)行,而沒(méi)有考慮如果任務(wù)運(yùn)行到完成會(huì)發(fā)生什么。

看看這個(gè)任務(wù),你可以看到,如果一個(gè)開(kāi)發(fā)者想在測(cè)試中對(duì)Task_Sensors進(jìn)行調(diào)用,他們會(huì)遇到幾個(gè)問(wèn)題。因此,讓我們來(lái)看看這些問(wèn)題,并按照我經(jīng)??吹降拈_(kāi)發(fā)人員在達(dá)成最直接和最好的解決方案之前所嘗試的各種策略。

參考資料

  • 軟件測(cè)試精品書(shū)籍文檔下載持續(xù)更新 https://github.com/china-testing/python-testing-examples 請(qǐng)點(diǎn)贊,謝謝!
  • 本文涉及的python測(cè)試開(kāi)發(fā)庫(kù) 謝謝點(diǎn)贊! https://github.com/china-testing/python_cn_resouce
  • python精品書(shū)籍下載 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md

循環(huán)的重新定義

經(jīng)??吹焦こ處煵渴鸬牡谝粋€(gè)戰(zhàn)術(shù)是循環(huán)重定義。循環(huán)的重新定義是指根據(jù)代碼是生產(chǎn)代碼還是測(cè)試代碼,對(duì)任務(wù)中的無(wú)限循環(huán)進(jìn)行操作。例如,Task_Sensor的代碼將被改寫(xiě)為如下內(nèi)容:

void Task_Sensors(ULONG ThreadInput)    {        // SECTION 1: Initialization        (void) ThreadInput;             SensorData_t SensorRawData;        SensorData_t SensorData;        SensorData_t pSensorDataTx = &SensorData;             Sensor_Init();             // SECTION 2: Tasks main function / behavior / purpose        while(LOOP_STATE)        {            SensorRawData = Sensor_Sample();            SensorData    = SensorProcess(SensorRawData);                 (void)tx_queue_send(SensorTxQ, (void *)&pSensorDataTx, TX_WAIT_FOREVER);                 tx_thread_sleep(TASK_SENSORS_PERIOD_MS);                }             // SECTION 3: TasK Completion Activities    }

這個(gè)想法是,開(kāi)發(fā)人員可以創(chuàng)建有條件編譯的代碼,以控制循環(huán)是永遠(yuǎn)運(yùn)行還是一次。這段代碼通常看起來(lái)像下面這樣:

#ifdef PRODUCTION        #define LOOP_STATE true    #else        #define LOOP_STATE false    #endif

除了編譯后的代碼外,構(gòu)建時(shí)還必須定義或不定義PRODUCTION宏。

一般來(lái)說(shuō),這不是使RTOS任務(wù)可測(cè)試的好方法,有幾個(gè)原因。首先,我們正在測(cè)試的代碼正在改變。我們的任務(wù)在測(cè)試過(guò)程中的行為會(huì)與運(yùn)行時(shí)的行為不同。第二,我們正在添加有條件編譯的代碼,這通常不是很干凈。第三,在定義宏的過(guò)程中,有可能出現(xiàn)人為錯(cuò)誤。最后,雖然循環(huán)的重新定義對(duì)于Task_Sensor來(lái)說(shuō)似乎很有吸引力,但測(cè)試任務(wù)的相互作用會(huì)變得過(guò)于復(fù)雜。事實(shí)上,如果我們需要循環(huán)運(yùn)行三到四次會(huì)發(fā)生什么?我們現(xiàn)在需要為L(zhǎng)OOP_STATE定義獨(dú)特的定義。

完成信號(hào)

完成信號(hào)是對(duì)循環(huán)重定義思想的修改,允許任務(wù)無(wú)限期地運(yùn)行,直到收到任務(wù)應(yīng)該停止執(zhí)行的信號(hào)。在這種情況下,任務(wù)代碼被修改為刪除宏定義,轉(zhuǎn)而使用循環(huán)變量,如下圖所示:

void Task_Sensors(ULONG ThreadInput)    {        // SECTION 1: Initialization        (void) ThreadInput;        bool   isRunning = true;             SensorData_t SensorRawData;        SensorData_t SensorData;        SensorData_t pSensorDataTx = &SensorData;             Sensor_Init();             // SECTION 2: Tasks main function / behavior / purpose        while(isRunning)        {            SensorRawData = Sensor_Sample();            SensorData    = SensorProcess(SensorRawData);                 (void)tx_queue_send(SensorTxQ, (void *)&pSensorDataTx, TX_WAIT_FOREVER);                 tx_thread_sleep(TASK_SENSORS_PERIOD_MS);                         isRunning = Task_GetDesiredRunState(TASK_SENSOR);        }             // SECTION 3: TasK Completion Activities    }

正如你所看到的,在任務(wù)結(jié)束時(shí),我們檢查該任務(wù)是否仍在運(yùn)行。這就解決了運(yùn)行多個(gè)循環(huán)的問(wèn)題,并通過(guò)刪除宏來(lái)清理代碼。然而,我們現(xiàn)在已經(jīng)為任務(wù)的運(yùn)行引入了復(fù)雜性,并為內(nèi)存損壞或單一事件干擾(SEU)打開(kāi)了機(jī)會(huì),以改變isRunning的狀態(tài)并完成我們的任務(wù)。

任務(wù)在生產(chǎn)中運(yùn)行到完成似乎不是什么大問(wèn)題,但不是所有的實(shí)時(shí)操作系統(tǒng)都能優(yōu)雅地處理這個(gè)問(wèn)題。例如,如果你允許FreeRTOS的任務(wù)運(yùn)行到完成,內(nèi)核就會(huì)窒息并停止執(zhí)行所有的代碼!

任務(wù)排除法

當(dāng)我們不測(cè)試我們的任務(wù)時(shí),任務(wù)排除就發(fā)生了!我們不需要測(cè)試任務(wù)!而不是試圖從測(cè)試線束中調(diào)用任務(wù),我們創(chuàng)建測(cè)試來(lái)運(yùn)行任務(wù)本身的代碼。 任務(wù)排除要求我們重寫(xiě)我們的函數(shù),使其看起來(lái)像下面這樣:

void Task_Sensors(ULONG ThreadInput)    {        // SECTION 1: Initialization        (void) ThreadInput;             Task_SensorInit();             // SECTION 2: Tasks main function / behavior / purpose        while(true)        {            Task_SensorRun();                 tx_thread_sleep(TASK_SENSORS_PERIOD_MS);                }             // SECTION 3: TasK Completion Activities    }              /**********************************     * Placed in a different module     **********************************/         void Task_SensorInit(void)    {        SensorData_t SensorRawData;        SensorData_t SensorData;        SensorData_t pSensorDataTx = &SensorData;             Sensor_Init();    }         void Task_SensorRun(void)    {        SensorRawData = Sensor_Sample();        SensorData    = SensorProcess(SensorRawData);             (void)tx_queue_send(SensorTxQ, (void *)&pSensorDataTx, TX_WAIT_FOREVER);    }

老實(shí)說(shuō),上面的代碼就是任務(wù)應(yīng)該有的樣子。這段代碼非常干凈,也很容易理解。但問(wèn)題是,我們是通過(guò)嘗試使用一種不太理想的技術(shù)來(lái)達(dá)到這個(gè)目的的。

我們現(xiàn)在在Task_Sensors中看到的任務(wù)代碼非常簡(jiǎn)單,任務(wù)排除會(huì)說(shuō)我們不需要測(cè)試它。因此,相反,我們將在我們的測(cè)試線束中測(cè)試Task_SensorInit和Task_SensorRun函數(shù)。畢竟,這些函數(shù)被保存在一個(gè)單獨(dú)的模塊中,所以我們可以將任務(wù)代碼從測(cè)試線束中排除,實(shí)現(xiàn)我們所期望的100%的代碼覆蓋,對(duì)嗎?

任務(wù)排除的問(wèn)題是,在我們?cè)谀繕?biāo)上運(yùn)行應(yīng)用程序之前,我們永遠(yuǎn)不會(huì)測(cè)試任務(wù)代碼。不幸的是,我們也欺騙自己,認(rèn)為我們的測(cè)試覆蓋了所有的代碼。

優(yōu)點(diǎn)是我們可以根據(jù)需要從測(cè)試中調(diào)用任務(wù)中的函數(shù)。我們已經(jīng)實(shí)現(xiàn)了這一點(diǎn),并避免了需要處理無(wú)限的while循環(huán)的問(wèn)題。代碼更加簡(jiǎn)潔,我們也沒(méi)有創(chuàng)建一堆條件性編譯語(yǔ)句。

雖然這種技術(shù)可以使測(cè)試任務(wù)代碼更容易,但從技術(shù)上講,它不是在測(cè)試任務(wù)代碼。相反,它是一種變通方法。為了測(cè)試你的任務(wù)代碼,你應(yīng)該嘗試在你的主機(jī)上創(chuàng)建一個(gè)線程或任務(wù),并在那里運(yùn)行這些代碼。

通過(guò)OSAL使用主機(jī)線程(強(qiáng)烈建議)。

測(cè)試RTOS任務(wù)的真正問(wèn)題與大多數(shù)任務(wù)有while語(yǔ)句的事實(shí)無(wú)關(guān)。相反,這個(gè)問(wèn)題來(lái)自于開(kāi)發(fā)者對(duì)測(cè)試的思考和方法。到目前為止,我們所研究的所有策略都假定我們想直接從我們的測(cè)試線束中調(diào)用Task_Sensors。這就是問(wèn)題所在。在我們的測(cè)試線束中,我們想創(chuàng)建一個(gè)運(yùn)行的Task_Sensors任務(wù)或線程,而不是進(jìn)行函數(shù)調(diào)用!這就是問(wèn)題所在!

我們測(cè)試?yán)Ь车母驹蚴?,開(kāi)發(fā)人員沒(méi)有利用操作系統(tǒng)抽象層(OSAL)。相反,他們直接進(jìn)入RTOS的API并使用這些API。雖然調(diào)用RTOS APIs很快,而且似乎是一個(gè)很好的方法,但它是將RTOS與應(yīng)用程序代碼緊密地耦合在一起。這種耦合使得測(cè)試正確使用任務(wù)或線程的應(yīng)用程序代碼變得非常困難。

最佳的方法是將RTOS的細(xì)節(jié)隱藏在操作系統(tǒng)抽象層(OSAL)的后面。例如,如果你檢查我們到目前為止所看到的各種版本的Task_Sensors,你會(huì)發(fā)現(xiàn)我們正在使用ThreadX tx_queue_send API來(lái)發(fā)送消息到隊(duì)列。因此,我們應(yīng)該把這些細(xì)節(jié)放在OSAL后面,這樣我們的任務(wù)就會(huì)像下面這樣:

void Task_Sensors(ULONG ThreadInput)    {        // SECTION 1: Initialization        (void) ThreadInput;        bool   isRunning = true;             SensorData_t SensorRawData;        SensorData_t SensorData;        SensorData_t pSensorDataTx = &SensorData;             Sensor_Init();             // SECTION 2: Tasks main function / behavior / purpose        while(true)        {            SensorRawData = Sensor_Sample();            SensorData    = SensorProcess(SensorRawData);                 (void)OSAL_Q_Send(SensorTxQ, (void *)&pSensorDataTx, OS_WAIT_FOREVER);                 tx_thread_sleep(TASK_SENSORS_PERIOD_MS);                }             // SECTION 3: TasK Completion Activities    }

OSAL_Q_Send是一個(gè)抽象,我們的應(yīng)用程序代碼使用它來(lái)發(fā)送隊(duì)列中的數(shù)據(jù)。應(yīng)用程序不應(yīng)該關(guān)心我們是否在使用ThreadX、FreeRTOS、pthread或任何其他RTOS或任務(wù)調(diào)度器。根據(jù)我們想要編譯代碼的系統(tǒng),會(huì)提供一個(gè)實(shí)現(xiàn)文件。這樣做有很多好處,比如說(shuō):

  • 應(yīng)用程序不與實(shí)時(shí)操作系統(tǒng)相聯(lián)系
  • 測(cè)試可以使用主機(jī)的線程框架
  • 應(yīng)用程序是可移植和可重復(fù)使用的
  • 避免了臨時(shí)性的和黑客式的測(cè)試方法進(jìn)行測(cè)試。

對(duì)于許多對(duì)使用DevOps和自動(dòng)測(cè)試線束感興趣的開(kāi)發(fā)者來(lái)說(shuō),你可能至少有針對(duì)你所選擇的RTOS和pthread的實(shí)現(xiàn),pthread是Linux的POSIX線程庫(kù)。不幸的是,我們?nèi)绾问褂胮thread以及設(shè)計(jì)和構(gòu)建OSAL已經(jīng)超出了今天的范圍,但我們將在未來(lái)探討這些話題。

現(xiàn)在,如果你有興趣看一些OSAL的例子,我推薦你看一下CMSIS-RTOS-V2和NASA的Aeronautics GSC-18730-1。有可能,對(duì)于你的需求來(lái)說(shuō),這些都是過(guò)剩的,但它們是完全實(shí)現(xiàn)OSAL的好例子。我建議探索它們,并慢慢設(shè)計(jì)和建立你的OSAL,你可以在你所有的應(yīng)用程序中使用。

小結(jié)

有幾種策略可以讓開(kāi)發(fā)者用來(lái)對(duì)任務(wù)或線程進(jìn)行單元測(cè)試。正如我們?cè)诮裉斓奈恼轮兴吹降?,大多?shù)開(kāi)發(fā)人員可以部署的戰(zhàn)術(shù)都是針對(duì)未能將其任務(wù)架構(gòu)為使用OSAL的變通方法。一旦有了OSAL,任務(wù)代碼就可以通過(guò)提供抽象層背后的必要功能,使用任何RTOS或本地線程庫(kù)進(jìn)行測(cè)試。OSAL層有助于:

  • 簡(jiǎn)化測(cè)試策略
  • 保持代碼的清潔
  • 提高靈活性、可移植性和重用性

如果你想測(cè)試你所有的代碼,那么通過(guò)OSAL來(lái)利用pthread是最好的方法。

關(guān)鍵詞:

最近更新

關(guān)于本站 管理團(tuán)隊(duì) 版權(quán)申明 網(wǎng)站地圖 聯(lián)系合作 招聘信息

Copyright © 2005-2023 創(chuàng)投網(wǎng) - www.zhigu.net.cn All rights reserved
聯(lián)系我們:39 60 29 14 2@qq.com
皖I(lǐng)CP備2022009963號(hào)-3

主站蜘蛛池模板: 亚洲欧美日韩综合在线丁香 | 日本免费一区二区三区高清视频 | 欧美成性色 | 伦人伦xxx国产对白 国产三级av在线播放 | 国产成人午夜精品影院 | 又黄又爽又色成人免费视频体验区 | 国内精品久久久久影院嫩草 | 一级黄色片毛片 | 最新国产拍偷乱偷精品 | 日韩欧美tⅴ一中文字暮 | 性欧美疯狂xxxxbbbb | 欧美精品中文字幕亚洲专区 | 国产无遮挡免费真人视频在线观看 | 日韩中文字幕区一区有砖一区 | 丰满人妻一区二区三区视频 | 日韩一级在线观看 | 中文无码精品一区二区三区 | 国产a国产国产片 | 成人在线观看毛片 | 午夜理理伦电影a片无码 | 老地方在线观看免费追剧网站 | 国产精品无码天天爽视频 | 国产精品亚洲专区无码不卡 | 亚洲综合久久一本伊一区 | 久久精品免费国产 | 国产桃色无码视频在线观看 | 美女裸体色黄污视频网站 | 欧美亚洲国产一区二区三区 | 五月天久久久 | 国产精品美女一区二区视频 | 国产美足白丝榨精在线观看sm | 成人性欧美丨区二区三区 | 人人爽人人舔 | 极品主播超大尺度福利视频在线 | 欧美人与黑人交 | 亚洲高清中文字幕 | 竹菊影视欧美日韩一区二区三区四区五区 | 国产真实农村乱对白精彩 | 国产午夜福利久久精品 | 国产极品久久久 | 四川丰满少妇毛片新婚之夜 | 亚洲人成网站免费播放 | 久热一区 | 欧洲久久久久久 | 欧美做爰啪啪xxxⅹ性 | 理论片一区 | 久久婷婷国产91天堂综合精品 | 在线视频国产网址你懂的 | 另类 专区 欧美 制服丝袜 | 亚洲日本中文字幕在线四区 | 国产成人午夜福利在线观看 | 日韩欧美日本 | 毛片a久久99亚洲欧美毛片 | 粉嫩av一区二区三区四区在线观看 | 国产亚洲综合aa系列 | 婷色综合 | 日韩人妻无码制服丝袜视频 | 国产亚洲一本大道中文在线 | 精品日产一卡2卡三卡4卡自拍 | 主站蜘蛛池模板: 蛛词}| 荫蒂被男人添的好舒服爽免费视频 | 看国产黄大片在线观看 | 国内精品国产成人国产三级粉色 | 中文av一区二区 | 国内精品99| 亚洲欧美日韩成人综合网 | 在线精品自偷自拍无码中文 | 91啦视频| 久久嫩草精品久久久精品 | 中文字幕精品一区二区三区在线 | 午夜福利在线观看6080 | 做爰xxxⅹ性69免费视频 | 亚洲乱码国产乱码精品天美传媒 | 成年女人免费视频播放体验区 | 国产精品激情av久久久青桔 | 国产成人无码精品午夜福利a | 亚洲国产无线乱码在线观看 | 国产在线看片免费视频 | 欧美成 人版在线观看 | 午夜丰满少妇性开放视频 | 国产亚洲99天堂一区 | 末成年毛片在线播放 | 国产一区激情 | 色婷婷亚洲精品 | 初尝黑人巨炮波多野结衣183 | 无码人妻丰满熟妇啪啪网站 | 久久精品久久久久久噜噜老黄 | 中文字幕第一区高清av | 久久黄色小视频 | 日日躁夜夜躁狠狠躁夜夜躁 | 欧美xxx精品 | 黄色三区| 亚洲中文久久久精品无码 | aⅴ亚洲 日韩 色 图网站 播放 | 国产午夜福利在线观看红一片 | 末成年女a∨片一区二区 | www国产精品内射老师 | 国产免费1卡二卡三卡四卡 在线视频 一区 色 成·人免费午夜无码视频蜜芽 | 久久天堂国产香蕉三区 | 含羞草导航| 超薄肉色丝袜一二三 | 一品道av| 伊人久久大香线蕉成人综合网 | 超级黄18禁色惰网站 | 99国产精品国产精品九九 | 午夜影院18 | 国产精品久久久久无码av1 | 国模无码大尺度一区二区三区 | 免费在线成人网 | 日韩在线二区 | 蜜臀久久99精品久久久 | 天天操视频网站 | 精品视频在线观自拍自拍 | 国产午夜在线视频 | 国产性猛交╳xxx乱大交 | 亚洲色大成网站www在线观看 | 美女私密调教81网站 | 8ⅹ8x擦拨擦拨成人免费视频 | 婷婷色香五月综合缴缴情香蕉 | 主站蜘蛛池模板: 蛛词}| 色综合久久88色综合天天6 | av国产网站 | 狠狠2021最新版 | 操人视频网站 | 久久天天躁夜夜躁狠狠i女人 | 内射夜晚在线观看 | 成人免费高清在线播放 | 国产αv| 日日操夜夜摸 | 伊在线久久丫 | 久久久精品午夜免费不卡 | 蜜桃免费一区二区三区 | 色欲综合视频天天天综合网站 | 欧美在线精彩视频免费播放 | 亚洲区免费中文字幕影片|高清在线观看 | 成人免费一区二区三区视频 | 美女毛片在线看 | 在线精品自偷自拍无码 | 日韩精品无码一区二区视频 | 欧美性猛交xxxx乱大交 | 日韩中文视频 | 亚洲成av人片无码天堂下载 | yw尤物av无码国产在线观看 | 国产情侣自拍av | 最新国产毛片 | 色综合图 | 美女久久网站 | 欧美日韩色图片 | 人av在线| 2018亚洲а∨天堂 | 91精品国产综合久久久蜜臀粉嫩 | 欧美极品少妇xxxxⅹ | 国产女人天天春夜夜春 | 免费一级做a爰片性色毛片 狠狠综合久久av一区二区老牛 | 青视频在线 | 亚洲欧美在线看 | 女子spa高潮呻吟抽搐 | 国内av免费 | 7777色鬼xxxx欧美色妇 | 伦理喷奶水xxxx | 在线中文一区 | 免费在线观看小视频 | 日本猛少妇色xxxxx猛叫小说 | 成人免费一区二区三区视频网站 | 丰满少妇熟女高潮流白浆 | 国产精品手机在线播放 | 新版天堂8中文在线最新版官网 | 日韩美女在线观看一区 | 91精品国模一区二区三区 | 国产高中女学生第一次 | 在线黄色大片 | 亚洲成熟丰满熟妇高潮xxxxx | 亚洲福利片 | 狠狠五月激情六月丁香 | 久久亚洲私人国产精品 | 国产亚洲精品成人aa片 | 日韩久久成人 | 一级bbbbbbbbb毛片| 亚洲一区日韩精品 | 主站蜘蛛池模板: 蛛词}| 欧美丝袜丝交video | 少妇天天爽视频在线看网站 | 福利视频一二三在线观看 | 欧美日韩国语 | wwwwww.国产 | 亚洲一区在线免费观看 | 91国偷自产一区二区开放时间 | 国产富婆一级全黄大片 | 少妇人妻偷人精品免费视频 | 中文字幕人成人乱码亚洲影视的特点 | 欧美一区二区三区国产 | 黑人强伦姧人妻日韩那庞大的 | 欧美自拍亚洲综合图区 | av中文在线天堂 | 精品福利视频一区二区 | 日本熟妇色xxxxx日本免费看 | 精品国产免费一区二区三区香蕉 | 日韩爆乳一区二区无码 | 97国产精品麻豆性色aⅴ人妻波 | 国产成人av三级在线观看 | 中文字幕22页 | 精品国产成人一区二区三区 | 无码av无码一区二区桃花岛 | 一级成人毛片 | 日韩三区视频 | 精品一区二区三区三区 | 精品人妻伦一二三区久久aaa片 | 日日操天天 | 精品av一区二区久久久 | 少妇饥渴偷公乱av在线观看涩爱 | 亚洲视频在线观看 | 欧美成人性色xxxxxx | 久爱www成人网免费视频 | av中文资源| 女女互揉吃奶揉到高潮视频 | 青青草原伊人网 | 夜色资源站www国产在线视频 | 永久天堂网av手机版 | 欧美亚洲另类综合 | 国产高清无av久久 | av中文在线播放 | 午夜激情婷婷 | 欧美成人a交片免费看 | 久久久久无码精品国产h动漫 | 国产夜夜草 | 国产精品日韩高清伦字幕搜索 | 欧美成人午夜在线视频 | 丁香色欲久久久久久综合网 | 挺进朋友人妻雪白的身体韩国电影 | 天堂а√在线资源在线 | 中文字幕在线观看视频地址二 | 日韩黄色一级大片 | 91久久国产露脸精品国产 | 国产人澡人澡澡澡人碰视频 | 蜜臀久久99精品久久久久久小说 | 亚洲无吗一区二区三区 | 天堂福利 | 密臀久久 | 美国十次成人欧美色导视频 | 主站蜘蛛池模板: 蛛词}| 黄色自拍网站 | 久草在线最新视频 | 色综合色综合色综合 | 国产高清精品福利私拍国产写真 | 国产精品黄色 | 日本一级特黄aa大片 | 黄色国产精品 | 50路60路老熟妇啪啪 | 超薄肉色丝袜一二三四区 | 国产精品久久久久一区二区 | 国产69精品久久久久app下载 | 老男人把我添得很舒服 | 日本精品视频在线观看 | 免费无码av污污污在线观看 | 国产无遮挡免费真人视频在线观看 | 欧美黄色免费视频 | 久久综合亚洲色hezyo社区 | 亚洲六月丁香六月婷婷 | 天堂网在线观看视频 | 久久九九精品99国产精品 | 国产精品爱啪在线线免费观看 | 麻花豆传媒剧国产免费mv入口 | 天天毛片 | 成人无码视频在线观看网址 | 波多野结衣一区二区三区中文字幕 | 日韩av中文| 午夜男女爽爽爽在线视频 | 国产精品丝袜综合区旗袍 | 哪里可以看黄色 | 免费视频福利 | 国产精品白浆无码流出 | 中文字幕无码乱码人妻系列蜜桃 | 曰批全过程免费视频观看软件潮喷 | 欧美国产视频一区 | 国产在线无码一区二区三区视频 | 在线一区 | 久久久久免费精品国产小说色大师 | 国产九九精品视频 | 免费女人高潮流视频在线 | 中文字幕精品视频 | 人妻少妇av无码一区二区 | 久碰人妻人妻人妻人妻人掠 | 日本道免费精品一区二区 | 99精品国产自在现线10页 | 日韩精品毛片无码一区到三区 | 午夜亚洲aⅴ无码高潮片苍井空 | 国产精品野外户外 | www.av麻豆 | 日韩卡1卡2卡三卡免费网站 | 久久久久久免费免费精品软件 | 亚洲熟妇无码av | 亚欧日韩欧美网站在线看 | 欧美孕妇乳喷奶水在线观看 | 日韩视频一区二区三区在线播放免费观看 | 精品国产乱码91久久久久久网站 | 国产成人久久久精品免费澳门 | 69精品久久久久久久 | 国产在线视频一区二区三区欧美图片 | 婷婷色亚洲|