精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Windows CE異常和中斷服務程序初探

開發
windowsCE異常和中斷服務程序初探。閱讀本文使您加深對windowsCE異常和中斷服務程序的認識

1。中斷/異常相量的裝入和執行方式。     

      中斷和異常都是異步發生的事件,當該事件發生,系統將停止目前正在執行的代碼轉而執行事件響應的服務程序。而事件服務程序的入口點就是中斷/異常向量所在的位置。arm的中斷向量可以是0x0開始的低地址向量,也可以是在FFFF0000位置的高向量地址。winCE下使用高地址作為trap區,所以在CE下arm使用高地址向量。下面我們來了解一下中斷/異常向量的安裝和執行過程。
在kernelStart的過程中通過程序將如下代碼復制到ffff0000的位置.
VectorInstructions
        ldr     pc, [pc, #0x3E0-8]              ; reset
        ldr     pc, [pc, #0x3E0-8]              ; undefined instruction
        ldr     pc, [pc, #0x3E0-8]              ; SVC
        ldr     pc, [pc, #0x3E0-8]              ; Prefetch abort
        ldr     pc, [pc, #0x3E0-8]              ; data abort
        ldr     pc, [pc, #0x3E0-8]              ; unused vector location
        ldr     pc, [pc, #0x3E0-8]              ; IRQ
        ldr     pc, [pc, #0x3E0-8]              ; FIQ

  而在ffff03e0的位置放上如下的數據,每一項(32bit)對應一個異常的跳轉地址也就是winCE的異常/中斷向量跳轉表。該表項的內容就是發生異常后將要執行的服務程序的入口地址。具體如下。

VectorTable
        DCD     -1                              ; reset
        DCD     UndefException                  ; undefined instruction
        DCD     SWIHandler                      ; SVC
        DCD     PrefetchAbort                   ; Prefetch abort

        IF :DEF:ARMV4T :LOR: :DEF:armV4I

        DCD     OEMDataAbortHandler             ; data abort
        ELSE
        DCD     DataAbortHandler                ; data abort
        ENDIF

        DCD     -1                              ; unused vector

        DCD     IRQHandler                      ; IRQ
        DCD     FIQHandler                      ; FIQ
      在上面的這些代碼/數據在內存空間上按照上述要求放置好以后,每次觸發一個異常就自動運行到相應跳轉表項所對應的地址執行。
 
2.異常/中斷服務程序
  在arm下,由于有7種異常狀態包括reset、Undef exception、software interrupt(swi)、Prefech Abort、DataAbort、IRQ、FIQ七種異常/中斷。reset僅在復位時發生,其他6種都是在系統運行時發生。當任何一個異常發生并得到響應時,arm內核自動完成以下動作:
拷貝 CPSR 到 SPSR_
設置適當的 CPSR 位:
改變處理器狀態進入 arm 狀態
改變處理器模式進入相應的異常模式
設置中斷禁止位禁止相應中斷
更新 LR_
設置 PC 到相應的異常向量同時不管異常發生在ARM 還是Thumb 狀態下,處理器都將自動進入ARM 狀態。并且中斷使能會自動被關閉。在這個時候由于部分通用寄存器是不同模式公用的,所以還需要保存這些將會被破壞的寄存器,待到處理完成的時候恢復這些寄存器被中斷前的狀態。另外在進入異常模式后,lr的值不一定就是我們所需恢復執行的位置,該位置受到異常類型和流水線誤差的影響。在SWI模式下,LR就是返回值。在IRQ和FIQ中LR=LR-4,DataAbort下LR=LR-8;具體原因我們就不討論了,有興趣可以參看<基于arm 的嵌入式程序開發要點>一文。下面分別對這些服務程序進行分析。
  
2-1.undef exception服務程序
     
undef exception在執行到過非法的指令時產生,通常來模擬一些處理器不支持的功能,如浮點運算。簡單說一下undef exception的過程:當當前指令為一條處理器不支持的指令時,處理器會自動動將該指令送交各協處理器(如MMU、FPU)處理,如果這些協處理器都無法識別這條指令的時候,就產生該異常。下面開始看相應的代碼。
        NESTED_ENTRY    UndefException
        sub     lr, lr, #4                      ; (lr) = address of undefined instruction
        stmdb   sp, {r0-r3, lr}
        mov     r1, #ID_UNDEF_INSTR
        b       CommonHandler
        ENTRY_END UndefException

上面就是undef Exception的服務程序的入口處(已經將不參與編譯和Thumb模式下的代碼去掉),通過lr-=4計算出觸發異常前的指令地址,同時保存r0-r3和lr入undef_exception stack用于最后恢復現場和取得異常指令本身,隨后進入分發程序CommonHandler.CommonHandler是一個公共的異常服務程序,它通過不同的傳入參數來進行處理,在這里mov r1,#ID_UNDEF_INSTR就是指定異常模式為undef Exception.


2-2.swi服務程序
     
      按在arm處理器的設計意圖,系統軟件的系統調用(SystemCalls)都是通過SWI指令完成。SWI相當于一個中斷指令,不同的是SWI不是由外部中斷源產生的,同時對應于SWI的異常向量位于0xc的位置或0xffff 000c的位置。也就是說當執行一個swi指令后,當前程序流中斷,并轉入0xc或0xffff000c執行,同時將CPSR_mode(當前程序狀態寄存器)復制入SPSR_svc,轉入SVC模式運行(使用特權模式的寄存器組)。也就是說系統通過執行SWI引發系統swi異常后切換入特權模式,系統調用功能號由swi xx后的xx決定,在運行完指定功能的代碼后返回異常時的地址并恢復用戶模式。我們看看,Wince中這部分代碼是如何實現的。
        DCD     SWIHandler                      ; SVC<<--------------------------SWI入口點。
        
     LEAF_ENTRY SWIHandler
  IF {FALSE}               
  ...
  ENDIF
        movs    pc, lr
        ENTRY_END SWIHandler
        上面IF {FALSE}到ENDIF之間的代碼在編譯的時候是得不到編譯的(事實上這部分代碼是用于開發中調試使用的,針對特殊的硬件平臺,一般與我們使用的硬件平臺無關。所以下面摘抄的代碼都不將不參與編譯的內容寫入),因此SWI服務程序就是一句話。movs    pc, lr也就是直接回到SWI的地方,同時將SPSR_svc恢復到CPSR_mode中。這個過程中并沒有進行在系統態執行特定系統指令序的工作,而僅僅是簡單的返回,所以這不是系統調用,系統調用還需要根據調用號的不同運行指定的核心態代碼。也就是說Wince的系統調用不是通過SWI來完成的,而是通過其他的異常處理手段達成的。


2-3 中斷服務程序

IRQ(大概是最熟悉的異常方式了)在外部中斷源在需要向處理器請求服務時發生,比如:時鐘、外圍器件FIFO上/下溢出、按鍵等等。IRQHandler就是中斷的處理句柄,下面我們來具體看看。

----------------------------------------------------------------------------
    NESTED_ENTRY IRQHandler
        sub     lr, lr, #4                      ; fix return address
        stmfd   sp!, {r0-r3, r12, lr}       ;保存將要用到的寄存器和lr壓入stack_irq
        PROLOG_END
        和上面一樣,服務程序的入口處都是例行公事的計算返回位置以抵消流水線誤差。再將要用到的寄存器壓入STACK_IRQ,這樣,準備工作就做完了。
        ; Test interlocked API status.       
        ;INTERLOCKED_START EQU USER_KPAGE+0x380
    ;INTERLOCKED_END EQU USER_KPAGE+0x400
        sub     r0, lr, #INTERLOCKED_START
        cmp     r0, #INTERLOCKED_END-INTERLOCKED_START
        bllo    CheckInterlockedRestart
        上面這部分的內容是關于互鎖的檢測,由于如信號量這些同步手段都必須作為原子操作進行,不允許打斷。所以如果中斷發生在互鎖API的執行過程中,就需要專門的處理了。這些API都是放在INTERLOCKED_START和INTERLOCKED_END之間的,通過LR很容易就檢查出是否是INTERLOCKEDXXX的過程中。這里并不關心互鎖的實現就繞開這部分代碼繼續往下看,當作中斷沒有發生在interlock過程處理。
        ;
        ; CAREFUL! The stack frame is being altered here. It's ok since
        ; the only routine relying on this was the Interlock Check. Note that
        ; we re-push LR onto the stack so that the incoming argument area to
        ; OEMInterruptHandler will be correct.
        ;
        mrs     r1, spsr                        ; (r1) = saved status reg
        stmfd   sp!, {r1}                       ; save SPSR onto the IRQ stack   
        mov     r0,lr                           ; parameter to OEMInterruptHandler
     msr     cpsr_c, #SVC_MODE:OR:0x80       ; switch to supervisor mode w/IRQs disabled
        stmfd   sp!, {lr}                       ; save LR onto the SVC stack       
        stmfd   sp!, {r0}                       ; save IRQ LR (in R0) onto the SVC stack (param)
        ;
        ; Now we call the OEM's interrupt handler code. It is up to them to
        ; enable interrupts if they so desire. We can't do it for them since
        ; there's only on interrupt and they haven't yet defined their nesting.
        ;

        CALL    OEMInterruptHandler

        ldmfd   sp!, {r1}                       ; dummy pop (parameter)
        ldmfd   sp!, {lr}                       ; restore SVC LR from the SVC stack
        msr     cpsr_c, #IRQ_MODE:OR:0x80       ; switch back to IRQ mode w/IRQs disabled
    ; Restore the saved program status register from the stack.
        ;
        ldmfd   sp!, {r1}                       ; restore IRQ SPSR from the IRQ stack
        msr     spsr, r1                        ; (r1) = saved status reg
        ldr     lr, =KData                      ; (lr) = ptr to KDataStruct
       
       
        cmp     r0, #SYSINTR_RESCHED      ;->時間片已到,進行調度
        beq     %F10           
        ;SYSINTR_DEVICES EQU 8         ;是否設備中斷,中斷號是否有效
    ;SYSINTR_MAX_DEVICES EQU 32   
        sub     r0, r0, #SYSINTR_DEVICES
        cmp     r0, #SYSINTR_MAX_DEVICES
                            ;由此可以看出windowsCE的系統中斷號最大支持32種從9-40.
                            ;其中第16號(24)被定義為SYSINTR_FIRMWARE
        ; If not a device request (and not SYSINTR_RESCHED)
       
        ldrhsb  r0, [lr, #bResched]             ; (r0) = reschedule flag
        bhs     %F20                            ; not a device request
       
        ;PendEvents  EQU 0x340             ; offset 0x10*sizeof(DWORD) of aInfo
                            ;device 中斷
        ldr     r2, [lr, #PendEvents]           ; (r2) = pending interrupt event mask
        mov     r1, #1
        orr     r2, r2, r1, LSL r0              ; (r2) = new pending mask
        str     r2, [lr, #PendEvents]           ; save it
    ;*PendEvents = *PendEvents|(1<        ;

#p#

 ; mark reschedule needed
                            ;情況1:r0=SYSINTR_RESCHED=1
                            ;情況2: r0 =r0-SYSINTR_DEVICES>=SYSINTR_MAX_DEVICES       
10      ldrb    r0, [lr, #bResched]             ; (r0) = reschedule flag
        orr     r0, r0, #1                      ; set "reschedule needed bit"
        strb    r0, [lr, #bResched]             ; update flag

20      mrs     r1, spsr                        ; (r1) = saved status register value

        and     r1, r1, #0x1F                   ; (r1) = interrupted mode
        cmp     r1, #USER_MODE                  ; previously in user mode?
        cmpne   r1, #SYSTEM_MODE                ; if not, was it system mode?
        cmpeq   r0, #1                          ; user or system: is resched == 1
        ;if(SytemMode(spsr)||UserMode(spsr))&&r0!=1) return;
        ldmnefd sp!, {r0-r3, r12, pc}^          ; can't reschedule right now so return
  *************************************************************************************
        sub     lr, lr, #4
        ldmfd   sp!, {r0-r3, r12}
        stmdb   lr, {r0-r3}
        ldmfd   sp!, {r0}
        str     r0, [lr]                        ; save resume address
        mov     r1, #ID_RESCHEDULE              ; (r1) = exception ID
        b       CommonHandler
        ENTRY_END IRQHandler
    將spsr_irq壓入IRQ堆棧保存。為調用OEMInterruptHandler作準備。(通常中斷處理程序切換入系統態執行的目的在于避免使用終端模式下的寄存器,以方便是實現終端套嵌,這兒切入系統態時終端使能是關閉的,對于模態切換的原因我很迷惑。)OEMInterrupt需要在特權模式下執行,所以這里增加了切換入特權(SVC)模式的內容。緊接著將要用與傳遞參數的寄存器保存。設定傳入參數,r0就可以開始調用OEMInterruptHandler了,這里的調用規則遵循windowsCE的規范而不是ATPCS的規范。具體過程參考arm Parameter Passing@msdn。下面是函數原形。int OEMInterruptHandler(unsigned int ra);這里傳入的參數就是上面的r0,事實上r0代表的參數ra并沒有實質的作用在這里僅僅是形式上的實現一下而已,不過在這兒可以看到這個傳入的ra實際上就是被中斷的地址,如果需要知道被中斷的位置可以通過ra來查詢,而msdn里面說這個參數是保留的。返回的參數也是保存在r0中。其中返回值是系統中斷類型。其中SYSINTR_RESCHED為系統時鐘中斷,每次時間片用完,該時鐘便產生中斷,并設置kData結構的bResched位,進入調度流程。如果中斷類型是系統設備中斷,那就設置PendEvents,待再次調度的時候處理中斷。所以OEMInterruptHandler必須提前就要對中斷進行響應對該中斷源設置mask,防止在這過程中同一中斷不停發生,導致中斷飽和影響程序流的執行,直道中斷處理真正完成后再次開放該中斷的mask。在這里還可以看到的是系統設備中斷號的范圍是從SYSINTR_DEVICES到SYSINTR_MAX_DEVICES,也就是從9-40一共32個設備中斷號,其中SYSINTR_FIRMWARE為8+16號,這個在編寫OAL的中斷服務程序時需要注意。如果當前的返回值既不是設備中斷號又不是調度中斷號,則讀出當前調度標示,根據該標示進行判斷是否調度/或返回.如果是進入調度流程則恢復初始的寄存器狀態,再按CommonHandler的要求保存寄存器。進入CommonHandler,等待分發。
   
2-3 FIQ服務程序
        照例看看程序
        NESTED_ENTRY FIQHandler
        sub     lr, lr, #4                      ; fix return address
        stmfd   sp!, {r0-r3, r12, lr}
        PROLOG_END
        CALL    OEMInterruptHandlerFIQ
        ldmfd   sp!, {r0-r3, r12, pc}^          ; restore regs & return for NOP
        ENTRY_END FIQHandler
        LTORG

FIQ是arm體系下特有的異常方式,其工作過程與IRQ類似都是由外部引腳觸發但設計用途不同,IRQ用于通常的外部中斷源的處理,是作為統一、通用的與外部器件交互的手段,而IRQ僅僅用于處理周期短同時又需要快速處理的場合其觸發的事件源通常也來此外部FIQ中斷。如:更換電池、數據傳輸這類工作??上攵狥IQ講究的是快速,精干。因此FIQ服務程序通常沒有分發,而僅僅是針對單一的工作進行處理保證處理的實時性。因此FIQ的處理相對IRQ就簡單很多,直接調用OEMInterruptHandlerFIQ進行處理后返回就完成了整個 FIQ服務程序。

【編輯推薦】

  1. Windows CE下驅動開發基礎
  2. WinCE電源管理應對移動嵌入式能耗瓶頸
  3. Windows CE在嵌入式工業中的應用思考
責任編輯:book05 來源: chinaitlab
相關推薦

2009-07-23 14:08:46

Windows Emb

2009-05-11 09:19:35

微軟SQL Server Codesmith

2009-07-17 13:42:36

Windows CE應WinCE可移植性

2009-07-03 16:48:05

Windows CE

2010-04-21 13:22:20

Windows CE

2024-07-09 17:09:49

C#開發Windows窗體

2011-06-27 09:49:53

Windows CEAndroid

2011-08-01 16:52:42

Windows CE 嵌入式

2009-08-17 09:57:00

C# Windows

2010-05-10 09:21:46

2011-09-20 09:38:13

Windows 8安全模式

2009-05-28 13:27:33

Windows CE

2010-01-06 10:08:16

Boot Loader

2009-08-14 15:19:38

Windows服務程序Windows服務

2010-05-05 13:16:02

Windows PhoWindows CE

2018-04-19 08:40:37

OracleJOB異常中斷

2024-09-26 10:51:51

2010-03-31 16:36:35

Windows CE

2009-04-11 15:12:24

Windows CE串行通信GPS

2009-04-22 17:18:29

WindowsCEVistaXP
點贊
收藏

51CTO技術棧公眾號

91综合精品国产丝袜长腿久久| 日韩一级片中文字幕| 欧美伊人亚洲伊人色综合动图| 中文字幕一区二区三区不卡| 成人h视频在线观看| 国产乡下妇女做爰视频| 国产免费播放一区二区| 在线不卡免费欧美| 人人妻人人添人人爽欧美一区| 国产三区四区在线观看| 久久精品99国产精品| 欧美激情videos| 免费污网站在线观看| 亚洲国产精品www| 91丨九色丨丰满| 9999在线视频| 色豆豆成人网| 久久久久久久久99精品| 成人免费观看a| 日韩和一区二区| 婷婷综合久久| 亚洲欧美日韩网| 无码人妻少妇色欲av一区二区| 国模冰冰炮一区二区| 一区二区三区美女视频| 天堂资源在线亚洲视频| 性感美女视频一二三| 国产在线播放一区| 国产精品久久久久久av福利| 日韩av电影网| 一区二区三区午夜探花| 中文字幕亚洲一区在线观看| yy1111111| 一级毛片精品毛片| 日韩一区二区免费在线观看| 狠狠操精品视频| 高清在线视频不卡| 亚洲精品videosex极品| 一区不卡视频| 99中文字幕一区| 久久久电影一区二区三区| 久久精品国产一区二区三区日韩 | 欧美这里有精品| 成人在线免费观看av| 国产亚av手机在线观看| 亚洲精品免费在线播放| 久久观看最新视频| 国产激情在线视频| 日韩一区在线看| 亚洲欧美日韩精品综合在线观看| 免费a级毛片在线观看| 99久久久无码国产精品| 国产原创精品| 五月婷婷免费视频| 99久久夜色精品国产网站| 国产精品久久久久久久小唯西川 | 国产福利一区二区三区视频在线| 成人福利在线观看| 国产视频一区二区三| 狠狠网亚洲精品| 成人精品aaaa网站| 国产黄色片免费| 丁香桃色午夜亚洲一区二区三区| 国产高清自拍99| 免费观看黄色一级视频| 成人成人成人在线视频| 国产呦系列欧美呦日韩呦| 色久视频在线播放| 久久久精品国产免费观看同学| 欧美一卡2卡3卡4卡无卡免费观看水多多| 男人天堂亚洲二区| 欧美国产禁国产网站cc| 亚洲精品一区二区三| 日本激情视频在线观看| 一级日本不卡的影视| 黄色一级片在线看| 亚洲天堂av影院| 色综合久久精品| 色片在线免费观看| 亚洲成人偷拍| 日韩av在线不卡| 少妇无套高潮一二三区| 偷拍欧美精品| 欧美精品18videosex性欧美| 青青草免费观看视频| 免费观看日韩电影| 91精品国自产在线观看 | 日韩五码电影| 精品国产亚洲在线| 久久国产柳州莫菁门| 一区二区不卡| 日本aⅴ大伊香蕉精品视频| 在线播放成人av| 成人激情黄色小说| 天天综合狠狠精品| 牛牛电影国产一区二区| 91国内精品野花午夜精品| 999在线精品视频| 日韩极品少妇| 伦理中文字幕亚洲| 久久久女人电视剧免费播放下载 | 日韩黄色在线| 欧美mv日韩mv亚洲| 日本黄色小视频在线观看| 久久久久久久久久久妇女| 久久青草福利网站| 在线免费观看av网址| 国产69精品久久久久777| 欧美日韩国产不卡在线看| 国产在线高清视频| 日韩欧美精品免费在线| 久久综合在线观看| 欧美人与拘性视交免费看| 久久6免费高清热精品| 免费污污视频在线观看| 国产成人免费视频网站| 日韩欧美视频第二区| 国产羞羞视频在线播放| 欧美日韩一二三| 真人bbbbbbbbb毛片| 亚洲国产一区二区三区在线播放 | 99精品人妻国产毛片| 国产福利一区二区三区在线视频| 亚洲国产欧美不卡在线观看| 国产亚洲成av人片在线观看| 欧美一区二区三区公司| www.日本高清视频| 久久精品国产清高在天天线| 成人动漫视频在线观看免费| 免费观看在线午夜影视| 色999日韩国产欧美一区二区| 中文字幕99页| 亚洲九九视频| 成人免费看吃奶视频网站| 国产三级视频在线| 天天做天天摸天天爽国产一区| 熟妇女人妻丰满少妇中文字幕| 日韩一区二区在线| 国产精品国产福利国产秒拍| 天天摸天天碰天天爽天天弄| 亚洲午夜电影网| 色网站在线视频| 日韩在线观看| 国产精品日韩久久久久| 神马亚洲视频| 精品久久久久久亚洲国产300| 91 com成人网| 韩国三级视频在线观看| 欧美不卡视频| 亚洲va欧美va国产综合久久| 五月天婷婷在线视频| 欧美日韩一级二级| 5566中文字幕| 国内外成人在线| 只有这里有精品| 精品国产亚洲一区二区三区| 操日韩av在线电影| 国产日韩在线观看一区| ...av二区三区久久精品| 亚洲黄色片网站| 中文字幕 欧美 日韩| 欧美1区视频| 成人区精品一区二区| 丁香花视频在线观看| 精品久久久久久久久久久久包黑料| 国产亚洲精品久久久久久无几年桃 | 亚洲午夜国产成人| 久久影院中文字幕| 亚洲AV无码成人片在线观看 | 成年人晚上看的视频| 国产午夜精品在线观看| www亚洲成人| 亚洲五月综合| 国产日韩三区| 综合在线影院| 日韩中文字在线| 精品国产九九九| 午夜av一区二区三区| www在线观看免费视频| 麻豆精品视频在线观看视频| 法国空姐在线观看免费| 成人性生交大片免费看96| 亲子乱一区二区三区电影| 在线免费黄色| 日韩欧美第一区| 国产高潮久久久| 中日韩免费视频中文字幕| 国产精品探花在线播放| 夜久久久久久| 自拍偷拍99| 国产无遮挡在线观看| 亚洲美女少妇无套啪啪呻吟| 欧美性大战久久久久| 伊人亚洲精品| 日韩毛片高清在线播放| 久久久久久久久久婷婷| 亚洲精品字幕在线| 91电影在线观看| 久草视频在线资源站| 久久精品欧美日韩| xxx中文字幕| 天堂影院一区二区| 免费观看亚洲视频| 成人高清电影网站| 国产在线精品一区二区三区》| 成人看片网站| 韩国国内大量揄拍精品视频| 日韩美女网站| 日韩av综合中文字幕| 一级片视频网站| 黑人极品videos精品欧美裸| 午夜69成人做爰视频| 国产视频911| 亚洲精品乱码久久久久久蜜桃图片| 毛片不卡一区二区| www一区二区www免费| 欧美高清日韩| 亚洲精品一区二| 中文字幕亚洲影视| 国产精品久久7| 2019中文亚洲字幕| 国产精品电影网| 色吧亚洲日本| 欧美精品激情视频| 国产精品一区二区三区视频网站| 亚洲人成电影网站色www| 女人18毛片一区二区三区| 69堂精品视频| 亚洲自拍偷拍另类| 欧洲国内综合视频| 特级西西444www大精品视频免费看| 亚洲综合丝袜美腿| 青青草原在线免费观看| 国产精品不卡视频| 国产综合精品久久久久成人av| 91在线你懂得| 少妇激情一区二区三区视频| 国产不卡视频一区| 特种兵之深入敌后| 激情综合五月婷婷| 国产乱女淫av麻豆国产| 麻豆国产欧美一区二区三区| www日韩视频| 三级精品在线观看| 无码aⅴ精品一区二区三区浪潮| 亚洲乱码久久| 国产综合av在线| 国产精品美女| 国产福利视频在线播放| 母乳一区在线观看| 那种视频在线观看| 久久久久国产精品午夜一区| 日本在线视频www| 日韩精品一二三| 国产aaaaa毛片| 美女mm1313爽爽久久久蜜臀| 欧美在线aaa| 狠狠色丁香婷婷综合久久片| www.五月天色| 国产成人免费视频一区| 丰满少妇xbxb毛片日本| 波多野结衣精品在线| 欧美 日本 国产| 久久久另类综合| 免费在线观看a视频| 国产精品伦理一区二区| tube国产麻豆| 性做久久久久久免费观看| 国产成人亚洲欧洲在线| 在线精品亚洲一区二区不卡| 欧美 亚洲 另类 激情 另类| 7777精品伊人久久久大香线蕉完整版| av免费观看在线| 亚洲成人a**站| 青青操视频在线| 正在播放欧美视频| 国产二区三区在线| 久久久久国产一区二区三区| 性感女国产在线| 国产精品电影网| www一区二区三区| 国产三区精品| 欧美一区三区| 一区二区三区四区免费观看| 尤物在线精品| 午夜精品在线免费观看| 国产麻豆视频一区| 美女又爽又黄视频毛茸茸| 国产精品久久久久影院亚瑟| 免费日韩在线视频| 色欧美片视频在线观看| 99国产精品欲| 亚洲欧洲成视频免费观看| 成人影院在线看| 91精品国产精品| 韩国精品视频在线观看| 91影院在线免费观看视频| 久久九九精品视频| 日本在线成人一区二区| 国产精品分类| 手机在线成人免费视频| av动漫一区二区| 老司机成人免费视频| 一道本成人在线| 精品国产伦一区二区三区| 国产亚洲精品久久久久动| 亚洲电影视频在线| 国产精品视频网| 久久精品福利| 免费的一级黄色片| 欧美色图五月天| 1024亚洲合集| 国产一区精品在线| 日韩丝袜视频| 先锋影音男人资源| 另类色图亚洲色图| 伊人久久视频| 99蜜桃在线观看免费视频网站| 亚洲最好看的视频| 亚洲爆乳无码精品aaa片蜜桃| 日产国产高清一区二区三区| 中文乱码人妻一区二区三区视频| 18成人在线视频| 中文 欧美 日韩| 国产午夜精品麻豆| 国产美女情趣调教h一区二区| 国产欧美精品日韩| 国产一区二区三区日韩精品| 国产精品12345| 粉嫩aⅴ一区二区三区四区五区| 欧美视频一区二区在线| 欧洲精品中文字幕| 国产毛片在线| 日本精品久久久| 欧美色资源站| 日本免费不卡一区二区| 成人黄色在线网站| 久久久久久久蜜桃| 日韩欧美综合一区| av网站在线免费看推荐| 国产在线a不卡| 欧美激情欧美| 岛国av在线免费| 成人欧美一区二区三区在线播放| 国产成人av免费| 亚洲天堂日韩电影| 日韩精品影院| 偷拍视频一区二区| 青青草原综合久久大伊人精品优势 | 91麻豆精品久久久久蜜臀| 色多多视频在线观看| 国产欧美日韩精品在线观看| 三级电影一区| 天天干天天色天天干| 亚洲日本一区二区三区| 国产高清精品软件丝瓜软件| 欧美成人中文字幕| 一区二区中文字幕在线观看| 久久久久久久9| 成人免费电影视频| 可以免费在线观看的av| 亚洲欧洲免费视频| 国产成人精选| 免费观看中文字幕| 国产成人免费网站| 国产精品男女视频| 国产亚洲人成网站在线观看| 久久精品国产精品亚洲毛片| av不卡在线免费观看| 国产精品一区三区| 日本一区二区不卡在线| 国产午夜精品久久久 | 99在线热播| 99日韩精品| 丰满的亚洲女人毛茸茸| 91精品国产入口| 91吃瓜在线观看| 日本视频一区二区在线观看| 久久99蜜桃精品| 久久精品99久久久久久| 日韩麻豆第一页| 日本一区二区三区中文字幕| www.夜夜爱| 久久先锋影音av鲁色资源网| 一级黄色免费片| 国自产精品手机在线观看视频| 制服丝袜日韩| 久久出品必属精品| 色婷婷综合久久久久中文一区二区 | av一二三不卡影片| 中文字幕av影视| 欧美激情乱人伦一区| 国内精品久久久久久久久电影网| 一级黄色高清视频| 色婷婷一区二区| 2025国产精品自拍| 日韩电影在线一区二区| 国产极品视频在线观看| 亚洲成人动漫在线播放| www.26天天久久天堂|