精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

久久午夜影视| 婷婷激情久久| 亚洲444eee在线观看| 国产欧美韩日| 夜夜躁日日躁狠狠久久av| 日韩欧美精品| 精品久久久久久久久久久久久久久| www.射射射| 国产精品99999| 国产一区二区不卡老阿姨| 97精品一区二区视频在线观看| 久久精品成人av| 欧美视频免费看| 亚洲精品第1页| 欧美福利一区二区三区| 97人妻人人澡人人爽人人精品| 狠狠干综合网| 中文字幕亚洲无线码a| 性高潮免费视频| 日韩一区精品| 午夜视频在线观看一区二区| 亚洲一卡二卡区| 四虎电影院在线观看| 国产在线不卡视频| 国产精品v日韩精品| 久久久久亚洲av无码专区 | 日韩女同一区二区三区| 秋霞影院一区| 欧美日韩黄色一区二区| 男人揉女人奶房视频60分| 97超碰资源站在线观看| 国产欧美精品日韩区二区麻豆天美| av在线亚洲男人的天堂| 91精品中文字幕| 久久久www| 538国产精品一区二区在线 | 亚洲清纯自拍| 欧美刺激性大交免费视频| 在线观看日本黄色| 国产欧美日韩在线观看视频| 日韩精品福利在线| 国产高清成人久久| 亚洲午夜免费| 日韩欧美亚洲国产精品字幕久久久| 国产日韩成人内射视频| 亚洲少妇视频| 欧美日韩亚洲国产一区| 亚洲 欧美 日韩 国产综合 在线| 深夜国产在线播放| 亚洲乱码国产乱码精品精可以看 | 亚洲久久一区二区| 欧美激情精品久久久久久免费印度 | 69xxxx国产| 午夜一区不卡| 日韩av成人在线| 国产91精品看黄网站在线观看| 一区二区日本视频| 97在线免费观看视频| 一级aaa毛片| 亚洲欧洲视频| 国产a∨精品一区二区三区不卡| 久久亚洲精品国产| 视频一区欧美日韩| 国产精品久久不能| 91麻豆国产在线| 国产伦精品一区二区三区免费迷| 亚洲曰本av电影| 亚洲毛片在线播放| www.99精品| 欧美一区二区视频17c| 浮生影视网在线观看免费| 国产精品丝袜一区| 在线视频一二三区| 99久久一区三区四区免费| 日韩国产成人在线| 精品中文字幕一区二区| 97人人模人人爽人人少妇| 人妻精品一区二区三区| 久久久亚洲欧洲日产国码αv| 日韩欧美视频一区二区| 婷婷成人激情| 一区二区三区不卡视频 | 亚洲日本欧美| 51ⅴ精品国产91久久久久久| 中文在线a天堂| 国产精品 日产精品 欧美精品| 懂色中文一区二区三区在线视频 | 99视频精品免费视频| 欧美一区二区福利| 成人免费网址| 五月综合激情婷婷六月色窝| 搡女人真爽免费午夜网站| 超碰国产精品一区二页| 亚洲黄一区二区| www.涩涩爱| 亚洲国产精品一区| 国产精品你懂得| 亚洲精品成人电影| 国产欧美日韩不卡| 欧美一区二区激情| 成人国产一区| 亚洲国产欧美一区二区三区同亚洲 | 欧美精品卡一卡二| 国产欧美在线观看免费| 亚洲高清免费观看高清完整版| 精品无码人妻一区二区免费蜜桃| 女同性一区二区三区人了人一| 欧美一区视频在线| 精品人妻一区二区三区浪潮在线 | 精品国产成人在线影院 | 亚洲尤物在线视频观看| 欧美成人黑人猛交| 97色成人综合网站| 久久精品国产久精国产思思| 国产99久久久| 高清免费成人av| 在线视频不卡国产| 性欧美18~19sex高清播放| 日韩一区二区在线观看视频| 美女100%露胸无遮挡| 日韩一区二区久久| www.成人三级视频| 黄色小网站在线观看| 色网站国产精品| 国产毛片毛片毛片毛片毛片毛片| 久久久久电影| 国产日韩在线观看av| 日韩av地址| 香蕉乱码成人久久天堂爱免费| 久久婷婷中文字幕| 色呦哟—国产精品| 国产精品高潮在线| 欧美zozo| 欧美性生活大片免费观看网址| 久久久久无码国产精品一区李宗瑞| 久久精品影视| 成人午夜黄色影院| 免费网站看v片在线a| 欧美日韩一级黄| 熟女少妇内射日韩亚洲| 亚洲欧美日韩在线观看a三区| 国产伦精品一区二区三区照片 | 日韩免费观看av| 同心难改在线观看| 精品久久久久久久久国产字幕 | 欧美福利视频网站| 国产成人精品亚洲精品色欲| 亚洲日本丝袜连裤袜办公室| 香蕉视频999| 99久久综合狠狠综合久久aⅴ| 国产精品入口尤物| 午夜视频在线看| 欧美另类变人与禽xxxxx| 一本一本久久a久久| 老司机午夜精品99久久| 一区二区免费在线观看| 91成人短视频在线观看| 欧美精品中文字幕一区| 性生活视频软件| 亚洲国产精品嫩草影院| 久久久久成人精品无码中文字幕| 亚洲国产高清一区| 鲁丝片一区二区三区| 在线看片福利| 在线中文字幕日韩| 国产男女无套免费网站| 亚洲一二三四在线| 日b视频在线观看| 香蕉久久夜色精品国产| 日韩国产一区久久| 亚洲青青久久| 久久99精品久久久久久青青91| 可以免费观看的毛片| 欧美香蕉大胸在线视频观看| 熟女少妇内射日韩亚洲| 国产精品资源在线看| 国产视频九色蝌蚪| 日韩av自拍| 91精品久久香蕉国产线看观看| www成人免费观看| 国产亚洲视频在线| www.黄色片| 一本一道综合狠狠老| 免费看一级黄色| 国产不卡一区视频| 妞干网在线免费视频| 五月精品视频| 久久久久天天天天| 亚洲tv在线| 韩国福利视频一区| av资源网在线观看| 精品久久久久久综合日本欧美| 久久精品无码av| 亚洲六月丁香色婷婷综合久久| aaaa黄色片| 精品无人区卡一卡二卡三乱码免费卡 | 婷婷成人激情| 日韩av网址在线| 国产又粗又大又爽| 亚洲二区在线视频| 欧美88888| 91丨九色丨尤物| 最新免费av网址| 美女精品在线观看| 黄色特一级视频| 黑丝美女一区二区| 国产一区免费在线| 日韩久久一区| 日韩av电影手机在线| 中文字幕在线观看播放| 一色桃子一区二区| 色综合久久久久久| 欧美一区欧美二区| 中文字幕在线视频第一页| 精品成人国产在线观看男人呻吟| 亚洲人与黑人屁股眼交| 国产亚洲精品资源在线26u| 黑人无套内谢中国美女| 免费亚洲电影在线| 激情婷婷综合网| 亚洲国产99| 欧美一级免费播放| 91精品久久久久久久蜜月| 台湾成人av| 久久综合欧美| 久久亚洲国产精品日日av夜夜| 亚洲五码在线| 成人18视频| 国产精品99久久免费| 国产欧美一区二区三区久久| 精品国产第一福利网站| 91成人国产在线观看| 超碰在线资源| 久久久人成影片一区二区三区观看 | 试看120秒一区二区三区| 国产在线精品一区免费香蕉| 日本欧美一区| 国产精品av电影| 桃花岛tv亚洲品质| 国产99久久久欧美黑人| 欧美精品日日操| 国产999视频| 欧洲成人一区| 国产精品久久久久久久久男| 亚洲第一影院| 国产精品视频免费观看www| 国产麻豆久久| 国产精品入口尤物| 欧美aaaaaa| 成人在线免费观看视视频| 一区在线不卡| 91青青草免费在线看| 亚洲综合网站| 国产一级精品aaaaa看| 国语一区二区三区| 国产精品一区在线播放| 女仆av观看一区| 欧美成人免费在线| 欧美一区二区三区激情视频| 亚洲精品影院| 亚洲一级淫片| 欧美在线一区视频| 久久九九电影| 国产精品久久久毛片| 精品中文字幕一区二区小辣椒| 在线视频观看一区二区| 成人在线视频一区| 毛茸茸多毛bbb毛多视频| 久久久99精品久久| 日本少妇aaa| 亚洲一区二区三区视频在线播放 | 免费看电影在线| 97在线视频免费看| 免费在线观看一区| 成人在线激情视频| 日韩av午夜| 一区二区精品在线观看| 国产精品草草| 免费黄色特级片| 国精产品一区一区三区mba视频 | 西瓜成人精品人成网站| 日韩国产精品一区二区| 欧美涩涩视频| 丁香婷婷激情网| 国产福利一区二区三区视频 | 不卡的在线视频| 国产日产精品一区二区三区四区的观看方式 | 亚洲欧美综合v| 中文日本在线观看| 欧美黑人巨大精品一区二区| 搜成人激情视频| 亚洲一区二区三区乱码aⅴ| 卡通动漫国产精品| 亚洲一区二区免费视频软件合集| 欧美另类视频| 亚洲免费av一区二区三区| 国产成人激情av| 成人做爰69片免网站| 亚洲一区二区美女| 一区二区视频免费| 亚洲精品综合久久中文字幕| 精品黄色免费中文电影在线播放| 91大神在线播放精品| 久久久久毛片免费观看| 日本10禁啪啪无遮挡免费一区二区| 中文字幕一区二区三区乱码图片 | 亚洲一区二区三区色| 中文亚洲字幕| 超碰在线超碰在线| 国产三级一区二区| 久久9999久久免费精品国产| 欧美日韩三级一区| 日本一区二区三区在线观看视频| 欧美精品在线观看| 99久久99九九99九九九| 日韩中文一区| 国产精品综合色区在线观看| 免费看三级黄色片| 亚洲欧洲日韩综合一区二区| 亚洲黄色免费观看| 亚洲国产日韩一区| av观看在线| 91亚洲va在线va天堂va国| 欧美日韩一区二区综合| 妺妺窝人体色www在线小说| 国产成人午夜视频| 午夜三级在线观看| 欧美午夜不卡视频| 国内精品一区视频| 欧美洲成人男女午夜视频| 欧美日韩精品一区二区三区在线观看| 亚洲天堂第一区| 国产在线精品免费av| 天堂а√在线中文在线鲁大师| 91久久香蕉国产日韩欧美9色| 污污网站在线免费观看| 韩国v欧美v日本v亚洲| 国产亚洲精品美女久久| 男女日批视频在线观看| 成人在线一区二区三区| 国产污视频在线看| 亚洲精品一区二区三区99| 国产网红在线观看| 国产精品一区二区不卡视频| 韩国欧美一区| 182在线视频| 色综合久久久久综合99| 欧美高清成人| 国产精品免费电影| 91视频精品| 激情成人在线观看| 1000部国产精品成人观看| 国产欧美综合视频| 欧美激情精品久久久| 久久视频在线观看| 动漫av网站免费观看| 国产亚洲欧美日韩俺去了| 国产女优在线播放| 久久精品国产久精国产一老狼| 国产美女视频一区二区| 日韩欧美精品免费| 91一区二区在线| 欧美日韩在线视频播放| 色777狠狠综合秋免鲁丝| 国产午夜久久av| 国产欧美日韩小视频| 久久综合给合久久狠狠狠97色69| 黄色av一级片| 日韩少妇与小伙激情| 午夜日韩影院| av免费观看网| 国产精品午夜久久| 成人黄色免费视频| 97香蕉久久超级碰碰高清版| 国产一区二区三区四区五区传媒| 欧美成人三级在线播放| 一区二区免费视频| 国产又爽又黄网站亚洲视频123| 国产精品老牛影院在线观看| 亚洲免费二区| 六十路息与子猛烈交尾| 欧美在线视频不卡| 最爽无遮挡行房视频在线| 久久涩涩网站| 极品美女销魂一区二区三区| 日韩欧美三级视频| 影音先锋欧美精品| 99re热精品视频| 日本熟妇人妻中出| 一区二区三区在线免费视频| 男女污污视频在线观看| 亚洲v日韩v综合v精品v| 久久激情久久| 五月天丁香激情| 亚洲欧洲午夜一线一品| 日韩欧美中文在线观看| 国产自偷自偷免费一区| 亚洲动漫第一页| a中文在线播放| 精品国产一二|