亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? uc-os-ii任務棧處理的一種改進方法--電子門.htm

?? ucos的資料以及單片機dsp的經典移植程序
?? HTM
?? 第 1 頁 / 共 3 頁
字號:
        <TR>
          <TD><IMG height=53 alt="" 
            src="uC-OS-II任務棧處理的一種改進方法--電子門.files/index_05.jpg" 
        width=752></TD></TR></TBODY></TABLE>
      <TABLE class=content3 cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD width="3%">&nbsp;</TD>
          <TD vAlign=top>
            <DIV id=topMenu>
            <DIV id=subject_l>MCU博客數據載入中, 請稍候...</DIV>
            <SCRIPT type=text/javascript><!--
google_ad_client = "pub-0269824239044964";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//-->
</SCRIPT>

            <SCRIPT src="uC-OS-II任務棧處理的一種改進方法--電子門.files/show_ads.js" 
            type=text/javascript>
</SCRIPT>
            </DIV></TD>
          <TD width="3%">&nbsp;</TD></TR></TBODY>
        <SCRIPT type=text/javascript><!--
google_ad_client = "pub-0269824239044964";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//-->
</SCRIPT>

        <SCRIPT src="uC-OS-II任務棧處理的一種改進方法--電子門.files/show_ads.js" 
        type=text/javascript>
</SCRIPT>
      </TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD vAlign=top width=509>
            <DIV id=content>
            <TABLE height=13 cellSpacing=0 cellPadding=0 width=490 align=center 
            border=0>
              <TBODY>
              <TR>
                <TD>
                  <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
                    <TBODY>
                    <TR>
                      <TD>
                        <TABLE class=seyle4 cellSpacing=0 cellPadding=0 
                        width="100%" border=0>
                          <TBODY>
                          <TR>
                            <TD>&nbsp;</TD></TR>
                          <TR>
                            <TD class=content9 vAlign=center 
                              bgColor=#bbccde><STRONG>uC/OS-II任務棧處理的一種改進方法</STRONG></TD></TR>
                          <TR>
                            <TD>
                              <DIV align=right><SPAN class=textbox-label>[ 
                              2006-4-25 16:40:11 | By: <SPAN 
                              class=style3>電子門</SPAN> 
                          ]</SPAN></DIV></TD></TR></TBODY></TABLE>
                        <TABLE cellSpacing=0 cellPadding=0 width="100%" 
border=0>
                          <TBODY>
                          <TR>
                            <TD height=3>&nbsp;</TD></TR></TBODY></TABLE>
                        <TABLE style="TABLE-LAYOUT: fixed" cellSpacing=0 
                        cellPadding=0 width="100%" align=center border=0>
                          <TBODY>
                          <TR>
                            <TD><SPAN class=oblog_text><SPAN 
                              id=ob_logd10724></SPAN><FONT 
                              face=宋體><B>摘要:</B></FONT><SPAN 
                              class=p4>在uC/OS-II內核中,各個不同的任務使用獨立的堆棧空間,堆棧的大小按每個任務所需要的最大堆棧深度來定義,這種方法可能會造成堆棧空間浪費。本文敘述如何在RTOS中多個任務共用連續存儲空間作為任務棧的方法,并詳細比較二者的優缺點和適用性。</SPAN> 

                              <P class=MsoNormal><SPAN class=p4 
                              style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp; 
                              <B>關鍵詞:</B></SPAN><SPAN class=p4>uC/OS-II 任務堆棧 
                              RTOS 共用空間堆棧</SPAN></P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">關于uC/OS-II這個實時內核及其應用已經有很多文章介紹了,對于學習RTOS的人來說,這個系統是很好的學習起點。雖然文獻[1]的源代碼沒有行號和函數名交叉索引表等,給源代碼閱讀造成一些困難(可使用BC31的grep查找功能,提高閱讀效率),好在代碼不是很長,前面又有詳細的中文說明,對于有一定X86匯編和C語言基礎的人來說,仍然可以在不長的時間內掌握。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">uC/OS-II內核是一個搶先式內核,可以進行任務間切換,也可以讓一個任務在得不到某個資源時休眠一定時間后再繼續運行;提供了用于共享資源管理的信號燈,用于進程通信的消息隊列和郵箱,甚至提供了存儲器管理機制,一個比較全面的系統。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">uC/OS-II內核有些地方仍然值得改進,比如該系統不支持時間片調度。如果有一個任務中一段死循環代碼(或者條件循環代碼),代碼就會永遠(或長時間)在此處執行,調度程序無法控制,其它任務也就是不到及時執行。這種搶先式實際上和非搶先式系統存在著同樣問題。當然,如果這種代碼不一個BUG,問題是可以解決的,在不提供時間片調度的搶先式系統中,一般采取信號燈,或者任務主動休眠的方法(對于uC/OS-II,很容易改造成支持時間片調度,只要在定時中斷服務程序調用OSIntCtxSw()函數即可);非搶先式系統一般采取有限狀態機方法,不使用這種耗時很長的循環代碼。不過,無論如何,對RTOS的使用者來說,這畢竟會使得任務函數的編碼不能隨心所欲。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">uC/OS-II內核的另外一個值得改進的地方就是其任務棧管理方法。在uC/OS-II內核中,各個不同的任務使用獨立的堆棧空間,堆棧的大小按每個任務所需要的最大堆棧深度來定義,這種方法可能會造成堆棧空間的浪費。下面討論如何在RTOS中多個任務共用一段連續存儲空間作為傻堆棧。<B><BR><IMG 
                              onmousewheel="return bbimg(this)" 
                              style="CURSOR: pointer" 
                              onclick=javascript:window.open(this.src); 
                              src="uC-OS-II任務棧處理的一種改進方法--電子門.files/5a.gif" 
                              onload=rsimg(this,300)><BR>1 任務切換要保存的數據</B></P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">簡單地說,一個任務可看作一個運行中的C函數。對于搶先式RTOS來說,在任務切換時,應保存當前任務的各種現場數據。現場數據包括局部變量、各個CPU寄存器、堆棧指針和程序被中止的任務指針。CPU寄存器是任何任務代碼均會用到的;而局部變量,一般的編譯器是將其它安排在堆棧空間中,堆棧指針也是各任務公用的,所以也需要保存。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">對于全局變量,由于一般是在內存中的固定位置,各任務所占用的空間完全獨立,所以不需要保存。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">在X86環境中,要保存的CPU寄存器共14個16位寄存器;通用寄存器8個(AX、BX、CX、DX、SP、BP、SI、BI)、段寄存器4個(CS、DS、ES、SS)以及指令指針IP和標志寄存器FR各1個。</P>
                              <P class=p4 style="TEXT-INDENT: 0px"><B>2 
                              C編譯器中變量在堆棧中的位置</B></P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">對于一個存在函數調用嵌套的C程序來說,大部分編譯器將傳遞的參數和函數本身的局部變量放在了堆棧中,編譯器會自動生成壓棧(push)和彈棧(pop)代碼,以保存上級函數的運行寄存器。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">假設函數main()調用funl(),而funl()調用fun2(),則在執行fun2()中的代碼時,堆棧映像如圖1所示(X86 
                              CPU的情況)。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">對于RTOS軟件,堆棧中的各種數據就是一個任務的作現場。一般CPU的堆棧指針SP只有一個,在進行任務切換時,必須將掛起任務所使用的堆棧內容保存起來,以便使該任務在下次喚醒時能從原地繼續運行。</P>
                              <P class=p4 style="TEXT-INDENT: 0px"><B>3 
                              uC/OS-II對任務棧的處理方法與缺陷</B></P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">uC/OS-II為了保存任務堆棧中的數據,對每個任務定義一個數組變量作為堆棧,在任務切換時,將CPU堆棧指針SP指向該數組中的某個元素,即棧頂,如圖2所示。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">比如,在其ex21.c文件中定義的任務堆棧語句為:</P>
                              <P class=p4 style="TEXT-INDENT: 30px">OS_STK 
                              TaskStartStk[TASK_STK_SIZE]; /*啟動任務堆棧*/</P>
                              <P class=p4 style="TEXT-INDENT: 30px">OS_STK 
                              TaskClkStk[TASK_STK_SIZE]; /*時鐘任務堆棧*/</P>
                              <P class=p4 style="TEXT-INDENT: 30px">OS_STK 
                              TasklStk[TASK_STK_SIZE]; /*任務1#,任務堆棧*/</P>
                              <P class=p4 style="TEXT-INDENT: 30px">……</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">以上各任務堆棧數組變量在初始化函數OSTCBInit()中被會給了任務控制塊OS_TCB的OSTCBStkPtr變量。在任務切換時,uC/OS-II調用OSCtxSw匯編過程(OS_CPU_A.ASM文件),將CPU的SP指針指向該變量,從而使每個任務使用獨立的任務堆棧。</P>
                              <P class=p4 style="TEXT-INDENT: 30px">LES BX,DWORD 
                              PTR DS:_OSTCBCur</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">;保存掛起任務的堆棧指針SP</P>
                              <P class=p4 style="TEXT-INDENT: 30px">MOV 
                              ES:[BX+2],SS</P>
                              <P class=p4 style="TEXT-INDENT: 30px">MOV 
                              ES:[BX+0],SP</P>
                              <P class=p4 style="TEXT-INDENT: 30px">……</P>
                              <P class=p4 style="TEXT-INDENT: 30px">LESB X,DWORD 
                              PTR DS:_OSTCBHighRdy ;切換SP到要運行任務的堆棧空間</P>
                              <P class=p4 style="TEXT-INDENT: 30px">MOV 
                              SS,ES:[BX+2]</P>
                              <P class=p4 style="TEXT-INDENT: 30px">MOV 
                              SP,ES:[BX]</P>
                              <P class=p4 style="TEXT-INDENT: 30px">……<BR><IMG 
                              onmousewheel="return bbimg(this)" 
                              style="CURSOR: pointer" 
                              onclick=javascript:window.open(this.src); 
                              src="uC-OS-II任務棧處理的一種改進方法--電子門.files/5b.gif" 
                              onload=rsimg(this,300)><BR>&nbsp;&nbsp;&nbsp; 
                              在代碼中,變量OSTCBHighRdy(OSTCBCur)和堆棧指針變量OSTCBStkPtr的數值是同同的,因為OSTCBStkPtr是結構OSTCBHighRdy的第一個變量。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">這種任務棧處理方法的缺點是可能造成空間的浪費。因為一個任務如果堆棧滿了,該任務也就無法運行,即使其它任務的堆棧還有空間可用。當然,這種方法的好處是任務棧切換的時間非常短,只需要幾條指令。</P>
                              <P class=p4 style="TEXT-INDENT: 0px"><B>4 
                              共用空間的堆棧處理方法</B></P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">(1)棧共用連續存儲空間</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">如果多個任務使用同一段連續空間作為堆棧,這樣各個堆棧之間就可以互補使用。在前面說過,共用空間的問題在于一個任務運行時不能破壞其它任務的堆棧數據。為簡單起見,先看圖3所示兩個任務的情況。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">假定任務1首次運行時任務棧為空。運行一段時間后任務2運行,堆棧空間繼續往上生長。這次任務切換不需要修改CPU的SP數值,但需要記下任務1的棧頂位置SP1(圖3中)。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">在任務2運行一段時間后,RTOS又切換到任務1運行。在切換時,不能簡單地將SP指針修改回SP1的數值,因為這樣堆棧向上生長時會破壞任務2堆棧中的數據。辦法是將原來任1務堆棧保存的數據移動到靠棧頂的位置,而將任務2堆棧數據下移到靠棧底的位置,堆棧指針SP實際上不需要修改(圖3右)。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">考慮到更為一般的情況,有N個任務,當前運行的任務為k,下一個運行的任務為j,在共用任務堆棧時必須做的工作有:</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">*為每個任務定義棧頂和棧底2個堆棧指針;</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">*在任務切換時,將待運行任務j的堆棧內容移動到靠棧頂位置,同時將其堆棧上方的任務堆棧下移,修改被移動推棧的任務堆棧指針。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">假設我們定義的任務棧空間和任務的棧指針變量為:</P>
                              <P class=p4 style="TEXT-INDENT: 30px">void 
                              TaskSTK[MAX_STK_LEN];/*任務堆棧空間*/</P>
                              <P class=p4 style="TEXT-INDENT: 30px">typedef 
                              struct TaskSTKPoint{</P>
                              <P class=p4 style="TEXT-INDENT: 30px">int 
                              TaskID;</P>
                              <P class=p4 style="TEXT-INDENT: 30px">int 
                              pTopSTK;</P>
                              <P class=p4 style="TEXT-INDENT: 30px">int 
                              pBottomSTK;</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">}TASK_STK_POINT;</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">TASK_STK_POINT 
                              pTaskSTK[MAX_TASK_NUM]; /*存放每個任務的棧頂和棧底指針*/</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">任務棧指針數組pTaskSTK的元素個數同任務個數。為了堆棧交換,需要另外一塊臨時存儲空間,其大小可按單個任務棧最大長度定義,用于中轉堆棧交換的內容。堆棧內容交換的偽C算法可寫為:</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">StkEechange(int 
                              CurTaskID,int RunTaskID)</P>
                              <P class=p4 style="TEXT-INDENT: 30px">{ 
                              /*2個參數為當前運行任務號和下一運行任務號*/</P>
                              <P class=p4 style="TEXT-INDENT: 30px">void 
                              TempSTK[MAX_PER_STK_LEN]; 
/*注意該變量長度可小于TaskSTK*/</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">L=任務RunTaskTD的堆棧長度;</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">①將TaskSTK頂部的L字節移動到TempSTK中;</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">②將RunTaskID任務的堆棧內容移動到TaskSTK頂部;</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">③將RunTaskID堆棧上方(移動前位置)所有內容下移L個字節;</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">④修改RunTask堆棧上方(移動前位置)所有任務棧頂和棧底指針(pTaskSTK變量);</P>
                              <P class=p4 style="TEXT-INDENT: 30px">};<IMG 
                              onmousewheel="return bbimg(this)" 
                              style="CURSOR: pointer" 
                              onclick=javascript:window.open(this.src); 
                              src="uC-OS-II任務棧處理的一種改進方法--電子門.files/5c.gif" 
                              onload=rsimg(this,300)></P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">該算法的平均時間復雜度可計算如下:</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">O(T)=SL/2+SL/2+SL×N/2</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">式中,第一、二項為步驟①和步驟②時間,第三項為步驟③時間;SL表示每個任堆棧的最大長度(即MAX_PER_STK_LEN),N表示任務數。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">取SL為64字節,任務數為16個,則數據項平均移動次數為576。假設每次移動指令時間為2μs,則一次任務棧移動時間長達約1ms。所以在使用該方法時,為了執行時間盡量短,編碼時應仔細推敲。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">從空間上說,共用任務棧比獨立任務棧優越。假設獨立任務棧方法中每個堆棧空間為K,任務數為N,則獨立任務棧方式的堆棧總空間為N×K。在共用任務棧時,考慮各任務互補的情況,TaskSTK變量不需要定義為N×K長度,可能定義為二分之一或者更小就可以了。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">另外,這種方法不需要在任務切換時修改CPU的SP指針。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">(2)工作棧和任務堆棧</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">上節共用任務棧算法的缺點是:任務切換時的堆棧內容交換算法復雜,占用時間長。另外一個折中的方法是設計一個工作堆棧,用于給當前運行的任務使用;在任務切換時,將工作棧內容換出得另外的存儲空間,該空間可以動態申請,其大小按實際需要即可。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">這種方法看起來和獨立任務棧的方法類似,需要N+1塊存儲空間,其中一塊用于工作棧空間。和獨立任務堆棧相比,其區別有2點:</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">①SP指針所指向的空間始終是同一塊存儲空間,即工作棧;</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">②每個任務棧的大小不需要按最大空間定義,可以動態按實際大小從內存中分配空間。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">對于8031這種處理器結構,由于堆棧指針只能指向其內部存儲器,大小十分有限。采取這種方法,可將工作棧設在內部RAM,將任務棧設在外部RAM,擴展了堆棧空間。</P>
                              <P class=p4 
                              style="TEXT-INDENT: 30px">和上一種共用堆棧方法相比,這種方法的交換時間要短,其時間復雜度約為1.5倍最大任務棧長度。</P>
                              <P class=p4 style="TEXT-INDENT: 0px"><B>5 
                              總結</B></P>
                              <P class=p4 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本大道av伊人久久综合| 国产欧美日韩不卡| 国产欧美一区二区三区网站| 亚洲成a天堂v人片| 国产suv一区二区三区88区| 91麻豆精品91久久久久久清纯| 国产婷婷一区二区| 蜜臀av性久久久久蜜臀av麻豆| 91麻豆视频网站| 国产亚洲va综合人人澡精品| 日韩av午夜在线观看| 在线一区二区三区| 中文字幕不卡在线| 国产一区二区三区免费在线观看| 欧美日韩国产综合一区二区三区| 国产精品伦一区| 精品在线观看免费| 欧美久久久久中文字幕| 亚洲精品综合在线| 成人av片在线观看| 久久麻豆一区二区| 国产在线精品不卡| 欧美va日韩va| 久久激五月天综合精品| 91精品国产综合久久久久久 | 性久久久久久久| 成人精品电影在线观看| 精品国产露脸精彩对白| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美日韩国产乱码电影| 午夜激情久久久| 在线精品视频一区二区三四| 亚洲精品欧美综合四区| 色欧美片视频在线观看在线视频| 亚洲欧洲日本在线| 9i看片成人免费高清| 日韩理论片一区二区| 91老师国产黑色丝袜在线| 亚洲丝袜美腿综合| 色噜噜偷拍精品综合在线| 亚洲精品久久久蜜桃| 精品视频资源站| 日本强好片久久久久久aaa| 日韩精品中文字幕一区二区三区| 国产一区二区在线观看视频| 久久精品免视看| 成人午夜在线免费| 自拍偷在线精品自拍偷无码专区 | 综合久久久久久| 色久综合一二码| 婷婷久久综合九色综合绿巨人| 91精品国产麻豆国产自产在线 | 欧美成人在线直播| 激情图片小说一区| 国产精品理论在线观看| 91福利视频久久久久| 天天做天天摸天天爽国产一区| 欧美日本在线播放| 极品美女销魂一区二区三区 | 精品国产三级a在线观看| 国产精品自拍一区| 亚洲色图视频网| 欧美精品高清视频| 国产成人高清在线| 午夜久久久久久| 国产欧美日韩视频在线观看| 欧美性做爰猛烈叫床潮| 麻豆91精品视频| 国产精品三级久久久久三级| 欧美视频在线播放| 国产一区二区免费在线| 亚洲欧洲中文日韩久久av乱码| 91精品婷婷国产综合久久竹菊| 国产91高潮流白浆在线麻豆 | 日韩美女一区二区三区四区| 99久久综合精品| 蜜乳av一区二区| 亚洲免费观看高清完整版在线观看 | 日韩欧美的一区| 99久久精品国产精品久久| 日本大胆欧美人术艺术动态| 国产精品不卡一区| 日韩欧美一区中文| 日本韩国欧美三级| 国产一区二区三区| 日韩精品电影在线| 国产精品嫩草99a| 日韩精品最新网址| 欧美精品丝袜中出| 色欧美片视频在线观看在线视频| 国产精品白丝av| 美女在线观看视频一区二区| 艳妇臀荡乳欲伦亚洲一区| 国产精品二三区| 久久久久久久精| 欧美电影免费观看高清完整版在| 欧美中文字幕亚洲一区二区va在线| 国产精品69久久久久水密桃| 久热成人在线视频| 午夜精品久久久| 亚洲欧美视频在线观看视频| 国产精品久久久久影院老司| 久久婷婷国产综合国色天香| 欧美一区二区三区视频免费播放| 色婷婷狠狠综合| aa级大片欧美| 国产98色在线|日韩| 国产成人综合亚洲网站| 极品美女销魂一区二区三区免费 | 亚洲小少妇裸体bbw| 最新国产の精品合集bt伙计| 国产色婷婷亚洲99精品小说| 久久亚洲精品小早川怜子| 91麻豆精品91久久久久久清纯| 欧美午夜在线一二页| 欧美体内she精高潮| 欧日韩精品视频| 欧美色精品在线视频| 欧日韩精品视频| 欧美精品日韩综合在线| 91精品福利在线一区二区三区| 欧美理论电影在线| 欧美一区二区三区喷汁尤物| 欧美一区二区三区在线观看视频| 日韩欧美一二三区| 精品福利一区二区三区| 国产女人aaa级久久久级| 国产日产欧美一区二区视频| 国产精品久久毛片av大全日韩| 亚洲欧美综合另类在线卡通| 亚洲免费av观看| 日精品一区二区| 久久99久久99精品免视看婷婷| 国产成人免费在线视频| 91在线丨porny丨国产| 欧美日韩精品一区二区三区 | 国精产品一区一区三区mba视频| 国内精品在线播放| 国产69精品一区二区亚洲孕妇| 97se亚洲国产综合自在线不卡| 91性感美女视频| 欧美高清视频不卡网| 日韩免费看网站| 国产精品国产精品国产专区不蜜 | 欧美日韩国产首页在线观看| 日韩一区二区三区免费观看| 国产日韩av一区| 亚洲图片一区二区| 国产美女一区二区| 色婷婷狠狠综合| 精品国产露脸精彩对白 | 欧美日韩精品综合在线| 久久青草国产手机看片福利盒子 | 国产日韩欧美亚洲| 亚洲曰韩产成在线| 国产一区二区三区蝌蚪| 欧美性猛交xxxxxx富婆| www激情久久| 亚洲成av人片www| 成人黄色在线看| 日韩一区二区三| 专区另类欧美日韩| 韩国精品久久久| 欧美巨大另类极品videosbest| 国产精品午夜春色av| 久久国内精品视频| 欧美综合亚洲图片综合区| 欧美国产日韩亚洲一区| 秋霞成人午夜伦在线观看| 91美女在线观看| 久久久av毛片精品| 日韩国产在线观看一区| 一本色道久久综合亚洲aⅴ蜜桃| 日韩你懂的在线播放| 亚洲综合网站在线观看| 成人激情免费电影网址| 日韩一级高清毛片| 亚洲一区二区三区三| 成人一区二区三区视频| 精品国产凹凸成av人导航| 亚洲成人综合在线| 91在线porny国产在线看| 欧美激情艳妇裸体舞| 国产一区二区三区四区五区入口| 678五月天丁香亚洲综合网| 亚洲久草在线视频| 99精品欧美一区| 国产精品电影院| 高清不卡一区二区| 久久品道一品道久久精品| 国内一区二区在线| 欧美成人欧美edvon| 久久国产综合精品| 欧美成人一区二区三区在线观看 | 国产精品77777竹菊影视小说| 精品免费国产一区二区三区四区| 五月激情六月综合| 欧美人动与zoxxxx乱| 香蕉成人啪国产精品视频综合网| 欧美日韩黄色影视|