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

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

?? ucos電子技術,網友心得文章瀏覽.htm

?? 該程序是了解51,想深入了解嵌入式系統的很好的實例!本程序對us/os ii實現了成功的移植
?? HTM
?? 第 1 頁 / 共 5 頁
字號:
          <TD vAlign=top width=593 background=UCOS電子技術,網友心得文章瀏覽.files/c-tbg.gif 
          height=23>
            <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0><!--DWLayoutTable-->
              <TBODY>
              <TR>
                <TD vAlign=top width=40 height=24><IMG height=23 
                  src="UCOS電子技術,網友心得文章瀏覽.files/c-t.gif" width=40></TD>
                <TD vAlign=center width=448><FONT color=#003366><A 
                  class=style4 href="http://www.eleku.com/index.asp">首頁</A>-<A 
                  class=style4 
                  href="http://www.eleku.com/article/article.asp">電子技術</A>-<A 
                  class=style4 
                  href="http://www.eleku.com/article/article.asp?type=24">單片機技術</A>-在51系列單片機上移植uCOS-II</FONT></TD>
                <TD vAlign=center width=105><A class=style4 
                  href="http://www.eleku.com/article/upload.asp">發表文章</A> <A 
                  class=style4 
              href="javascript:history.back();">返回上頁</A></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD 
          style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px" 
          vAlign=top height=658>
            <TABLE cellSpacing=0 cellPadding=0 width="100%" align=center 
            border=0><!--DWLayoutTable-->
              <TBODY>
              <TR>
                <TD vAlign=top colSpan=2 height=160><BR>
                  <H2 align=center>在51系列單片機上移植uCOS-II</H2>
                  <P align=center><FONT 
                  color=#999999>作者:巨龍公司交換系統事業部技術組 發布:2005-11-28 人氣:34</FONT></P>
                  <P>內容摘要:本文詳細系統地介紹了uC/OS-II在51單片機上的移植、重入實現方法、硬件仿真、固化、人機界面等關鍵內容。<BR>關鍵詞:嵌入式實時多任務操作系統、uC/OS-II、C51<BR>引言:隨著各種應用電子系統的復雜化和系統實時性需求的提高,并伴隨應用軟件朝著系統化方向發展的加速,在16位/32位單片機中廣泛使用了嵌入式實時操作系統。然而實際使用中卻存在著大量8位單片機,從經濟性考慮,對某些應用場合,在8位MCU上使用操作系統是可行的。從學習操作系統角度,uC/OS-II 
                  for 
                  51即簡單又全面,學習成本低廉,值得推廣。<BR>結語:μC/OS-II具有免費、簡單、可靠性高、實時性好等優點,但也有缺乏便利開發環境等缺點,尤其不像商用嵌入式系統那樣得到廣泛使用和持續的研究更新。但開放性又使得開發人員可以自行裁減和添加所需的功能,在許多應用領域發揮著獨特的作用。當然,是否在單片機系統中嵌入μC/OS-II應視所開發的項目而定,對于一些簡單的、低成本的項目來說,就沒必要使用嵌入式操作系統了。 

                  <P></P>
                  <P>uC/OS-II原理:<BR>uCOSII包括任務調度、時間管理、內存管理、資源管理(信號量、郵箱、消息隊列)四大部分,沒有文件系統、網絡接口、輸入輸出界面。它的移植只與4個文件相關:匯編文件(OS_CPU_A.ASM)、處理器相關C文件(OS_CPU.H、OS_CPU_C.C)和配置文件(OS_CFG.H)。有64個優先級,系統占用8個,用戶可創建56個任務,不支持時間片輪轉。它的基本思路就是 
                  “近似地每時每刻總是讓優先級最高的就緒任務處于運行狀態” 
                  。為了保證這一點,它在調用系統API函數、中斷結束、定時中斷結束時總是執行調度算法。原作者通過事先計算好數據,簡化了運算量,通過精心設計就緒表結構,使得延時可預知。任務的切換是通過模擬一次中斷實現的。<BR>uCOSII工作核心原理是:近似地讓最高優先級的就緒任務處于運行狀態。<BR>操作系統將在下面情況中進行任務調度:調用API函數(用戶主動調用),中斷(系統占用的時間片中斷OsTimeTick(),用戶使用的中斷)。<BR>調度算法書上講得很清楚,我主要講一下整體思路。<BR>(1)在調用API函數時,有可能引起阻塞,如果系統API函數察覺到運行條件不滿足,需要切換就調用OSSched()調度函數,這個過程是系統自動完成的,用戶沒有參與。OSSched()判斷是否切換,如果需要切換,則此函數調用OS_TASK_SW()。這個函數模擬一次中斷(在51里沒有軟中斷,我用子程序調用模擬,效果相同),好象程序被中斷打斷了,其實是OS故意制造的假象,目的是為了任務切換。既然是中斷,那么返回地址(即緊鄰OS_TASK_SW()的下一條匯編指令的PC地址)就被自動壓入堆棧,接著在中斷程序里保存CPU寄存器(PUSHALL)……。堆棧結構不是任意的,而是嚴格按照uCOSII規范處理。OS每次切換都會保存和恢復全部現場信息(POPALL),然后用RETI回到任務斷點繼續執行。這個斷點就是OSSched()函數里的緊鄰OS_TASK_SW()的下一條匯編指令的PC地址。切換的整個過程就是,用戶任務程序調用系統API函數,API調用OSSched(),OSSched()調用軟中斷OS_TASK_SW()即OSCtxSw,返回地址(PC值)壓棧,進入OSCtxSw中斷處理子程序內部。反之,切換程序調用RETI返回緊鄰OS_TASK_SW()的下一條匯編指令的PC地址,進而返回OSSched()下一句,再返回API下一句,即用戶程序斷點。因此,如果任務從運行到就緒再到運行,它是從調度前的斷點處運行。<BR>(2)中斷會引發條件變化,在退出前必須進行任務調度。uCOSII要求中斷的堆棧結構符合規范,以便正確協調中斷退出和任務切換。前面已經說到任務切換實際是模擬一次中斷事件,而在真正的中斷里省去了模擬(本身就是中斷嘛)。只要規定中斷堆棧結構和uCOSII模擬的堆棧結構一樣,就能保證在中斷里進行正確的切換。任務切換發生在中斷退出前,此時還沒有返回中斷斷點。仔細觀察中斷程序和切換程序最后兩句,它們是一模一樣的,POPALL+RETI。即要么直接從中斷程序退出,返回斷點;要么先保存現場到TCB,等到恢復現場時再從切換函數返回原來的中斷斷點(由于中斷和切換函數遵循共同的堆棧結構,所以退出操作相同,效果也相同)。用戶編寫的中斷子程序必須按照uCOSII規范書寫。任務調度發生在中斷退出前,是非常及時的,不會等到下一時間片才處理。OSIntCtxSw()函數對堆棧指針做了簡單調整,以保證所有掛起任務的棧結構看起來是一樣的。<BR>(3)在uCOSII里,任務必須寫成兩種形式之一(《uCOSII中文版》p99頁)。在有些RTOS開發環境里沒有要求顯式調用OSTaskDel(),這是因為開發環境自動做了處理,實際原理都是一樣的。uCOSII的開發依賴于編譯器,目前沒有專用開發環境,所以出現這些不便之處是可以理解的。<BR>移植過程:<BR>(1)拷貝書后附贈光盤sourcecode目錄下的內容到C:\YY下,刪除不必要的文件和EX1L.C,只剩下p187(《uCOSII》)上列出的文件。<BR>(2)改寫最簡單的OS_CPU.H<BR>數據類型的設定見C51.PDF第176頁。注意BOOLEAN要定義成unsigned 
                  char 
                  類型,因為bit類型為C51特有,不能用在結構體里。<BR>EA=0關中斷;EA=1開中斷。這樣定義即減少了程序行數,又避免了退出臨界區后關中斷造成的死機。<BR>MCS-51堆棧從下往上增長(1=向下,0=向上),OS_STK_GROWTH定義為0<BR>#define 
                  OS_TASK_SW() OSCtxSw() 
                  因為MCS-51沒有軟中斷指令,所以用程序調用代替。兩者的堆棧格式相同,RETI指令復位中斷系統,RET則沒有。實踐表明,對于MCS-51,用子程序調用入棧,用中斷返回指令RETI出棧是沒有問題的,反之中斷入棧RET出棧則不行。總之,對于入棧,子程序調用與中斷調用效果是一樣的,可以混用。在沒有中斷發生的情況下復位中斷系統也不會影響系統正常運行。詳見《uC/OS-II》第八章193頁第12行<BR>(3)改寫OS_CPU_C.C<BR>我設計的堆棧結構如下圖所示:<BR><IMG 
                  onmousewheel="return bbimg(this)" onclick=ImgClick(this) 
                  src="UCOS電子技術,網友心得文章瀏覽.files/image002.jpg" 
                  onload=ImgLoad(this) border=0 
                  resized="0"></P><BR>TCB結構體中OSTCBStkPtr總是指向用戶堆棧最低地址,該地址空間內存放用戶堆棧長度,其上空間存放系統堆棧映像,即:用戶堆棧空間大小=系統堆棧空間大小+1。<BR>SP總是先加1再存數據,因此,SP初始時指向系統堆棧起始地址(OSStack)減1處(OSStkStart)。很明顯系統堆棧存儲空間大小=SP-OSStkStart。<BR>任務切換時,先保存當前任務堆棧內容。方法是:用SP-OSStkStart得出保存字節數,將其寫入用戶堆棧最低地址內,以用戶堆棧最低地址為起址,以OSStkStart為系統堆棧起址,由系統棧向用戶棧拷貝數據,循環SP-OSStkStart次,每次拷貝前先將各自棧指針增1。<BR>其次,恢復最高優先級任務系統堆棧。方法是:獲得最高優先級任務用戶堆棧最低地址,從中取出“長度”,以最高優先級任務用戶堆棧最低地址為起址,以OSStkStart為系統堆棧起址,由用戶棧向系統棧拷貝數據,循環“長度”數值指示的次數,每次拷貝前先將各自棧指針增1。<BR>用戶堆棧初始化時從下向上依次保存:用戶堆棧長度(15),PCL,PCH,PSW,ACC,B,DPL,DPH,R0,R1,R2,R3,R4,R5,R6,R7。不保存SP,任務切換時根據用戶堆棧長度計算得出。<BR>OSTaskStkInit函數總是返回用戶棧最低地址。<BR>操作系統tick時鐘我使用了51單片機的T0定時器,它的初始化代碼用C寫在了本文件中。<BR>最后還有幾點必須注意的事項。本來原則上我們不用修改與處理器無關的代碼,但是由于KEIL編譯器的特殊性,這些代碼仍要多處改動。因為KEIL缺省情況下編譯的代碼不可重入,而多任務系統要求并發操作導致重入,所以要在每個C函數及其聲明后標注reentrant關鍵字。另外,“pdata”、“data”在uCOS中用做一些函數的形參,但它同時又是KEIL的關鍵字,會導致編譯錯誤,我通過把“pdata”改成“ppdata”,“data”改成“ddata”解決了此問題。OSTCBCur、OSTCBHighRdy、OSRunning、OSPrioCur、OSPrioHighRdy這幾個變量在匯編程序中用到了,為了使用Ri訪問而不用DPTR,應該用KEIL擴展關鍵字IDATA將它們定義在內部RAM中。<BR>(4)重寫OS_CPU_A.ASM<BR>A51宏匯編的大致結構如下:<BR>NAME 模塊名 ;與文件名無關<BR>;定義重定位段 
                  必須按照C51格式定義,匯編遵守C51規范。段名格式為:?PR?函數名?模塊名<BR>;聲明引用全局變量和外部子程序 
                  注意關鍵字為“EXTRN”沒有‘E’<BR>全局變量名直接引用<BR>無參數/無寄存器參數函數 
                  FUNC<BR>帶寄存器參數函數 _FUNC<BR>重入函數 
                  _?FUNC<BR>;分配堆棧空間<BR>只關心大小,堆棧起點由keil決定,通過標號可以獲得keil分配的SP起點。切莫自己分配堆棧起點,只要用DS通知KEIL預留堆棧空間即可。<BR>?STACK段名與STARTUP.A51中的段名相同,這意味著KEIL在LINK時將把兩個同名段拼在一起,我預留了40H個字節,STARTUP.A51預留了1個字節,LINK完成后堆棧段總長為41H。查看yy.m51知KEIL將堆棧起點定在21H,長度41H,處于內部RAM中。<BR>;定義宏<BR>宏名 
                  MACRO 實體 
                  ENDM<BR>;子程序<BR>OSStartHighRdy<BR>OSCtxSw<BR>OSIntCtxSw<BR>OSTickISR<BR>SerialISR<BR>END 
                  ;聲明匯編源文件結束<BR><BR>一般指針占3字節。+0類型+1高8位數據+2低8位數據 
                  詳見C51.PDF第178頁<BR>低位地址存高8位值,高位地址存低8位值。例如0x1234,基址+0:0x12 
                  基址+1:0x34<BR><BR>(5)移植串口驅動程序<BR>在此之前我寫過基于中斷的串口驅動程序,包括打印字節/字/長字/字符串,讀串口,初始化串口/緩沖區。把它改成重入函數即可直接使用。<BR>系統提供的顯示函數是并發的,它不是直接顯示到串口,而是先輸出到顯存,用戶不必擔心IO慢速操作影響程序運行。串口輸入也采用了同樣的技術,他使得用戶在CPU忙于處理其他任務時照樣可以盲打輸入命令。<BR>(6)編寫測試程序Demo(YY.C)<BR>Demo程序創建了3個任務A、B、C優先級分別為2、3、4,A每秒顯示一次,B每3秒顯示一次,C每6秒顯示一次。從顯示結果看,顯示3個A后顯示1個B,顯示6個A和2個B后顯示1個C,結果顯然正確。<BR>顯示結果如下:<BR>AAAAAA111111 
                  is active<BR>AAAAAA111111 is active<BR>AAAAAA111111 is 
                  active<BR>BBBBBB333333 is active<BR>AAAAAA111111 is 
                  active<BR>AAAAAA111111 is active<BR>AAAAAA111111 is 
                  active<BR>BBBBBB333333 is active<BR>CCCCCC666666 is 
                  active<BR>AAAAAA111111 is active<BR>AAAAAA111111 is 
                  active<BR>AAAAAA111111 is active<BR>BBBBBB333333 is 
                  active<BR>AAAAAA111111 is active<BR>AAAAAA111111 is 
                  active<BR>AAAAAA111111 is active<BR>BBBBBB333333 is 
                  active<BR>CCCCCC666666 is 
                  active<BR>Demo程序經Keil701編譯后,代碼量為7-8K,可直接在KeilC51上仿真運行。<BR>編譯時要將OS_CPU_C.C、UCOS_II.C、OS_CPU_A.ASM、YY.C加入項目 

                  <P></P>
                  <P>文件名 : OS_CPU_A.ASM</P>
                  <P>$NOMOD51<BR>EA BIT 0A8H.7<BR>SP DATA 081H<BR>B DATA 
                  0F0H<BR>ACC DATA 0E0H<BR>DPH DATA 083H<BR>DPL DATA 082H<BR>PSW 
                  DATA 0D0H<BR>TR0 BIT 088H.4<BR>TH0 DATA 08CH<BR>TL0 DATA 
                  08AH</P>
                  <P>NAME OS_CPU_A 
                  ;模塊名<BR><BR>;定義重定位段<BR>?PR?OSStartHighRdy?OS_CPU_A SEGMENT 
                  CODE<BR>?PR?OSCtxSw?OS_CPU_A SEGMENT 
                  CODE<BR>?PR?OSIntCtxSw?OS_CPU_A SEGMENT 
                  CODE<BR>?PR?OSTickISR?OS_CPU_A SEGMENT CODE</P>
                  <P>?PR?_?serial?OS_CPU_A SEGMENT 
                  CODE<BR><BR>;聲明引用全局變量和外部子程序<BR>EXTRN IDATA (OSTCBCur)<BR>EXTRN 
                  IDATA (OSTCBHighRdy)<BR>EXTRN IDATA (OSRunning)<BR>EXTRN IDATA 
                  (OSPrioCur)<BR>EXTRN IDATA (OSPrioHighRdy)<BR><BR>EXTRN CODE 
                  (_?OSTaskSwHook)<BR>EXTRN CODE (_?serial)<BR>EXTRN CODE 
                  (_?OSIntEnter)<BR>EXTRN CODE (_?OSIntExit)<BR>EXTRN CODE 
                  (_?OSTimeTick) <BR><BR>;對外聲明4個不可重入函數<BR>PUBLIC 
                  OSStartHighRdy<BR>PUBLIC OSCtxSw<BR>PUBLIC 
                  OSIntCtxSw<BR>PUBLIC OSTickISR<BR><BR>;PUBLIC SerialISR 
                  <BR><BR>;分配堆棧空間。只關心大小,堆棧起點由keil決定,通過標號可以獲得keil分配的SP起點。<BR>?STACK 
                  SEGMENT IDATA<BR>RSEG ?STACK<BR>OSStack:<BR>DS 
                  40H<BR>OSStkStart IDATA OSStack-1</P>
                  <P>;定義壓棧出棧宏<BR>PUSHALL MACRO<BR>PUSH PSW<BR>PUSH ACC<BR>PUSH 
                  B<BR>PUSH DPL<BR>PUSH DPH<BR>MOV A,R0 ;R0-R7入棧<BR>PUSH 
                  ACC<BR>MOV A,R1<BR>PUSH ACC<BR>MOV A,R2<BR>PUSH ACC<BR>MOV 
                  A,R3<BR>PUSH ACC<BR>MOV A,R4<BR>PUSH ACC<BR>MOV A,R5<BR>PUSH 
                  ACC<BR>MOV A,R6<BR>PUSH ACC<BR>MOV A,R7<BR>PUSH ACC<BR>;PUSH 
                  SP ;不必保存SP,任務切換時由相應程序調整<BR>ENDM<BR><BR>POPALL MACRO<BR>;POP 
                  ACC ;不必保存SP,任務切換時由相應程序調整<BR>POP ACC ;R0-R7出棧<BR>MOV 
                  R7,A<BR>POP ACC<BR>MOV R6,A<BR>POP ACC<BR>MOV R5,A<BR>POP 
                  ACC<BR>MOV R4,A<BR>POP ACC<BR>MOV R3,A<BR>POP ACC<BR>MOV 
                  R2,A<BR>POP ACC<BR>MOV R1,A<BR>POP ACC<BR>MOV R0,A<BR>POP 
                  DPH<BR>POP DPL<BR>POP B<BR>POP ACC<BR>POP 
                  PSW<BR>ENDM<BR><BR>;子程序<BR>;-------------------------------------------------------------------------<BR>RSEG 
                  ?PR?OSStartHighRdy?OS_CPU_A<BR>OSStartHighRdy:<BR>USING 0 
                  ;上電后51自動關中斷,此處不必用CLR EA指令,因為到此處還未開中斷,本程序退出后,開中斷。<BR>LCALL 
                  _?OSTaskSwHook</P>
                  <P>OSCtxSw_in:<BR><BR>;OSTCBCur ===&gt; DPTR 
                  獲得當前TCB指針,詳見C51.PDF第178頁<BR>MOV R0,#LOW (OSTCBCur) 
                  ;獲得OSTCBCur指針低地址,指針占3字節。+0類型+1高8位數據+2低8位數據<BR>INC R0<BR>MOV 
                  DPH,@R0 ;全局變量OSTCBCur在IDATA中<BR>INC R0<BR>MOV 
                  DPL,@R0<BR><BR>;OSTCBCur-&gt;OSTCBStkPtr ===&gt; DPTR 
                  獲得用戶堆棧指針<BR>INC DPTR ;指針占3字節。+0類型+1高8位數據+2低8位數據<BR>MOVX 
                  A,@DPTR ;.OSTCBStkPtr是void指針<BR>MOV R0,A<BR>INC DPTR<BR>MOVX 
                  A,@DPTR<BR>MOV R1,A<BR>MOV DPH,R0<BR>MOV 
                  DPL,R1<BR><BR>;*UserStkPtr ===&gt; R5 用戶堆棧起始地址內容(即用戶堆棧長度放在此處) 
                  詳見文檔說明 指針用法詳見C51.PDF第178頁 <BR>MOVX A,@DPTR ;用戶堆棧中是unsigned 
                  char類型數據<BR>MOV R5,A ;R5=用戶堆棧長度<BR><BR>;恢復現場堆棧內容<BR>MOV 
                  R0,#OSStkStart<BR><BR>restore_stack:<BR><BR>INC DPTR<BR>INC 
                  R0<BR>MOVX A,@DPTR<BR>MOV @R0,A<BR>DJNZ 
                  R5,restore_stack<BR><BR>;恢復堆棧指針SP<BR>MOV 
                  SP,R0<BR><BR>;OSRunning=TRUE<BR>MOV R0,#LOW (OSRunning)<BR>MOV 
                  @R0,#01<BR><BR>POPALL<BR>SETB EA 
                  ;開中斷<BR>RETI<BR>;-------------------------------------------------------------------------<BR>RSEG 
                  ?PR?OSCtxSw?OS_CPU_A<BR>OSCtxSw: 
                  <BR>PUSHALL<BR><BR>OSIntCtxSw_in:<BR><BR>;獲得堆棧長度和起址<BR>MOV 
                  A,SP<BR>CLR C<BR>SUBB A,#OSStkStart<BR>MOV R5,A ;獲得堆棧長度 
                  <BR><BR>;OSTCBCur ===&gt; DPTR 獲得當前TCB指針,詳見C51.PDF第178頁<BR>MOV 
                  R0,#LOW (OSTCBCur) 
                  ;獲得OSTCBCur指針低地址,指針占3字節。+0類型+1高8位數據+2低8位數據<BR>INC R0<BR>MOV 
                  DPH,@R0 ;全局變量OSTCBCur在IDATA中<BR>INC R0<BR>MOV 
                  DPL,@R0<BR><BR>;OSTCBCur-&gt;OSTCBStkPtr ===&gt; DPTR 
                  獲得用戶堆棧指針<BR>INC DPTR ;指針占3字節。+0類型+1高8位數據+2低8位數據<BR>MOVX 
                  A,@DPTR ;.OSTCBStkPtr是void指針<BR>MOV R0,A<BR>INC DPTR<BR>MOVX 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月综合激情网| 欧美一区二区三区在线电影| 国产成人超碰人人澡人人澡| 成人激情电影免费在线观看| 欧美蜜桃一区二区三区| 久久久久久麻豆| 亚洲成人福利片| 大美女一区二区三区| 欧美一二三区精品| 亚洲欧美一区二区久久| 国产一区二三区好的| 5858s免费视频成人| 亚洲色图在线看| 国产不卡视频在线观看| 欧美成人伊人久久综合网| 亚洲一区在线视频| 99re这里只有精品视频首页| 久久久久久久久久久电影| 日韩高清在线一区| 欧美午夜精品一区二区蜜桃| 亚洲欧美综合网| 成人va在线观看| 国产精品美女久久久久高潮| 国产一区二区三区四区五区入口| 欧美一区二区高清| 丝袜脚交一区二区| 欧美日韩久久久久久| 亚洲女同一区二区| 99久久久国产精品免费蜜臀| 久久精品人人做人人爽人人| 国产最新精品免费| 久久免费视频色| 国产成人久久精品77777最新版本| 久久综合九色综合欧美98| 日本欧美久久久久免费播放网| 91福利国产成人精品照片| 亚洲视频电影在线| 在线观看日韩高清av| 亚洲午夜视频在线观看| 欧美色大人视频| 偷拍一区二区三区四区| 欧美三级三级三级| 日韩激情视频网站| 日韩美女主播在线视频一区二区三区| 日本va欧美va瓶| 日韩免费看的电影| 国产精品99久久久| 中文字幕在线不卡视频| 97精品久久久午夜一区二区三区| 国产精品国产三级国产普通话99| 色综合中文字幕国产 | 中文久久乱码一区二区| 岛国一区二区在线观看| 一区视频在线播放| 精品污污网站免费看| 天涯成人国产亚洲精品一区av| 日韩一区二区三| 国产精品一二三四| 亚洲日本成人在线观看| 欧美日韩成人综合在线一区二区| 捆绑调教美女网站视频一区| 久久精品日产第一区二区三区高清版 | 不卡的av在线| 亚洲一区在线看| 精品av久久707| 色中色一区二区| 免费国产亚洲视频| 中文字幕一区二区三区在线观看 | 欧美在线影院一区二区| 日本中文字幕一区| 国产精品国产三级国产三级人妇 | 欧美电影在线免费观看| 国产一区二区三区日韩| 一区二区三区蜜桃| 欧美电视剧免费全集观看| 成人午夜碰碰视频| 日韩中文字幕一区二区三区| 亚洲国产精品av| 欧美挠脚心视频网站| 粉嫩一区二区三区性色av| 午夜视频久久久久久| 国产日韩欧美精品电影三级在线| 久久综合狠狠综合久久激情| 成人亚洲一区二区一| 亚洲成a人片在线观看中文| 久久久无码精品亚洲日韩按摩| 在线观看免费亚洲| 国产成a人亚洲| 毛片av一区二区三区| 亚洲乱码中文字幕| 国产日韩v精品一区二区| 精品视频1区2区| 91麻豆国产精品久久| 国产最新精品免费| 秋霞电影一区二区| 亚洲精品乱码久久久久久 | 久久久久久麻豆| 欧美一区二区大片| 欧美在线综合视频| 色综合天天综合网国产成人综合天 | 国产精品女主播av| 精品国产乱码91久久久久久网站| 欧美三级日韩在线| 91蜜桃传媒精品久久久一区二区| 韩国精品一区二区| 蜜桃精品在线观看| 日韩精品五月天| 亚洲va欧美va国产va天堂影院| 自拍偷自拍亚洲精品播放| 国产欧美日韩在线观看| 26uuu亚洲| 久久青草国产手机看片福利盒子| 日韩一区二区三区视频| 欧美欧美午夜aⅴ在线观看| 在线观看成人免费视频| 色综合久久88色综合天天免费| 成人精品视频网站| 不卡一二三区首页| 成人av动漫在线| 91蜜桃在线免费视频| 91丨porny丨蝌蚪视频| 91免费精品国自产拍在线不卡| 99re这里都是精品| 99国内精品久久| 在线观看www91| 欧美日韩一区二区三区视频| 国产日韩欧美在线一区| 欧美成人综合网站| 日本一区二区三区在线不卡 | 国产高清无密码一区二区三区| 国产原创一区二区三区| 国产麻豆日韩欧美久久| 成人avav在线| 欧美在线观看视频一区二区三区| 91福利视频网站| 欧美一区二区女人| 国产色产综合色产在线视频| 国产欧美一区二区精品仙草咪| 国产精品久久久久久久久免费桃花| 亚洲欧洲日本在线| 亚洲综合一区二区| 久久精品噜噜噜成人av农村| 国产美女主播视频一区| 99精品欧美一区二区蜜桃免费| 91免费国产视频网站| 91精品欧美福利在线观看| xfplay精品久久| 一区二区三区四区高清精品免费观看 | 欧美精品一区二| 亚洲美女电影在线| 首页国产欧美日韩丝袜| 国产一区二区在线视频| 99vv1com这只有精品| 51精品国自产在线| 国产亲近乱来精品视频| 亚洲一区二区三区四区五区黄| 免费精品视频最新在线| www.色精品| 精品嫩草影院久久| 亚洲激情网站免费观看| 精品中文字幕一区二区小辣椒 | 日韩av一级电影| 国产成人免费在线视频| 色狠狠综合天天综合综合| 91麻豆精品国产无毒不卡在线观看| 久久综合999| 亚洲成va人在线观看| 国产成人免费网站| 337p亚洲精品色噜噜| 中文字幕在线播放不卡一区| 日本系列欧美系列| 色婷婷综合激情| 国产精品日产欧美久久久久| 日韩1区2区3区| 欧美日韩一卡二卡| 最近日韩中文字幕| 国产精品亚洲视频| 日韩免费电影网站| 午夜电影一区二区| 色8久久精品久久久久久蜜| 久久久精品国产99久久精品芒果| 午夜私人影院久久久久| 91在线视频播放| 中文字幕欧美国产| 韩国成人福利片在线播放| 欧美浪妇xxxx高跟鞋交| 亚洲精品免费在线播放| 成人精品电影在线观看| 久久色中文字幕| 极品少妇xxxx精品少妇偷拍| 欧美在线视频你懂得| 亚洲天堂精品在线观看| 成人免费视频app| 久久精品日产第一区二区三区高清版 | 欧美日韩在线一区二区| 亚洲乱码国产乱码精品精小说| 成年人国产精品| 中文字幕佐山爱一区二区免费| 国产成人精品免费看| 国产亚洲精品bt天堂精选|