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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 在51系列單片機上移植ucos.htm

?? 該源碼是本人經(jīng)調(diào)試通過的UCOS2操作系統(tǒng)在51單片機上移植好的源代碼
?? HTM
?? 第 1 頁 / 共 3 頁
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0050)http://www.startmcu.com/freeresource/51_ucosii.htm -->
<HTML><HEAD><TITLE>在51系列單片機上移植uCOS</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2900.2180" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId>
<META content="lr, default" name="Microsoft Border"></HEAD>
<BODY><!--msnavigation-->
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD vAlign=top width="1%">  </TD>
    <TD vAlign=top width=24></TD><!--msnavigation-->
    <TD vAlign=top><FONT face=華文行楷 color=#9999ff size=4><IMG height=30 
      src="在51系列單片機上移植uCOS.files/home.jpg" width=46 
      border=0>&nbsp;&nbsp;&nbsp;</FONT><FONT face=華文行楷 color=#800080 size=4> 
      起點單片機</FONT><FONT face=華文行楷 color=#9999ff 
      size=4>&nbsp;&nbsp;&nbsp;&nbsp;(資料下載)</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
      face=華文行楷 color=#9999ff 
      size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </FONT><FONT 
      size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A 
      style="CURSOR: hand; LETTER-SPACING: 3px"><FONT 
      color=#000000><B>[</B></FONT></A><FONT color=#ff00ff><A 
      style="CURSOR: hand; LETTER-SPACING: 3px" 
      href="http://www.startmcu.com/index.htm">返回主頁</A></FONT><A 
      style="CURSOR: hand; LETTER-SPACING: 3px"><FONT 
      color=#000000><B>]</B></FONT></A></FONT> 
      <TABLE borderColor=#0099ff width="100%" bgColor=#3399ff border=1>
        <TBODY>
        <TR>
          <TD width="50%">
            <P style="TEXT-INDENT: -1px; LINE-HEIGHT: 150%"> </P></TD>
          <TD width="50%"> </TD></TR></TBODY></TABLE>
      <P><B><FONT face=新宋體 color=#000080 
size=4>在51系列單片機上移植uCOS-II</FONT></B></P>
      <P><FONT class=b1><FONT face=新宋體 color=#000080 
      size=2>內(nèi)容摘要:本文詳細系統(tǒng)地介紹了uC/OS-II在51單片機上的移植、重入實現(xiàn)方法、硬件仿真、固化、人機界面等關(guān)鍵內(nèi)容。<BR>關(guān)鍵詞:嵌入式實時多任務(wù)操作系統(tǒng)、uC/OS-II、C51<BR>引言:隨著各種應(yīng)用電子系統(tǒng)的復(fù)雜化和系統(tǒng)實時性需求的提高,并伴隨應(yīng)用軟件朝著系統(tǒng)化方向發(fā)展的加速,在16位/32位單片機中廣泛使用了嵌入式實時操作系統(tǒng)。然而實際使用中卻存在著大量8位單片機,從經(jīng)濟性考慮,對某些應(yīng)用場合,在8位MCU上使用操作系統(tǒng)是可行的。從學(xué)習操作系統(tǒng)角度,uC/OS-II 
      for 
      51即簡單又全面,學(xué)習成本低廉,值得推廣。<BR>結(jié)語:μC/OS-II具有免費、簡單、可靠性高、實時性好等優(yōu)點,但也有缺乏便利開發(fā)環(huán)境等缺點,尤其不像商用嵌入式系統(tǒng)那樣得到廣泛使用和持續(xù)的研究更新。但開放性又使得開發(fā)人員可以自行裁減和添加所需的功能,在許多應(yīng)用領(lǐng)域發(fā)揮著獨特的作用。當然,是否在單片機系統(tǒng)中嵌入μC/OS-II應(yīng)視所開發(fā)的項目而定,對于一些簡單的、低成本的項目來說,就沒必要使用嵌入式操作系統(tǒng)了。</FONT></P>
      <P></P>
      <P><FONT face=新宋體 color=#000080 
      size=2>uC/OS-II原理:<BR>uCOSII包括任務(wù)調(diào)度、時間管理、內(nèi)存管理、資源管理(信號量、郵箱、消息隊列)四大部分,沒有文件系統(tǒng)、網(wǎng)絡(luò)接口、輸入輸出界面。它的移植只與4個文件相關(guān):匯編文件(OS_CPU_A.ASM)、處理器相關(guān)C文件(OS_CPU.H、OS_CPU_C.C)和配置文件(OS_CFG.H)。有64個優(yōu)先級,系統(tǒng)占用8個,用戶可創(chuàng)建56個任務(wù),不支持時間片輪轉(zhuǎn)。它的基本思路就是 
      “近似地每時每刻總是讓優(yōu)先級最高的就緒任務(wù)處于運行狀態(tài)” 
      。為了保證這一點,它在調(diào)用系統(tǒng)API函數(shù)、中斷結(jié)束、定時中斷結(jié)束時總是執(zhí)行調(diào)度算法。原作者通過事先計算好數(shù)據(jù),簡化了運算量,通過精心設(shè)計就緒表結(jié)構(gòu),使得延時可預(yù)知。任務(wù)的切換是通過模擬一次中斷實現(xiàn)的。<BR>uCOSII工作核心原理是:近似地讓最高優(yōu)先級的就緒任務(wù)處于運行狀態(tài)。<BR>操作系統(tǒng)將在下面情況中進行任務(wù)調(diào)度:調(diào)用API函數(shù)(用戶主動調(diào)用),中斷(系統(tǒng)占用的時間片中斷OsTimeTick(),用戶使用的中斷)。<BR>調(diào)度算法書上講得很清楚,我主要講一下整體思路。<BR>(1)在調(diào)用API函數(shù)時,有可能引起阻塞,如果系統(tǒng)API函數(shù)察覺到運行條件不滿足,需要切換就調(diào)用OSSched()調(diào)度函數(shù),這個過程是系統(tǒng)自動完成的,用戶沒有參與。OSSched()判斷是否切換,如果需要切換,則此函數(shù)調(diào)用OS_TASK_SW()。這個函數(shù)模擬一次中斷(在51里沒有軟中斷,我用子程序調(diào)用模擬,效果相同),好象程序被中斷打斷了,其實是OS故意制造的假象,目的是為了任務(wù)切換。既然是中斷,那么返回地址(即緊鄰OS_TASK_SW()的下一條匯編指令的PC地址)就被自動壓入堆棧,接著在中斷程序里保存CPU寄存器(PUSHALL)……。堆棧結(jié)構(gòu)不是任意的,而是嚴格按照uCOSII規(guī)范處理。OS每次切換都會保存和恢復(fù)全部現(xiàn)場信息(POPALL),然后用RETI回到任務(wù)斷點繼續(xù)執(zhí)行。這個斷點就是OSSched()函數(shù)里的緊鄰OS_TASK_SW()的下一條匯編指令的PC地址。切換的整個過程就是,用戶任務(wù)程序調(diào)用系統(tǒng)API函數(shù),API調(diào)用OSSched(),OSSched()調(diào)用軟中斷OS_TASK_SW()即OSCtxSw,返回地址(PC值)壓棧,進入OSCtxSw中斷處理子程序內(nèi)部。反之,切換程序調(diào)用RETI返回緊鄰OS_TASK_SW()的下一條匯編指令的PC地址,進而返回OSSched()下一句,再返回API下一句,即用戶程序斷點。因此,如果任務(wù)從運行到就緒再到運行,它是從調(diào)度前的斷點處運行。<BR>(2)中斷會引發(fā)條件變化,在退出前必須進行任務(wù)調(diào)度。uCOSII要求中斷的堆棧結(jié)構(gòu)符合規(guī)范,以便正確協(xié)調(diào)中斷退出和任務(wù)切換。前面已經(jīng)說到任務(wù)切換實際是模擬一次中斷事件,而在真正的中斷里省去了模擬(本身就是中斷嘛)。只要規(guī)定中斷堆棧結(jié)構(gòu)和uCOSII模擬的堆棧結(jié)構(gòu)一樣,就能保證在中斷里進行正確的切換。任務(wù)切換發(fā)生在中斷退出前,此時還沒有返回中斷斷點。仔細觀察中斷程序和切換程序最后兩句,它們是一模一樣的,POPALL+RETI。即要么直接從中斷程序退出,返回斷點;要么先保存現(xiàn)場到TCB,等到恢復(fù)現(xiàn)場時再從切換函數(shù)返回原來的中斷斷點(由于中斷和切換函數(shù)遵循共同的堆棧結(jié)構(gòu),所以退出操作相同,效果也相同)。用戶編寫的中斷子程序必須按照uCOSII規(guī)范書寫。任務(wù)調(diào)度發(fā)生在中斷退出前,是非常及時的,不會等到下一時間片才處理。OSIntCtxSw()函數(shù)對堆棧指針做了簡單調(diào)整,以保證所有掛起任務(wù)的棧結(jié)構(gòu)看起來是一樣的。<BR>(3)在uCOSII里,任務(wù)必須寫成兩種形式之一(《uCOSII中文版》p99頁)。在有些RTOS開發(fā)環(huán)境里沒有要求顯式調(diào)用OSTaskDel(),這是因為開發(fā)環(huán)境自動做了處理,實際原理都是一樣的。uCOSII的開發(fā)依賴于編譯器,目前沒有專用開發(fā)環(huán)境,所以出現(xiàn)這些不便之處是可以理解的。<BR>移植過程:<BR>(1)拷貝書后附贈光盤sourcecode目錄下的內(nèi)容到C:\YY下,刪除不必要的文件和EX1L.C,只剩下p187(《uCOSII》)上列出的文件。<BR>(2)改寫最簡單的OS_CPU.H<BR>數(shù)據(jù)類型的設(shè)定見C51.PDF第176頁。注意BOOLEAN要定義成unsigned 
      char 
      類型,因為bit類型為C51特有,不能用在結(jié)構(gòu)體里。<BR>EA=0關(guān)中斷;EA=1開中斷。這樣定義即減少了程序行數(shù),又避免了退出臨界區(qū)后關(guān)中斷造成的死機。<BR>MCS-51堆棧從下往上增長(1=向下,0=向上),OS_STK_GROWTH定義為0<BR>#define 
      OS_TASK_SW() OSCtxSw() 
      因為MCS-51沒有軟中斷指令,所以用程序調(diào)用代替。兩者的堆棧格式相同,RETI指令復(fù)位中斷系統(tǒng),RET則沒有。實踐表明,對于MCS-51,用子程序調(diào)用入棧,用中斷返回指令RETI出棧是沒有問題的,反之中斷入棧RET出棧則不行。總之,對于入棧,子程序調(diào)用與中斷調(diào)用效果是一樣的,可以混用。在沒有中斷發(fā)生的情況下復(fù)位中斷系統(tǒng)也不會影響系統(tǒng)正常運行。詳見《uC/OS-II》第八章193頁第12行<BR>(3)改寫OS_CPU_C.C<BR>我設(shè)計的堆棧結(jié)構(gòu)如下圖所示:<BR><IMG 
      height=374 src="在51系列單片機上移植uCOS.files/2004311205045734.jpg" width=553 
      border=0></FONT></P><FONT 
      color=#000080><BR>TCB結(jié)構(gòu)體中OSTCBStkPtr總是指向用戶堆棧最低地址,該地址空間內(nèi)存放用戶堆棧長度,其上空間存放系統(tǒng)堆棧映像,即:用戶堆棧空間大小=系統(tǒng)堆棧空間大小+1。<BR>SP總是先加1再存數(shù)據(jù),因此,SP初始時指向系統(tǒng)堆棧起始地址(OSStack)減1處(OSStkStart)。很明顯系統(tǒng)堆棧存儲空間大小=SP-OSStkStart。<BR>任務(wù)切換時,先保存當前任務(wù)堆棧內(nèi)容。方法是:用SP-OSStkStart得出保存字節(jié)數(shù),將其寫入用戶堆棧最低地址內(nèi),以用戶堆棧最低地址為起址,以O(shè)SStkStart為系統(tǒng)堆棧起址,由系統(tǒng)棧向用戶棧拷貝數(shù)據(jù),循環(huán)SP-OSStkStart次,每次拷貝前先將各自棧指針增1。<BR>其次,恢復(fù)最高優(yōu)先級任務(wù)系統(tǒng)堆棧。方法是:獲得最高優(yōu)先級任務(wù)用戶堆棧最低地址,從中取出“長度”,以最高優(yōu)先級任務(wù)用戶堆棧最低地址為起址,以O(shè)SStkStart為系統(tǒng)堆棧起址,由用戶棧向系統(tǒng)棧拷貝數(shù)據(jù),循環(huán)“長度”數(shù)值指示的次數(shù),每次拷貝前先將各自棧指針增1。<BR>用戶堆棧初始化時從下向上依次保存:用戶堆棧長度(15),PCL,PCH,PSW,ACC,B,DPL,DPH,R0,R1,R2,R3,R4,R5,R6,R7。不保存SP,任務(wù)切換時根據(jù)用戶堆棧長度計算得出。<BR>OSTaskStkInit函數(shù)總是返回用戶棧最低地址。<BR>操作系統(tǒng)tick時鐘我使用了51單片機的T0定時器,它的初始化代碼用C寫在了本文件中。<BR>最后還有幾點必須注意的事項。本來原則上我們不用修改與處理器無關(guān)的代碼,但是由于KEIL編譯器的特殊性,這些代碼仍要多處改動。因為KEIL缺省情況下編譯的代碼不可重入,而多任務(wù)系統(tǒng)要求并發(fā)操作導(dǎo)致重入,所以要在每個C函數(shù)及其聲明后標注reentrant關(guān)鍵字。另外,“pdata”、“data”在uCOS中用做一些函數(shù)的形參,但它同時又是KEIL的關(guān)鍵字,會導(dǎo)致編譯錯誤,我通過把“pdata”改成“ppdata”,“data”改成“ddata”解決了此問題。OSTCBCur、OSTCBHighRdy、OSRunning、OSPrioCur、OSPrioHighRdy這幾個變量在匯編程序中用到了,為了使用Ri訪問而不用DPTR,應(yīng)該用KEIL擴展關(guān)鍵字IDATA將它們定義在內(nèi)部RAM中。<BR>(4)重寫OS_CPU_A.ASM<BR>A51宏匯編的大致結(jié)構(gòu)如下:<BR>NAME 模塊名 ;與文件名無關(guān)<BR>;定義重定位段 
      必須按照C51格式定義,匯編遵守C51規(guī)范。段名格式為:?PR?函數(shù)名?模塊名<BR>;聲明引用全局變量和外部子程序 
      注意關(guān)鍵字為“EXTRN”沒有‘E’<BR>全局變量名直接引用<BR>無參數(shù)/無寄存器參數(shù)函數(shù) FUNC<BR>帶寄存器參數(shù)函數(shù) 
      _FUNC<BR>重入函數(shù) 
      _?FUNC<BR>;分配堆棧空間<BR>只關(guān)心大小,堆棧起點由keil決定,通過標號可以獲得keil分配的SP起點。切莫自己分配堆棧起點,只要用DS通知KEIL預(yù)留堆棧空間即可。<BR>?STACK段名與STARTUP.A51中的段名相同,這意味著KEIL在LINK時將把兩個同名段拼在一起,我預(yù)留了40H個字節(jié),STARTUP.A51預(yù)留了1個字節(jié),LINK完成后堆棧段總長為41H。查看yy.m51知KEIL將堆棧起點定在21H,長度41H,處于內(nèi)部RAM中。<BR>;定義宏<BR>宏名 
      MACRO 實體 
      ENDM<BR>;子程序<BR>OSStartHighRdy<BR>OSCtxSw<BR>OSIntCtxSw<BR>OSTickISR<BR>SerialISR<BR>END 
      ;聲明匯編源文件結(jié)束<BR><BR>一般指針占3字節(jié)。+0類型+1高8位數(shù)據(jù)+2低8位數(shù)據(jù) 
      詳見C51.PDF第178頁<BR>低位地址存高8位值,高位地址存低8位值。例如0x1234,基址+0:0x12 
      基址+1:0x34<BR><BR>(5)移植串口驅(qū)動程序<BR>在此之前我寫過基于中斷的串口驅(qū)動程序,包括打印字節(jié)/字/長字/字符串,讀串口,初始化串口/緩沖區(qū)。把它改成重入函數(shù)即可直接使用。<BR>系統(tǒng)提供的顯示函數(shù)是并發(fā)的,它不是直接顯示到串口,而是先輸出到顯存,用戶不必擔心IO慢速操作影響程序運行。串口輸入也采用了同樣的技術(shù),他使得用戶在CPU忙于處理其他任務(wù)時照樣可以盲打輸入命令。<BR>(6)編寫測試程序Demo(YY.C)<BR>Demo程序創(chuàng)建了3個任務(wù)A、B、C優(yōu)先級分別為2、3、4,A每秒顯示一次,B每3秒顯示一次,C每6秒顯示一次。從顯示結(jié)果看,顯示3個A后顯示1個B,顯示6個A和2個B后顯示1個C,結(jié)果顯然正確。<BR>顯示結(jié)果如下:<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程序經(jīng)Keil701編譯后,代碼量為7-8K,可直接在KeilC51上仿真運行。<BR>編譯時要將OS_CPU_C.C、UCOS_II.C、OS_CPU_A.ASM、YY.C加入項目</FONT> 

      <P></P>
      <P><FONT color=#000080>文件名 : OS_CPU_A.ASM</FONT></P>
      <P><FONT color=#000080>$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</FONT></P>
      <P><FONT color=#000080>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</FONT></P>
      <P><FONT color=#000080>?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個不可重入函數(shù)<BR>PUBLIC OSStartHighRdy<BR>PUBLIC OSCtxSw<BR>PUBLIC 
      OSIntCtxSw<BR>PUBLIC OSTickISR<BR><BR>;PUBLIC SerialISR 
      <BR><BR>;分配堆棧空間。只關(guān)心大小,堆棧起點由keil決定,通過標號可以獲得keil分配的SP起點。<BR>?STACK SEGMENT 
      IDATA<BR>RSEG ?STACK<BR>OSStack:<BR>DS 40H<BR>OSStkStart IDATA 
      OSStack-1</FONT></P>
      <P><FONT color=#000080>;定義壓棧出棧宏<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,任務(wù)切換時由相應(yīng)程序調(diào)整<BR>ENDM<BR><BR>POPALL MACRO<BR>;POP ACC 
      ;不必保存SP,任務(wù)切換時由相應(yīng)程序調(diào)整<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自動關(guān)中斷,此處不必用CLR EA指令,因為到此處還未開中斷,本程序退出后,開中斷。<BR>LCALL 
      _?OSTaskSwHook</FONT></P>
      <P><FONT color=#000080>OSCtxSw_in:<BR><BR>;OSTCBCur ===&gt; DPTR 
      獲得當前TCB指針,詳見C51.PDF第178頁<BR>MOV R0,#LOW (OSTCBCur) 
      ;獲得OSTCBCur指針低地址,指針占3字節(jié)。+0類型+1高8位數(shù)據(jù)+2低8位數(shù)據(jù)<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 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品国产品国语在线app| 另类成人小视频在线| 午夜不卡av免费| 国产又黄又大久久| 欧美日韩国产成人在线免费| 久久精品人人做人人综合 | 亚洲欧美另类在线| 精品亚洲成a人| 欧美性猛交xxxxxx富婆| 国产精品欧美久久久久一区二区| 日韩av成人高清| 色综合视频在线观看| 久久久久久日产精品| 美女在线视频一区| 欧美色图在线观看| 亚洲男人的天堂在线观看| 国内精品在线播放| 日韩一区二区电影在线| 一区二区免费在线播放| 91在线小视频| 国产精品乱人伦中文| 国产二区国产一区在线观看| 欧美一区二区三区人| 日韩综合小视频| 欧美日韩免费一区二区三区视频| 中文字幕一区三区| 成人小视频免费在线观看| 精品sm捆绑视频| 毛片av一区二区三区| 制服丝袜av成人在线看| 天堂久久一区二区三区| 精品视频一区 二区 三区| 亚洲精品五月天| 欧美性受xxxx黑人xyx性爽| 一区二区三区 在线观看视频 | 国产在线看一区| 日韩区在线观看| 麻豆精品视频在线| 欧美成人a视频| 国产一本一道久久香蕉| 久久久久久久综合色一本| 大陆成人av片| 自拍偷自拍亚洲精品播放| 91一区二区在线| 一区二区三区四区不卡在线 | 欧美国产一区视频在线观看| 福利91精品一区二区三区| 久久久精品免费免费| 国产成人丝袜美腿| 亚洲日本免费电影| 欧美日韩一区二区欧美激情| 免费一级片91| 国产精品嫩草99a| 欧美亚洲丝袜传媒另类| 久久精品国产在热久久| 国产欧美精品在线观看| 欧洲一区二区三区在线| 激情亚洲综合在线| 综合色中文字幕| 91精品国产aⅴ一区二区| 国产综合色视频| 亚洲激情男女视频| 日韩精品一区二区三区在线| av不卡免费在线观看| 午夜视频一区在线观看| 亚洲精品一区在线观看| 91视频你懂的| 久久99精品久久久久久国产越南| 国产精品二三区| 91精品国产综合久久精品性色| 国产一区二区三区av电影 | 精品国产一区久久| 色综合天天综合网天天看片| 老司机一区二区| 一区二区三区在线视频观看58| 久久综合国产精品| 一本大道久久a久久精二百| 老司机午夜精品| 一区二区三区国产精品| 国产色产综合色产在线视频| 欧美日韩在线三级| 国产成人精品三级| 奇米一区二区三区| 一区二区三区免费观看| 国产欧美日韩亚州综合| 日韩欧美色电影| 欧美午夜片在线观看| 成人av资源下载| 国模娜娜一区二区三区| 午夜成人免费电影| 一片黄亚洲嫩模| 中文字幕永久在线不卡| 国产欧美综合在线| 精品国产精品一区二区夜夜嗨 | 国产成人综合自拍| 日韩中文字幕一区二区三区| 悠悠色在线精品| 国产精品久久久久久久久搜平片| 欧美videossexotv100| 欧美精品久久久久久久久老牛影院 | 成人av网站在线| 国产一区三区三区| 久久机这里只有精品| 日本特黄久久久高潮| 午夜欧美视频在线观看 | 久久精品亚洲精品国产欧美kt∨| 91精品久久久久久蜜臀| 欧美剧情电影在线观看完整版免费励志电影 | 国产成人综合精品三级| 久草在线在线精品观看| 日韩电影免费在线看| 天堂蜜桃一区二区三区| 无吗不卡中文字幕| 亚洲成a人v欧美综合天堂下载| 一区二区三区欧美日| 亚洲精品高清视频在线观看| 亚洲女子a中天字幕| 一区二区日韩电影| 亚洲一区二区三区自拍| 亚洲高清在线视频| 丝袜亚洲另类欧美综合| 日韩av网站免费在线| 久久精品国产成人一区二区三区| 久久国产精品色婷婷| 国产一区二区在线观看免费| 国产高清精品久久久久| 99在线精品视频| 欧美在线视频全部完| 欧美一卡在线观看| 久久久美女艺术照精彩视频福利播放| 久久嫩草精品久久久久| 欧美国产国产综合| 亚洲另类色综合网站| 午夜精品福利一区二区三区av | 欧美福利视频一区| 欧美变态口味重另类| 国产三级一区二区三区| 国产精品久久久久久久久果冻传媒 | 一区二区三区高清不卡| 日韩精品电影在线观看| 久久99精品久久久久婷婷| 国产91精品入口| 91福利资源站| 精品1区2区在线观看| 国产精品久久久久久久久晋中| 亚洲精品日日夜夜| 久草在线在线精品观看| 成人av免费在线观看| 欧美日韩中文字幕一区| 久久综合资源网| 亚洲乱码一区二区三区在线观看| 午夜精品久久久久久不卡8050| 精东粉嫩av免费一区二区三区| 成人高清免费观看| 欧美二区乱c少妇| 国产午夜精品一区二区三区嫩草 | 91蜜桃视频在线| 日韩精品一区二区三区swag| 亚洲欧洲在线观看av| 男男视频亚洲欧美| 色哟哟欧美精品| 久久久精品黄色| 日日摸夜夜添夜夜添亚洲女人| 懂色av中文一区二区三区| 91精品啪在线观看国产60岁| 一色屋精品亚洲香蕉网站| 精品一区二区三区视频在线观看 | 韩国在线一区二区| 在线中文字幕一区| 中文字幕乱码亚洲精品一区| 日韩精品国产精品| 在线观看一区二区视频| 国产精品欧美极品| 国产一区二区女| 欧美高清视频不卡网| 亚洲自拍偷拍麻豆| 成人av电影在线网| 2023国产精品自拍| 奇米在线7777在线精品| 欧美亚洲日本国产| 国产精品久久久久久亚洲毛片| 国内久久精品视频| 欧美本精品男人aⅴ天堂| 亚洲国产sm捆绑调教视频| 色婷婷综合久久久中文一区二区| 国产日本欧美一区二区| 激情偷乱视频一区二区三区| 欧美人牲a欧美精品| 亚洲一二三四在线| 在线精品视频小说1| 亚洲精品乱码久久久久久久久| 99视频超级精品| 国产精品久久久久aaaa| 国产成人免费av在线| 欧美精品一区二区三区视频| 开心九九激情九九欧美日韩精美视频电影 | 久久爱www久久做| 欧美一级在线免费| 男女视频一区二区| 69堂国产成人免费视频|