《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > LPC21XX移植UCOS-II小結
LPC21XX移植UCOS-II小結
摘要: 文章標題:LPC21XX移植UCOS-II小結。中國IT實驗室嵌入式開發頻道提供最全面的嵌入式開發培訓及行業的信息、技術以及相關資料的下載.
Abstract:
Key words :

    1.在uC/OS-II的幫助手冊內,作者特地強調絕對不能在OSInit()或者OSStart()內

    調用Timer初始化程序,那會破壞系統的可移植性同時帶來性能上的損失。

    所以,一個折中的辦法就是:

    在優先級最高的程序內調用,這樣可以保證當OSStart()調用系統內部函數

    OSStartHighRdy()開始多任務后,首先執行的就是Timer初始化程序?;蛘?/p>

    專門開一個優先級最高的任務,只做一件事情,那就是執行 Timer初始化,

    之后通過調用OSTaskSuspend()將自己掛起來,永遠不再執行。不過這樣會

    浪費一個TCB空間。對于那些RAM吃緊的系統來說,還是不用為好。

    2.(三) 一些重要的uC/OS-II API介紹

    任何一個操作系統都會提供大量的API供程序員使用,uC/OS-II也不例外。由于uC/OS-II面向

    的是嵌入式開發,并不要求大而全,所以內核提供的API也就大多和多任務息息相關。

    主要的有以下幾類:

    1)任務類

    2)消息類

    3)同步類

    4)時間類

    5)臨界區與事件類

    我個人認為對于初級程序員而言,任務類和時間類是必須要首先掌握的兩種類型的API.

    下面我就來介紹比較重要的:

    1)OSTaskCreate函數

    這個函數應該至少再main函數內調用一次,在OSInit函數調用之后調用。作用就是創建

    一個任務。目前有四個參數,分別是任務的入口地址,任務的參數, 任務堆棧的首地址和

    任務的優先級。調用本函數后,系統會首先從TCB空閑列表內申請一個空的TCB指針,然后

    將會根據用戶給出參數初始化任務堆棧,并在內部的任務就緒表內標記該任務為就緒狀態。

    最后返回,這樣一個任務就創建成功了。

    2)OSTaskSuspend函數

    這個函數很簡單,一看名字就該明白它的作用,它可以將指定的任務掛起。如果掛起的是

    當前任務的話,那么還會引發系統執行任務切換先導函數OSShed來進行一次任務切換。

    這個函數只有一個參數,那就是指定任務的優先級。那為什么是優先級呢?事實上在系統

    內部,優先級除了表示一個任務執行的先后次序外,還起著分別每一個任務的作用,換句話

    說,優先級也就是任務的ID.所以uC/OS-II不允許出現相同優先級的任務。

    3)OSTaskResume函數

    這個函數和上面的函數正好相反,它用于將指定的已經掛起的函數恢復成就緒狀態。如果

    恢復任務的優先級高于當前任務,那么還為引發一次任務切換。其參數類似 OSTaskSuspend

    函數,為指定任務的優先級。需要特別說明是,本函數并不要求和OSTaskSuspend函數成對使

    用。

    4)OS_ENTER_CRITICAL宏

    很多人都以為它是個函數,其實不然,仔細分析一下OS_CPU.H文件,它和下面馬上要談到的

    OS_EXIT_CRITICAL都是宏。他們都是涉及特定 CPU的實現。一般都被替換為一條或者幾條

    嵌入式匯編代碼。由于系統希望向上層程序員隱藏內部實現,故而一般都宣稱執行此條指

    令后系統進入臨界區。其實, 它就是關個中斷而已。這樣,只要任務不主動放棄CPU使用權,

    別的任務就沒有占用CPU的機會了,相對這個任務而言,它就是獨占了。所以說進入臨界區了。

    這個宏能少用還是少用,因為它會破壞系統的一些服務,尤其是時間服務。并使系統對外界響

    應性能降低。

    5)OS_EXIT_CRITICAL宏

    這個是和上面介紹的宏配套使用另一個宏,它在系統手冊里的說明是退出臨界區。其實它就

    是重新開中斷。需要注意的是,它必須和上面的宏成對出現,否則會帶來意想不到的后果。

    最壞的情況下,系統會崩潰。我們推薦程序員們盡量少使用這兩個宏調用,因為他們的確會

    破壞系統的多任務性能。

 

 

    6)OSTimeDly函數

    這應該程序員們調用最多的一個函數了,這個函數完成功能很簡單,就是先掛起當起當前任務,

    然后進行任務切換,在指定的時間到來之后,將當前任務恢復為就緒狀態,但是并不一定運行,

    如果恢復后是優先級最高就緒任務的話,那么運行之。簡單點說,就是可以任務延時一定時間

    后再次執行它,或者說,暫時放棄CPU的使用權。一個任務可以不顯式的調用這些可以導致放棄CPU使用權的API,但那樣多任務性能會大大降低,因為此時僅僅依靠時鐘機制在進行任務切換。一個好的任務應該在完成一些操作主動放棄使用權,好東西要大家分享嘛!

    3.我們推薦程序員們盡量少使用OS_ENTER_CRITICAL宏和 OS_EXIT_CRITICAL宏兩個宏調用,

    因為他們的確會破壞系統的多任務性能。why??

    4.在以uC/OS為操作系統的項目中,系統可能要處理各種不同的中斷請求,如果某個中斷處理

    程序需要調用uC/OS的各種Post函數向任務發出消息,那么uC/OS建議中斷服務程序的寫法是:

    1、保存全部CPU寄存器

    2、調用OSIntEnter或OSIntNesting直接加1

    3、執行用戶代碼做中斷服務

    4、調用OSIntExit

    5、恢復所有CPU寄存器

    6、執行中斷返回指令

    暫且稱為“標準中斷”方式,這種方式實際上是將這個中斷處理加入了任務調度系統,也就是

    說這個中斷可以引起任務的切換。

    如果在中斷處理中沒有調用各種Post函數的話,則可以用一般的、象原來沒有操作系統時的

    寫法:

    1、保存中斷處理程序需要用到的CPU寄存器

    2、執行中斷處理

    3、恢復保存了的CPU寄存器

    4、執行中斷返回指令

    暫且稱為“快中斷”方式,按照這種方法定義的中斷永遠不會引起任務切換。

    在uC/OS系統中,每個任務都要定義獨立的??臻g,一個??臻g的使用包括5個部分:

    1、任務包括的各個函數的調用返回地址

    2、任務包括的各個函數中可能在棧上分配的局部變量

    3、發生了“標準中斷”方式定義的中斷或任務被掛起時,所要保存的任務上下文

    4、發生了“快中斷”方式定義的中斷時,中斷處理程序所需要的??臻g

    5、中斷嵌套時,所要保存的中斷嵌套上下文

    在這些使用的部分中,1,2,3,4的內存占用量是比較容易估算的,最精確和保險的確定

    方法是:查看由C生成的asm文件,并計算各個函數的棧使用量。但是第5部分的棧空間使用

    量是隨中斷嵌套的深度而不斷增加的,是不確定的,一般的方法只能定義一個充分大的棧

    空間,使之不會溢出。

    為每個任務都定義一個充分大的??臻g,這在某些內存稀缺的小項目中是非常痛苦的,

    有時不得不增擴內存,這就會使成本增加。

    我深入研究了uC/OS后,認為,可以將所有任務??臻g使用的第5部分合并,這樣將會大大的

    降低整個系統對內存的需求。

    uC/OS的任務調度是靠OS_Sched和 OSIntExit來完成的,這兩個函數中都要先判斷一個叫

    OSIntNesting的系統變量,如果OSIntNesting不為0,則不進行任務切換。也就是說:

    在OSIntNesting為1(當前只有一個中斷在處理中,并且沒有嵌套的中斷)時起,

    如果發生了嵌套的中斷(不管嵌套的層數有深),那么在所有嵌套的中斷一層一層地都返回

    直到 OSIntNesting再次為1時止,任務棧是不會切換的(棧指針都在一個任務的??臻g中變

    化)。

    據此,我們可以這樣改動:設置一個緩沖區OSInterruptStk,作為嵌套中斷的??臻g

    由所有任務共享,中斷服務程序改為:

    1、保存全部CPU寄存器

    2、調用OSIntEnter或OSIntNesting直接加1

    增加:2.1、判斷OSIntNesting是否等于1,如果不是則轉到3

    增加:2.2、將棧指針SP保存到OSTCBCur->OSTCBStkPtr

    增加:2.3、將SP指向OSInterruptStk的棧頂(注意棧增長的方向)。

    3、執行用戶代碼做中斷服務

    4、調用OSIntExit

    增加:4.1、判斷OSIntNesting是否等于0,如果不是則轉到5

    增加:4.2、從OSTCBCur->OSTCBStkPtr中恢復棧指針SP

    5、恢復所有CPU寄存器

    6、執行中斷返回指令

 

    并且要修改OSIntCtxSw函數,原始的OSIntCtxSw函數的寫法是:

    1、調整棧指針來去掉在調用:OSIntExit,OSIntCtxSw過程中入棧的多余內容

    2、將當前任務棧指針保存到OSTCBCur中(OSTCBCur->OSTCBStkPtr = __SP__)

    3、如果需要則調用OSTaskSwHook

    4、OSTCBCur = OSTCBHighRdy

    5、OSPrio = OSPrioHighRdy

    6、從OSTCBCur中恢復棧指針(__SP__ = OSTCBCur->OSTCBStkPtr)

    7、恢復保存了的CPU寄存器

    8、執行中斷返回指令

    新的寫法只需將原寫法中的1,2去掉即可,因為1,2步只是保存舊任務的棧指針,而新的寫

    法中,這些步被移到了“中斷服務程序”中的2.2.

    5.注意arm Image for uCOSII for lpc213x 模板中的TargetInit()

    對于很多使用ZLG arm Image for uCOSII for lpc213x 模板的初學者,常常會置疑使用該模板

    后自動生成的target.c文件,和在程序中調用的TargetInit()函數,我和 Zgpswh都是如此,這

    個問題當初困擾了很久:當用戶程序中不調用TargetInit()時,發現內核能運行,但是等待機制

    失靈,調用 TargetInit(),很多硬件中斷打不開,后來,在很多熱心人的指點下解決了,現重新

    總結如下:

    請仔細察看ZLG模板里的target.c文件,這里的TargetInit()如下:

    void TargetInit(void)

    {

    OS_ENTER_CRITICAL();

    srand((uint32)TargetInit);

    VICInit();

    Timer0Init();

    OS_EXIT_CRITICAL();

    }

    其中的Timer0Init();用于硬件定時器0的初始化,事實上,ZLG的移植代碼的μC/OS-Ⅱ的時鐘節拍是

    通過定時器0提供的,不在主程序里調用這個函數,μC/OS-Ⅱ的時鐘源就無法打開;但是,沒有開啟

    時鐘源的μC/OS-Ⅱ是同樣能運行的,只是內核提供的延時和等待時限機制都不起作用,系統雖能將

    就運行,但因沒調用TargetInit()而使內核功能不健全。

    請注意,TargetInit()中的另一個函數VICInit ()是用來中斷的初始化,它其中含有對UART0中斷的

    分配,在用戶程序里需要根據使用的硬件中斷修改這部分代碼,否則,這些硬件中斷無法開啟;

    再者,在不調用TargetInit()的時候,硬件的中斷初始化是在硬件初始化函數中完成,

    這也就是Zgpswh提到的現象:不調用TargetInit()內核運行異常,調用了卻開不了UART0的中斷。

    解決的方法如下:

    這在《arm嵌入式系統基礎教程》的430頁7.4.3節中論述的很清楚:

    ……關鍵在于把程序與芯片相關中斷源掛接,使芯片在產生相應的中斷后會調用相應的處理程序。

    這需要做兩方面事情:

    1. 增加匯編接口的支持。……

    2. 初始化向量中斷控制器。……

 

    按照一下方法完成中斷源的的掛接:

    1、增加匯編接口的支持。方法是修改IRQ.s文件,在末尾添加本句代碼:

    UART0_Handler HANDLER UART0_Exception

    追加定義了通用串口0 中斷句柄。

    2、初始化向量中斷控制器。將target.c文件中的VICInit()修改如下:

    void VICInit(void)

    { extern void IRQ_Handler(void);

    extern void Timer0_Handler(void);

    extern void UART0_Handler(void);

    VICIntEnClr = 0xffffffff;

    VICDefVectAddr =(uint32)IRQ_Handler;

    VICVectAddr0 =(uint32)Timer0_Handler;

    VICVectCntl0 =(0x20 | 0x04);

    VICIntEnable = 1<<4;

    VICVectAddr14 =(uint32)UART0_Handler;

    VICVectCntl14 =(0x20 | 0x06);

    VICIntEnable = 1<<6;

    }

    此為初始化向量中斷控制器。包括定時器0和串口0,特別要注意的是,一定不可以省略對定

    時器0的初始化

    中斷里,不可以調用延時

    請注意,中斷里面是不支持等待機制的。請用自己編的一個軟件延時,問題就可以解決了。

    中斷源掛接正確是沒問題的。

    6.問

    void TargetInit(void)

    {

    OS_ENTER_CRITICAL();

    srand((uint32)TargetInit);

    VICInit();

    Timer0Init();

    OS_EXIT_CRITICAL();

    }

    在此單獨用srand()函數有什么作用(用了有什么好處,不用又會怎樣),一般srand()用于

    給rand()設定種子(即srand給定rand運算式子的第一個值)。查了FAQ(P22)僅僅說明了

    seed的譯文。

    答2

    你說的沒有錯,他就是用來設置隨機數的種子。

    每次編譯一次,void TargetInit(void)函數在Ram或者Flash中的地址都不一樣

    (即種子也不一樣)。如果你在程序中不用隨機函數rand(),那么srand()

    在這里對你來說是沒有意義的,如果你要用rand(),那么每次編譯程序后你的rand()

    產生的隨機數就不一樣。當然,你也可以自己種種子咯。

    答3

    srand((uint32) TargetInit);是初始化uc/os-ii隨機數函數rand();也就是說給隨機數一個基值,以后調用相關隨機數函數時,隨機數就在此基值的基礎上改變。

    只要不調用rand()函數,就可以去掉這句。

    7.

    在arm上移植操作系統有一點需要注意:建立任務的任務,最好不要做復雜的工作。

    頻繁的訪問其他硬件或者做時序要求比較嚴的工作容易造成系統死機,希望大家多

    多注意。我的做法是:將建立任務的任務,閑置起來,但是不能進入死循環。方法

    是:利用一個空郵箱,讓任務無限期的等待,這樣可以實現與其他任務的切換。

    8.//定義與編譯器無關的數據類型

    typedef unsigned char BOOLEAN;//布爾變量

    typedef unsigned char INT8U;//無符號8位整型變量

    typedef signed char INT8S;//有符號8位整型變量

    typedef unsigned short INT16U;//無符號16位整型變量

    typedef signed short INT16S;//有符號16位整型變量

    typedef unsigned int INT32U;//無符號32位整型變量

    typedef signed int INT32S;//有符號32位整型變量

    typedef float FP32;//單精度浮點數(32位長度)

    typedef double FP64;//雙精度浮點數(64位長度)

    typedef INT32U OS_STK;//堆棧是32位寬度

    注:這里為什么用typedef,因為如果用#define,那么代碼中的每一個相應的類型都會被替代,

    很有可能會出現問題,畢竟他只是一個替代的關系,且編譯時間會增加,而用typedef則不會,

    它就相當于我們C++里面的引用,一樣的思維,在這里面就是說多了一個名稱。還有要注意的是

    我們怎么知道unsigned char 就是無符號8位整型變量,可以arm公司里面下載ADS_CompilerGuide_D.PDF

    文件,或者在你所裝的ADS1.2目錄里面有一個文件夾叫PDF,打開它就可

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          在线观看亚洲a| 在线精品视频在线观看高清| 欧美激情一二区| 欧美日韩国产综合网| 欧美顶级艳妇交换群宴| 欧美日韩精品一区二区| 亚洲日本黄色| 中日韩美女免费视频网址在线观看| 久久久久久有精品国产| 亚洲自拍16p| 亚洲性xxxx| 国产精品理论片| 国产精品一国产精品k频道56| 欧美成人资源网| 欧美理论电影网| 欧美日韩一区三区| 欧美日韩在线不卡| 激情成人综合网| 亚洲自拍啪啪| 久久久91精品国产| 国产伦精品一区二区三区视频黑人| 欧美人成在线视频| 亚洲欧洲综合另类| 一本久久知道综合久久| 欧美在线关看| 国产最新精品精品你懂的| 一区二区三区在线视频播放| 国内精品国语自产拍在线观看| 激情成人亚洲| 亚洲人成免费| 欧美精品偷拍| 国产精品日日摸夜夜添夜夜av| 欧美一区二区三区在线播放| 亚洲日本激情| 一区二区高清视频| 中文精品一区二区三区| 99riav久久精品riav| 国产精品欧美日韩一区| 国模一区二区三区| 亚洲片在线观看| 久久久.com| 欧美日本在线观看| 欧美日韩中字| 亚洲欧洲在线播放| 欧美成人综合在线| 久久人人看视频| 亚洲动漫精品| 欧美激情综合亚洲一二区| 欧美日韩一区二区三区在线看| 夜夜嗨一区二区| 麻豆国产精品777777在线| 日韩午夜在线电影| 亚洲免费人成在线视频观看| 美女黄毛**国产精品啪啪| 国产亚洲欧美一区二区三区| 亚洲一区久久久| 亚洲一区欧美二区| 亚洲日产国产精品| 欧美丰满少妇xxxbbb| 国产日韩欧美高清| 一区二区三区国产盗摄| 亚洲人成人一区二区在线观看| 免费成人黄色| 亚洲永久视频| 国内精品伊人久久久久av一坑| 久久久国产午夜精品| 亚洲二区在线视频| 激情综合中文娱乐网| 欧美视频四区| 欧美日韩一区不卡| 欧美淫片网站| 日韩视频在线一区二区| 久久不射电影网| 激情久久久久久| 欧美福利一区| 亚洲国产成人在线视频| 亚洲影视在线播放| 欧美视频免费在线观看| 亚洲欧美一区二区三区久久| 欧美一区二区三区啪啪| 欧美一级欧美一级在线播放| 欧美性猛片xxxx免费看久爱| 欧美三级电影一区| 久久免费的精品国产v∧| 欧美三级午夜理伦三级中视频| 欧美激情一级片一区二区| 在线看片第一页欧美| 久久久久久久一区二区三区| 在线视频日本亚洲性| 亚洲精品一区在线观看香蕉| 国产一区二区电影在线观看| 欧美激情一区二区三区高清视频| 久久激情视频| 精品av久久久久电影| 欧美另类一区二区三区| 欧美日韩一区三区| 久久国产88| 亚洲欧洲日本在线| 亚洲国产精品久久久久久女王| 欧美日韩久久久久久| 亚洲女同同性videoxma| 欧美三区美女| 久久免费黄色| 永久久久久久| 欧美成人乱码一区二区三区| 欧美欧美天天天天操| 亚洲综合电影一区二区三区| 国产欧美另类| 99国产精品久久久久老师| 亚洲人成在线免费观看| 欧美1区2区| 久久久不卡网国产精品一区| 亚洲先锋成人| 国内成人精品2018免费看| 在线欧美视频| 国产精品v欧美精品v日本精品动漫| 一区二区三区四区五区视频| 欧美日韩国语| 一本一本久久a久久精品牛牛影视| 一本一道久久综合狠狠老精东影业| 国产日本欧美一区二区三区在线| 国产欧美精品一区| 蜜桃av一区二区三区| 99re6热只有精品免费观看| 日韩一本二本av| 精东粉嫩av免费一区二区三区| 午夜欧美精品| 欧美一级片一区| 亚洲免费在线| 久久国产加勒比精品无码| 欧美激情综合五月色丁香| 欧美精品在线播放| 美女网站在线免费欧美精品| 在线高清一区| 久久精品国产精品亚洲综合| 国产精品国产亚洲精品看不卡15| 一区二区91| 精品电影在线观看| 欧美日韩综合视频网址| 国产亚洲午夜高清国产拍精品| 亚洲黄一区二区| 欧美电影免费网站| 伊人影院久久| 欧美在线国产精品| 久久精品二区| 亚洲毛片av| 欧美一区二区三区视频免费| 美女网站久久| 欧美在线你懂的| 免费观看30秒视频久久| 国产精品日本| 日韩手机在线导航| 亚洲一区二区综合| 亚洲欧美国产日韩中文字幕| 蜜桃精品一区二区三区| 国产精品露脸自拍| 久久精品男女| 免费在线观看日韩欧美| 亚洲在线视频观看| 久久免费视频一区| 亚洲精品一二三区| 99精品热视频只有精品10| 欧美在线视频免费| 激情综合电影网| 美日韩精品免费| 欧美不卡福利| 国内成+人亚洲+欧美+综合在线| 久久国产精品色婷婷| 国产欧美精品在线| 久久久久久久高潮| 久久久中精品2020中文| 亚洲国产视频一区| 国产私拍一区| 欧美日本国产在线| 中文在线资源观看网站视频免费不卡| 国产综合精品| 国产精品亚洲一区二区三区在线| 欧美日韩国产首页在线观看| 国产精品综合不卡av| 欧美精品一区二区高清在线观看| 亚洲一区网站| 91久久夜色精品国产网站| 国产精品区二区三区日本| 麻豆精品视频在线| 99国产精品自拍| 欧美少妇一区二区| 欧美高清视频在线观看| 伊大人香蕉综合8在线视| 国产精品爱久久久久久久| 国产精品成人在线| 亚洲国产欧洲综合997久久| 欧美在线观看一区二区三区| 国产精品久久99| 女人天堂亚洲aⅴ在线观看| 午夜精品美女自拍福到在线| 一区在线观看视频| 久久精品人人做人人爽| 欧美福利电影在线观看| 在线日韩av片| 亚洲美女黄色片| 日韩一级裸体免费视频| 亚洲欧美日韩成人| 久久精品视频导航| 久久一本综合频道| 亚洲欧美日韩高清| 国产欧美日本一区二区三区| 国产综合精品一区| 亚洲在线视频免费观看| 亚洲国产成人精品女人久久久| 国产精品免费aⅴ片在线观看| 亚洲欧洲日产国码二区| 久久一日本道色综合久久| 久久精品视频在线播放| 久久久爽爽爽美女图片| 亚洲欧洲精品一区二区精品久久久| 99国内精品久久久久久久软件| 欧美精品97| 亚洲一区三区视频在线观看| 欧美视频在线看| 国产美女精品在线| 91久久中文字幕| 国产啪精品视频| 久久精品视频在线看| 国产精品无码永久免费888| 9i看片成人免费高清| 欧美激情第六页| 久久这里只有| 欧美三级午夜理伦三级中文幕| 国产精品美女在线| 亚洲毛片一区二区| 亚洲人成绝费网站色www| 狠久久av成人天堂| 亚洲精品一二三| 国产欧美日韩视频在线观看| 久久手机免费观看| 欧美人与性动交a欧美精品| 亚洲欧美综合网| 欧美大片在线看| 欧美乱人伦中文字幕在线| 午夜精品视频一区| 国产性猛交xxxx免费看久久| 久久免费偷拍视频| 久久久久女教师免费一区| 亚洲免费观看在线观看| 欧美精品v国产精品v日韩精品| 一色屋精品视频在线观看网站| 欧美视频在线观看一区| 欧美久久久久久| 欧美日韩精品免费观看视频| 亚洲国产精品久久| 亚洲制服av| 亚洲国产精品一区| 亚洲综合精品| 欧美日韩的一区二区| 亚洲精品综合| 欧美日韩免费在线视频| 久久男人av资源网站| 欧美在线1区| 国产精品视频网址| 国产精品theporn88| 国产精品成人一区二区网站软件| 久久夜色精品国产欧美乱极品| 在线视频欧美日韩| 亚洲精品欧美极品| 裸体素人女欧美日韩| 欧美午夜剧场| 一本色道久久综合亚洲91| 在线观看欧美日本| 国产精品v欧美精品v日韩| 欧美精品一区在线| 亚洲一区免费在线观看| 尤物九九久久国产精品的特点| 国产免费成人| 欧美一级在线亚洲天堂| 亚洲国产专区校园欧美| 欧美视频日韩视频| 欧美色区777第一页| 国色天香一区二区| 亚洲毛片在线观看| 欧美调教视频| 欧美寡妇偷汉性猛交| 欧美成人综合在线| 欧美成人日韩| 欧美日韩精品二区第二页| 久久se精品一区精品二区| 国产一区二区三区免费观看| 黑丝一区二区三区| 欧美黄色影院| 国产麻豆成人精品| 久久精品一区二区三区不卡| 亚洲激情亚洲| 欧美激情一二三区| 国产亚洲精品激情久久| 久久精品亚洲国产奇米99| 久久久99爱| 国产精品网站在线观看| 欧美一区二区精品在线| 国产精品美女久久久免费| 国产精品美女主播| 一区二区三区视频在线观看| 国产精品国产精品国产专区不蜜| 亚洲影视在线| 免费成人高清在线视频| 亚洲激情第一页| 午夜精品一区二区三区在线播放| 欧美精品1区| 先锋影音一区二区三区| 欧美好骚综合网| 久久深夜福利免费观看| 国内精品久久久久久久果冻传媒| 一本一道久久综合狠狠老精东影业| 国产精品丝袜白浆摸在线| 欧美性猛片xxxx免费看久爱| 欧美日本国产| 国产精品萝li| 在线亚洲一区观看| 欧美 日韩 国产一区二区在线视频| 久久午夜影视| 国产精品国产一区二区| 欧美伊人影院| 国内久久婷婷综合| 一区二区电影免费在线观看| 日韩视频在线你懂得| 韩国视频理论视频久久| 99精品欧美一区二区蜜桃免费| 久久综合狠狠综合久久综青草| 每日更新成人在线视频| 亚洲人成网站影音先锋播放|