日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nucleus学习

發布時間:2024/3/12 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nucleus学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
task的TCB結構:
  • typedef struct TC_TCB_STRUCT
  • {
  • ????/* Standard thread information first. This information is used by
  • ???????the target dependent portion of this component. Changes made
  • ???????to this area of the structure can have undesirable side effects. */

  • ????CS_NODE tc_created; /* Node for linking to */ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //鏈接指向創建task鏈表
  • ???????????????????????????????????????????????/* created task list */
  • ????UNSIGNED tc_id; /* Internal TCB ID */
  • ????CHAR tc_name[NU_MAX_NAME]; /* Task name */
  • ????DATA_ELEMENT tc_status; /* Task status */
  • ????BOOLEAN tc_delayed_suspend; /* Delayed task suspension*/
  • ????DATA_ELEMENT tc_priority; /* Task priority */
  • ????BOOLEAN tc_preemption; /* Task preemption enable */ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//是否搶占
  • ????UNSIGNED tc_scheduled; /* Task scheduled count */
  • ????UNSIGNED tc_cur_time_slice; /* Current time slice */
  • ????VOID *tc_stack_start; /* Stack starting address */ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //棧起始地址
  • ????VOID *tc_stack_end; /* Stack ending address */
  • ????VOID *tc_stack_pointer; /* Task stack pointer */
  • ????UNSIGNED tc_stack_size; /* Task stack's size */
  • ????UNSIGNED tc_stack_minimum; /* Minimum stack size */
  • ????struct TC_PROTECT_STRUCT
  • ???????????????????????*tc_current_protect; /* Current protection */
  • ????VOID *tc_saved_stack_ptr; /* Previous stack pointer */
  • ????UNSIGNED tc_time_slice; /* Task time slice value */

  • ????/* Information after this point is not used in the target dependent
  • ???????portion of this component. Hence, changes in the following section
  • ???????should not impact assembly language routines. */
  • ????struct TC_TCB_STRUCT
  • ???????????????????????*tc_ready_previous, /* Previously ready TCB */ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //指向上一個TCB
  • ???????????????????????*tc_ready_next; /* next and previous ptrs */ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //指向下一個TCB

  • ????/* Task control information follows. */

  • ????UNSIGNED tc_priority_group; /* Priority group mask bit*/
  • ????struct TC_TCB_STRUCT
  • ??????????????????????**tc_priority_head; /* Pointer to list head */ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//指向TCB鏈表頭
  • ????DATA_ELEMENT *tc_sub_priority_ptr; /* Pointer to sub-group */
  • ????DATA_ELEMENT tc_sub_priority; /* Mask of sub-group bit */
  • ????DATA_ELEMENT tc_saved_status; /* Previous task status */
  • ????BOOLEAN tc_signal_active; /* Signal active flag */

  • #if PAD_3
  • ????DATA_ELEMENT tc_padding[PAD_3];
  • #endif

  • ???????????????????????????????????????????????/* Task entry function */
  • ????VOID (*tc_entry)(UNSIGNED, VOID *); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//task入口函數,下面是參數
  • ????UNSIGNED tc_argc; /* Optional task argument */
  • ????VOID *tc_argv; /* Optional task argument */
  • ????VOID (*tc_cleanup) (VOID *);/* Clean-up routine */
  • ????VOID *tc_cleanup_info; /* Clean-up information */
  • ????struct TC_PROTECT_STRUCT
  • ???????????????????????*tc_suspend_protect; /* Protection at time of */
  • ???????????????????????????????????????????????/* task suspension */

  • ????/* Task timer information. */ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//計時器
  • ????INT tc_timer_active; /* Active timer flag */
  • ????TM_TCB tc_timer_control; /* Timer control block */

  • ????/* Task signal control information. */

  • ????UNSIGNED tc_signals; /* Current signals */
  • ????UNSIGNED tc_enabled_signals; /* Enabled signals */

  • ????/* tc_saved_status and tc_signal_active are now defined above in an
  • ???????attempt to keep DATA_ELEMENT types together. */

  • ????/* Signal handling routine. */ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //signal中斷處理?
  • ????VOID (*tc_signal_handler) (UNSIGNED);

  • ????/* Reserved words for the system and a single reserved word for the
  • ???????application. */
  • ????UNSIGNED tc_system_reserved_1; /* System reserved word */
  • ????UNSIGNED tc_system_reserved_2; /* System reserved word */
  • ????UNSIGNED tc_system_reserved_3; /* System reserved word */
  • ????UNSIGNED tc_app_reserved_1; /* Application reserved */

  • ????/* This information is accessed in assembly */
  • #if ((NU_SUPERV_USER_MODE == 1)||(NU_MODULE_SUPPORT == 1))
  • ????UNSIGNED tc_su_mode; /* Supervisor/User mode indicator */
  • ????UNSIGNED tc_module; /* Module identifier */
  • #endif

  • } TC_TCB;
  • TCC創建任務函數:
  • STATUS TCC_Create_Task(NU_TASK *task_ptr, CHAR *name,
  • ??????????VOID (*task_entry)(UNSIGNED, VOID *), UNSIGNED argc, VOID *argv,
  • ??????????VOID *stack_address, UNSIGNED stack_size,
  • ??????????OPTION priority, UNSIGNED time_slice,
  • ??????????OPTION preempt, OPTION auto_start)
  • {

  • R1 TC_TCB *task; /* Task control block ptr */
  • R2 INT i; /* Working index variable */
  • STATUS status = NU_SUCCESS;

  • NU_SUPERV_USER_VARIABLES

  • ????/* Switch to supervisor mode */
  • ????NU_SUPERVISOR_MODE();

  • ????/* Move input task pointer into internal pointer. */
  • ????task = (TC_TCB *) task_ptr;


  • #ifdef NU_ENABLE_STACK_CHECK

  • ????/* Call stack checking function to check for an overflow condition. */
  • ????TCT_Check_Stack();

  • #endif

  • #ifdef NU_ENABLE_HISTORY

  • ????/* Make an entry that corresponds to this function in the system history
  • ???????log. */
  • ????HIC_Make_History_Entry(NU_CREATE_TASK_ID, (UNSIGNED) task,
  • ????????????????????????????????(UNSIGNED) name, (UNSIGNED) task_entry);

  • #endif

  • ????/* First, clear the task ID just in case it is an old Task
  • ???????Control Block. */
  • ????task -> tc_id = 0;

  • ????/* Fill in the task name. */
  • ????for (i = 0; i < NU_MAX_NAME; i++)
  • ????????task -> tc_name[i] = name[i];

  • ????/* Fill in the basic task information. */
  • ????task -> tc_entry = task_entry;
  • ????task -> tc_argc = argc;
  • ????task -> tc_argv = argv;
  • ????task -> tc_status = NU_PURE_SUSPEND; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //這里設定為pure_suspend,完全掛起。如果設定auto_start,調用resume_task()喚醒task
  • ????task -> tc_delayed_suspend = NU_FALSE;
  • ????task -> tc_scheduled = 0;
  • ????task -> tc_time_slice = time_slice;
  • ????task -> tc_cur_time_slice = time_slice;
  • ????task -> tc_current_protect = NU_NULL;
  • ????task -> tc_suspend_protect = NU_NULL;
  • ????task -> tc_cleanup = NU_NULL;
  • ????task -> tc_cleanup_info = NU_NULL;

  • ????/* Setup task's preemption posture. */
  • ????if (preempt == NU_PREEMPT)
  • ????????task -> tc_preemption = NU_TRUE;
  • ????else
  • ????????task -> tc_preemption = NU_FALSE;

  • ????/* Fill in information about the task's stack. */
  • ????task -> tc_stack_start = stack_address;
  • ????task -> tc_stack_end = 0;
  • ????task -> tc_stack_size = stack_size;
  • ????task -> tc_stack_minimum = stack_size;

  • ????/* Setup priority information for the task. There are two bit maps
  • ???????associated with each task. The first bit map indicates which group
  • ???????of 8-priorities it is. The second bit map indicates the actual
  • ???????priority within the group. */
  • ????task -> tc_priority = priority; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
  • ????task -> tc_priority_head = &(TCD_Priority_List[priority]); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//這里掛載進TCB雙向鏈表指針
  • ????task -> tc_sub_priority = (DATA_ELEMENT) (1 << (priority & 7));
  • ????priority = priority >> 3;
  • ????task -> tc_priority_group = ((UNSIGNED) 1) << priority;
  • ????task -> tc_sub_priority_ptr = &(TCD_Sub_Priority_Groups[priority]);

  • ????/* Initialize link pointers. */
  • ????task -> tc_created.cs_previous = NU_NULL;
  • ????task -> tc_created.cs_next = NU_NULL;
  • ????task -> tc_ready_previous = NU_NULL;
  • ????task -> tc_ready_next = NU_NULL;

  • ????/* Build a stack frame for this task by calling TCT_Build_Task_Stack. */
  • ????TCT_Build_Task_Stack(task);

  • ????/* Initialize the signal information of the task. */
  • ????task -> tc_signals = 0;
  • ????task -> tc_enabled_signals = 0;
  • ????task -> tc_signal_handler = 0;
  • ????task -> tc_signal_active = NU_FALSE;
  • ????/* Initialize additional kernel options data */

  • #if (NU_SUPERV_USER_MODE == 1)
  • ????task->tc_su_mode = 0; /* Initially in User mode */
  • ????task->tc_module = 0; /* Not initially bound to a module */
  • #endif

  • ????/* Initialize the task timer. */
  • ????task -> tc_timer_active = NU_FALSE;
  • ????TMC_Init_Task_Timer(&(task -> tc_timer_control), (VOID *) task);

  • ????/* Protect the list of created tasks. */
  • ????TCT_Protect(&TCD_List_Protect);

  • ????/* At this point the task is completely built. The ID can now be
  • ???????set and it can be linked into the created task list. */
  • ????task -> tc_id = TC_TASK_ID;

  • #if defined(NU_MODULE_SUPPORT) && (NU_MODULE_SUPPORT > 0)
  • ????/* If executing in a thread's context, bind to that thread's module */
  • ????if(TCD_Current_Thread != NU_NULL)
  • ????{
  • ????????status = MSC_Bind_Module_Task(
  • ??????????(MS_MODULE*)(((TC_TCB*)(TCD_Current_Thread))->tc_module), task);
  • ????}
  • ????else /* It must be initialization time, so use the current module */
  • ????{
  • ????????status = MSC_Bind_Module_Task(msd_current_module, task);
  • ????}
  • #endif /* NU_MODULE_SUPPORT */

  • ????/* Link the task into the list of created tasks and increment the
  • ???????total number of tasks in the system. */
  • ????CSC_Place_On_List(&TCD_Created_Tasks_List, &(task -> tc_created));
  • ????TCD_Total_Tasks++;

  • #ifdef INCLUDE_PROVIEW
  • ????_RTProf_DumpTask(task,RT_PROF_CREATE_TASK);
  • #endif

  • ????/* Release the protection. */
  • ????TCT_Unprotect();

  • ????/* Determine if the task should be automatically started. */
  • ????if (auto_start == NU_START)
  • ????{

  • ????????/* Protect the system data structures. */
  • ????????TCT_Protect(&TCD_System_Protect);

  • ????????/* Start the task by resuming it. If the preemption is required,
  • ???????????leave the current task. */
  • ????????if (TCC_Resume_Task(task_ptr, NU_PURE_SUSPEND))


  • ????????????/* Transfer control back to the system. */
  • ????????????TCT_Control_To_System();
  • ????????else

  • ????????????/* Release the protection. */
  • ????????????TCT_Unprotect();
  • ????}

  • ????/* Return to user mode */
  • ????NU_USER_MODE();

  • ????/* Return successful completion. */
  • ????return(status);
  • }
  • TCC創建HISR函數:
  • STATUS TCC_Create_HISR(NU_HISR *hisr_ptr, CHAR *name,
  • ??????????VOID (*hisr_entry)(VOID), OPTION priority,
  • ??????????VOID *stack_address, UNSIGNED stack_size)
  • {

  • R1 TC_HCB *hisr; /* HISR control block ptr */
  • R2 INT i; /* Working index variable */
  • STATUS status = NU_SUCCESS;

  • NU_SUPERV_USER_VARIABLES

  • ????/* Switch to supervisor mode */
  • ????NU_SUPERVISOR_MODE();

  • ????/* Move input HISR pointer into internal pointer. */
  • ????hisr = (TC_HCB *) hisr_ptr;


  • #ifdef NU_ENABLE_STACK_CHECK

  • ????/* Call stack checking function to check for an overflow condition. */
  • ????TCT_Check_Stack();

  • #endif

  • #ifdef NU_ENABLE_HISTORY

  • ????/* Make an entry that corresponds to this function in the system history
  • ???????log. */
  • ????HIC_Make_History_Entry(NU_CREATE_HISR_ID, (UNSIGNED) hisr,
  • ????????????????????????????????(UNSIGNED) name, (UNSIGNED) hisr_entry);

  • #endif

  • ????/* First, clear the HISR ID just in case it is an old HISR
  • ???????Control Block. */
  • ????hisr -> tc_id = 0;

  • ????/* Fill in the HISR name. */
  • ????for (i = 0; i < NU_MAX_NAME; i++)
  • ????????hisr -> tc_name[i] = name[i];

  • ????/* Fill in the basic HISR information. */
  • ????hisr -> tc_entry = hisr_entry;
  • ????hisr -> tc_scheduled = 0;
  • ????hisr -> tc_activation_count = 0;
  • ????hisr -> tc_cur_time_slice = 0;

  • ????/* Fill in information about the HISR's stack. */
  • ????hisr -> tc_stack_start = stack_address;
  • ????hisr -> tc_stack_end = 0;
  • ????hisr -> tc_stack_size = stack_size;
  • ????hisr -> tc_stack_minimum = stack_size;

  • ????/* Setup priority information for the HISR. Priorities range from 0 to
  • ???????TC_HISR_PRIORITIES - 1. */
  • ????hisr -> tc_priority = priority & 3; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //這里優先級與上了3,所以只有0、1、2三種。優先級會更高

  • ????/* Initialize link pointers. */
  • ????hisr -> tc_created.cs_previous = NU_NULL; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //這里不加雙向鏈表
  • ????hisr -> tc_created.cs_next = NU_NULL;
  • ????hisr -> tc_active_next = NU_NULL;

  • ????/* Clear protect pointer. */
  • ????hisr -> tc_current_protect = NU_NULL;

  • ????/* Initialize additional kernel options data */
  • #if (NU_SUPERV_USER_MODE == 1)
  • ????hisr->tc_su_mode = 1; /* TCT_HISR_Shell in Supervisor mode */
  • ????hisr->tc_module = 0; /* Not initially bound to a module */
  • #endif

  • ????/* Build a stack frame for this HISR by calling TCT_Build_HISR_Stack. */
  • ????TCT_Build_HISR_Stack(hisr);

  • ????/* Protect the list of created HISRs. */
  • ????TCT_Protect(&TCD_HISR_Protect);

  • ????/* At this point the HISR is completely built. The ID can now be
  • ???????set and it can be linked into the created HISR list. */
  • ????hisr -> tc_id = TC_HISR_ID;

  • #if defined(NU_MODULE_SUPPORT) && (NU_MODULE_SUPPORT > 0)
  • ????/* If executing in a thread's context, bind to that thread's module */
  • ????if(TCD_Current_Thread != NU_NULL)
  • ????{
  • ????????status = MSC_Bind_Module_HISR(
  • ??????????(MS_MODULE*)(((TC_TCB*)(TCD_Current_Thread))->tc_module), hisr);
  • ????}
  • ????else /* It must be initialization time, so use the current module */
  • ????{
  • ????????status = MSC_Bind_Module_HISR(msd_current_module, hisr);
  • ????}
  • #endif /* NU_MODULE_SUPPORT */

  • ????/* Link the HISR into the list of created HISRs and increment the
  • ???????total number of HISRs in the system. */
  • ????CSC_Place_On_List(&TCD_Created_HISRs_List, &(hisr -> tc_created)); ? ? ? ? ? ? ? ? ? ? ? ? ? //在這里加入了鏈表?
  • ????TCD_Total_HISRs++; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //增加了鏈表長度計數

  • #ifdef INCLUDE_PROVIEW
  • ????_RTProf_DumpHisr(hisr,RT_PROF_CREATE_HISR);
  • #endif

  • ????/* Release the protection. */
  • ????TCT_Unprotect();

  • ????/* Return to user mode */
  • ????NU_USER_MODE();

  • ????/* Return successful completion. */
  • ????return(status);
  • }

  • 在tct.s中有TCT_Control_To_System,主要要建立新的system_stack:
  • ;************************************************************************
  • ;*
  • ;* FUNCTION
  • ;*
  • ;* TCT_Control_To_System
  • ;*
  • ;* DESCRIPTION
  • ;*
  • ;* This function returns control from a thread to the system. Note
  • ;* that this service is called in a solicited manner, i.e. it is
  • ;* not called from an interrupt thread. Registers required by the
  • ;* compiler to be preserved across function boundaries are saved by
  • ;* this routine. Note that this is usually a sub-set of the total
  • ;* number of available registers.
  • ;*
  • ;* CALLED BY
  • ;*
  • ;* Other Components
  • ;*
  • ;* CALLS
  • ;*
  • ;* TCT_Schedule Schedule the next thread
  • ;*
  • ;* INPUTS
  • ;*
  • ;* None
  • ;*
  • ;* OUTPUTS
  • ;*
  • ;* None
  • ;*
  • ;* HISTORY
  • ;*
  • ;* NAME DATE REMARKS
  • ;*
  • ;* W. Lamie 02-15-1994 Created initial version 1.0
  • ;* D. Lamie 02-15-1994 Verified version 1.0
  • ;* C. Meredith 03-01-1994 Corrected problem in time-slice
  • ;* reset logic, resulting in
  • ;* version 1.1
  • ;* D. Lamie 03-18-1994 Verified version 1.1
  • ;*
  • ;************************************************************************
  • ;VOID TCT_Control_To_System(void)
  • ;{
  • ????.def $TCT_Control_To_System
  • $TCT_Control_To_System ; Dual-state interworking veneer
  • ????.state16
  • ????BX r15
  • ????NOP
  • ????.state32
  • ????B _TCT_Control_To_System

  • ????????.def _TCT_Control_To_System
  • _TCT_Control_To_System

  • ????; Lockout interrupts.

  • ????????MRS r0,CPSR ; Pickup current CPSR ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //獲取CPSR值
  • ????????ORR r0,r0,#LOCKOUT ; Build interrupt lockout value
  • ????????MSR CPSR,r0 ; Lockout interrupts ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//寫入CPSR中斷屏蔽位

  • ????; Save a minimal context of the thread.

  • ????????STMDB r13!,{r4-r12,r14} ; Save minimal context of thread on ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //保存上下文
  • ????????????????????????????????????????????; the current stack
  • ????????.if THUMB ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //如果是THUMB模式
  • ?????????
  • ?????????MOV r2,r14 ; Determine what state the caller
  • ?????????MOV r2,r2,LSL #31 ; was in and build an
  • ?????????MOV r2,r2,LSR #26 ; appropriate state mask
  • ?????????STR r2,[r13, #-4]! ; Place it on the stack
  • ?????????
  • ????????.endif
  • ????????MOV r2,#0 ; Build solicited stack type value ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//建立solicited stack(請求棧?)
  • ????????????????????????????????????????????; and NU_NULL value
  • ????????STR r2,[r13, #-4]! ; Place it on the top of the stack ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //用r2替換r13下面一格的內容,r2不是0嗎。那不是刪除了r4的內容嗎?

  • ????; Setup a pointer to the thread control block.
  • ; REG_Thread_Ptr = (TC_TCB *) TCD_Current_Thread;

  • ????????LDR r1,Current_Thread ; Pickup current thread ptr address ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//獲取當前進程指針地址
  • ????????LDR r0,[r1, #0] ; Pickup current thread pointer

  • ????; Clear the current thread control block pointer.
  • ; TCD_Current_Thread = NU_NULL;

  • ????????LDR r3,Slice_State ; Pickup time slice state address ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //獲取time Slice_State地址
  • ????????STR r2,[r1, #0] ; Set current thread pointer to ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//又把進程指針清零了
  • ????????????????????????????????????????????; NU_NULL

  • ; Check to see if a time slice is active. If so, copy the original time
  • ; slice into the current time slice field of the task's control block.
  • ; if (TMD_Time_Slice_State == 0)
  • ; {
  • ????????LDR r1,[r3, #0] ; Pickup time slice state flag ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //r3是Slice_State中的值到r1
  • ????????CMP r1,#0 ; Compare with active value ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//比較是否是0
  • ????????BNE TCT_No_Stop_TS_1 ; If non-active, don't disable ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//如果不是0,跳轉到TCT_No_Stop_TS_1

  • ????
  • ????; Insure that the next time the task runs it gets a fresh time
  • ????; slice.
  • ; REG_Thread_Ptr -> tc_cur_time_slice = REG_Thread_Ptr -> tc_time_slice;

  • ????????LDR r1,[r0, #40h] ; Pickup original time slice ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //從另一個地方找了time slice

  • ????????; Clear any active time slice by setting the state to NOT_ACTIVE.
  • ; TMD_Time_Slice_State = 1;

  • ????????MOV r2,#1 ; Build disable value ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //設置了1關閉
  • ????????STR r2,[r3, #0] ; Disable time slice ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//設置time_slice_state
  • ????????STR r1,[r0, #20h] ; Reset current time slice ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//明明已經禁止了為什么還要賦值current time_slice呢。
  • ; }
  • TCT_No_Stop_TS_1: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??//這里是TCT_No_Stop_TS_1

  • ?????; Save off the current stack pointer in the control block.
  • ; REG_Thread_Ptr -> tc_stack_pointer = (VOID *) REG_Stack_Ptr;

  • ????????STR r13,[r0, #2ch] ; Save the thread's stack pointer ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//保存進程棧指針,為什么Slice_State加上#2ch就是進程棧指針呢,可能是結構體向下移動了幾位

  • ?????; Clear the task's current protection.
  • ; (REG_Thread_Ptr -> tc_current_protect) -> tc_tcb_pointer = NU_NULL;
  • ; REG_Thread_Ptr -> tc_current_protect = NU_NULL;

  • ????????LDR r1,[r0, #38h] ; Pickup current thread pointer ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //獲取當前進程指針
  • ????????MOV r2,#0 ; Build NU_NULL value ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //r2置0
  • ????????STR r2,[r0, #38h] ; Clear the protect pointer field ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //清除保護指針字段
  • ????????STR r2,[r1, #0] ; Release the actual protection ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //釋放實際保護

  • ????; Switch to the system stack.
  • ; REG_Stack_Ptr = TCD_System_Stack;

  • ????????LDR r1, System_Stack ; Pickup address of stack pointer ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//這里應該建立了新的system棧
  • ????????LDR r2, System_Limit ; Pickup address of stack limit ptr
  • ????????LDR r13,[r1, #0] ; Switch to system stack
  • ????????LDR r10,[r2, #0] ; Setup system stack limit

  • ????; Finished, return to the scheduling loop.

  • ????????B _TCT_Schedule ; Return to scheduling loop ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //跳轉到_TCT_Schedule
  • ;}
  • 在tct.s中有TCT_Schedule(void)內容,這里開關的中斷屏蔽寄存器,來使得進程能跟切換(進程指針的獲取):
  • ;************************************************************************
  • ;*
  • ;* FUNCTION
  • ;*
  • ;* TCT_Schedule
  • ;*
  • ;* DESCRIPTION
  • ;*
  • ;* This function waits for a thread to become ready. Once a thread
  • ;* is ready, this function initiates a transfer of control to that
  • ;* thread.
  • ;*
  • ;* CALLED BY
  • ;*
  • ;* INC_Initialize Main initialization routine
  • ;*
  • ;* CALLS
  • ;*
  • ;* TCT_Control_To_Thread Transfer control to a thread
  • ;*
  • ;* INPUTS
  • ;*
  • ;* TCD_Execute_Task Pointer to task to execute
  • ;*
  • ;* OUTPUTS
  • ;*
  • ;* None
  • ;*
  • ;* HISTORY
  • ;*
  • ;* NAME DATE REMARKS
  • ;*
  • ;* W. Lamie 02-15-1994 Created initial version 1.0
  • ;* D. Lamie 02-15-1994 Verified version 1.0
  • ;*
  • ;************************************************************************
  • ;VOID TCT_Schedule(void)
  • ;{
  • ????.def $TCT_Schedule
  • $TCT_Schedule ; Dual-state interworking veneer
  • ????.state16 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //16位模式下?
  • ????BX r15
  • ????NOP
  • ????.state32 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //32位模式下
  • ????B _TCT_Schedule

  • ????????.def _TCT_Schedule
  • _TCT_Schedule ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//明明下面就是_TCT_Schedule為什么要跳轉

  • ????; Restore interrupts according to the value contained in ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //根據在TCD_Interrupt_Level中值恢復中斷?
  • ; TCD_Interrupt_Level.

  • ????????LDR r1,Int_Level ; Build address of interrupt level ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//把Int_Level地址讀取到r1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
  • ????????MRS r0,CPSR ; Pickup current CPSR ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//讀取CPSR到r0
  • ????????LDR r2,[r1, #0] ; Pickup current interrupt lockout ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //獲取當前中斷屏蔽字段
  • ????????BIC r0,r0,#LOCK_MSK ; Clear the interrupt lockout bits ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //清除中斷屏蔽
  • ????????ORR r0,r0,r2 ; Build new interrupt lockout CPSR ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//設置新的中斷屏蔽字段
  • ????????MSR CPSR,r0 ; Setup new CPSR ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //寫回CPSR
  • ????????LDR r2,Execute_HISR ; Pickup TCD_Execute_HISR address ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//獲取TCD_Execute_HISR地址到r2
  • ????????LDR r3,Execute_Task ; Pickup TCD_Execute_Task address ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//獲取TCD_Execute_Task地址到r3

  • ????.if $$isdefed("INCLUDE_PROVIEW")
  • ; Nucleus ProView Hook
  • ; We check if upon entering TCT_Schedule we already have a task to excute. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //確認是否進入了TCT_Schedule時已經運行了task
  • ; if not, we start IDLE. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //如果沒運行就空閑
  • ????????LDR r0,[r2, #0] ; Pickup highest priority HISR ptr ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //獲取最高有限級的HISR指針
  • ????????CMP r0,#0 ; Is there a HISR active? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//是否已經運行,0是運行
  • ????????BNE TCT_Schedule_Thread ; Found an HISR ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//建立一個HISR,下面是TCT_Schedule_Thread
  • ????????LDR r0,[r3, #0] ; Pickup highest priority Task ptr ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //獲取任務的最高優先級
  • ????????CMP r0,#0 ; Is there a task active? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//判斷是否運行
  • ????????BNE TCT_Schedule_Thread ; If not, start IDLE. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//不是0就開始IDLE
  • ????????STR r2,[r13, #-4]! ; Save r2 on the stack ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//把r2壓入棧Execute_HISR地址
  • ????????STR r3,[r13, #-4]! ; Save r3 on the stack ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//把r3壓入棧Execute_Task地址
  • ????????BL __NU_Idle_Hook ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//跳轉到__NU_IDLE_HOOK這個是進等待吧,鉤子
  • ????????LDR r3,[r13], #4 ; Recover r2
  • ????????LDR r2,[r13], #4 ; Recover r3
  • ????.endif


  • ????; Wait until a thread (task or HISR) is available to execute.
  • ; do
  • ; {
  • TCT_Schedule_Loop:

  • ; } while ((!TCD_Execute_HISR) && (!TCD_Execute_Task)); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //TCD_Execute_HISRTCD_Execute_Task為空就一直IDLE

  • ????????LDR r0,[r2, #0] ; Pickup highest priority HISR ptr
  • ????????CMP r0,#0 ; Is there a HISR active?
  • ????????BNE TCT_Schedule_Thread ; Found an HISR
  • ????????LDR r0,[r3, #0] ; Pickup highest priority Task ptr
  • ????????CMP r0,#0 ; Is there a task active?
  • ????????BEQ TCT_Schedule_Loop ; If not, continue the search

  • ????; Yes, either a task or an HISR is ready to execute. Lockout
  • ????; interrupts while the thread is transferred to.

  • TCT_Schedule_Thread: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//這里應該是調度任務了
  • ????????MRS r1,CPSR ; Pickup CPSR again ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //獲取CPSR
  • ????????ORR r1,r1,#LOCKOUT ; Build interrupt lockout value ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//進行邏輯或設置中斷屏蔽值
  • ????????MSR CPSR,r1 ; Lockout interrupts ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//為什么設置了中斷屏蔽就會運行了,是不是通過開關中斷屏蔽,來讓任務自動搶占?上面獲取了HISR最高優先級的指針地址

  • ; Transfer control to the thread by falling through to the following
  • ; routine.
  • ;}
  • control_to_thread,只要確認了time slice有沒有正常工作。:
  • ;************************************************************************
  • ;*
  • ;* FUNCTION
  • ;*
  • ;* TCT_Control_To_Thread
  • ;*
  • ;* DESCRIPTION
  • ;*
  • ;* This function transfers control to the specified thread. Each
  • ;* time control is transferred to a thread, its scheduled counter
  • ;* is incremented. Additionally, time-slicing for task threads is
  • ;* enabled in this routine. The TCD_Current_Thread pointer is
  • ;* setup by this function.
  • ;*
  • ;* CALLED BY
  • ;*
  • ;* TCT_Schedule Indirectly called
  • ;* TCT_Protect Protection task switch
  • ;*
  • ;* CALLS
  • ;*
  • ;* None
  • ;*
  • ;* INPUTS
  • ;*
  • ;* thread Thread control block pointer
  • ;*
  • ;* OUTPUTS
  • ;*
  • ;* None
  • ;*
  • ;* HISTORY
  • ;*
  • ;* NAME DATE REMARKS
  • ;*
  • ;* W. Lamie 02-15-1994 Created initial version 1.0
  • ;* D. Lamie 02-15-1994 Verified version 1.0
  • ;*
  • ;************************************************************************
  • ;VOID TCT_Control_To_Thread(TC_TCB *thread)
  • ;{
  • _TCT_Control_To_Thread

  • ????; Setup the current thread pointer.
  • ; TCD_Current_Thread = (VOID *) thread; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//設置當前進程指針

  • ????????LDR r1,Current_Thread ; Pickup current thread ptr address
  • ????????LDR r2,[r0, #1ch] ; Pickup scheduled count
  • ????????STR r0,[r1, #0] ; Setup current thread pointer

  • ????; Increment the thread scheduled counter.
  • ; thread -> tc_scheduled++; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//增加scheduled計數

  • ????????LDR r3,[r0, #20h] ; Pickup time slice value
  • ????????ADD r2,r2,#1 ; Increment the scheduled count
  • ????????STR r2,[r0, #1ch] ; Store new scheduled count

  • ????; Check for time slice option.
  • ; if (thread -> tc_cur_time_slice) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //確認time_slice
  • ; {
  • ????????CMP r3,#0 ; Is there a time slice?
  • ????????BEQ TCT_No_Start_TS_1 ; If 0, there is no time slice ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //如果是0,表明沒有。time slice沒有運行

  • ????????; Start a time slice.
  • ; TMD_Time_Slice = thread -> tc_cur_time_slice;
  • ; TMD_Time_Slice_State = 0;

  • ????????LDR r2,Time_Slice ; Pickup address of TMD_Time_Slice ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//獲取time slice
  • ????????LDR r1,Slice_State ; Pickup address of? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //獲取time slice state
  • ????????????????????????????????????????????; TMD_Time_Slice_State
  • ????????STR r3,[r2, #0] ; Setup the time slice ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//設置time slice
  • ????????MOV r2,#0 ; Build active state flag ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //置0
  • ????????STR r2,[r1,#0] ; Set the active flag ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//設置活動標志
  • ; }
  • TCT_No_Start_TS_1: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//這里是TCT_No_Start_TS_1
  • ????.if $$isdefed("INCLUDE_PROVIEW") ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//如果定義了INCLUDE_PROVIEW
  • ; Nucleus ProView Hook

  • ????????STR r0,[r13, #-4]! ; Save r0 on the stack ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//把r0壓入棧
  • ????????BL __NU_Schedule_Task_Hook ; Branch to RTView ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//跳轉到__NU_Schedule_Task_Hook?
  • ????????LDR r0,[r13], #4 ; Recover return address
  • ????.endif


  • ????; Pickup the stack pointer and resume the thread.
  • ; REG_Stack_Ptr = thread -> tc_stack_pointer;

  • ????????LDR r13,[r0, #2ch] ; Switch to thread ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //運行新的thread
  • ?
    ?任務的切換主要是上下文的切換,也就是task棧的切換,函數的調用會保存部分regs和返回地址,這些動作都是編譯器來完成的,而OS中的任務切換是運行時(runtime)的一種狀態變化,因此編譯器也無能為力,所以對于上下文的保存需要代碼來實現。
    ?
    ?任務的搶占是異步的因此必須要通過中斷來實現,一般每次timer的中斷決定當前的task的slice time是否expired,然后設置TCT_Set_Execute_Task為相同優先級的其他task或更高優先級的task;高優先級的task搶占低優先級的task,一般是外部中斷觸發,在HISR中resume_task()喚醒高優先級的task,然后schedule到高優先級的task中,因為timer的HISR是在系統初始化就已經注冊的,只是執行timeout和time slice超時后的操作,并沒有執行resume_task的動作。

    http://blog.chinaunix.net/uid-22003667-id-3291833.html

    轉載于:https://www.cnblogs.com/ch122633/p/7363282.html

    總結

    以上是生活随笔為你收集整理的nucleus学习的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    精品自拍av | 天天爽人人爽 | 久久撸在线视频 | 一级做a爱片性色毛片www | 亚洲天天 | 色婷婷久久久综合中文字幕 | av一二三区| 日韩欧美视频在线 | 西西4444www大胆视频 | 国产福利精品一区二区 | 国产成人一二片 | 黄色在线观看免费 | 狠狠躁日日躁狂躁夜夜躁 | 亚洲一级片在线看 | 免费国产一区二区视频 | 九九九九热精品免费视频点播观看 | 一区二区视频在线观看免费 | 亚洲精品xxxx| 国产欧美综合视频 | 久久99热这里只有精品国产 | 国产精品18久久久久久久久久久久 | 亚洲国产精品第一区二区 | 亚洲视频免费视频 | 久久在视频 | 911久久 | 综合五月 | 中文在线8新资源库 | 探花视频在线观看免费版 | 日韩在线观看 | 久久五月婷婷综合 | 日韩色视频在线观看 | 最新高清无码专区 | 久久免费视频这里只有精品 | av在线电影网站 | 国产激情电影综合在线看 | 亚洲精品免费在线观看 | 天天舔天天搞 | 久久视频免费在线观看 | 久久69av| 日韩一区二区三区观看 | 欧美国产日韩一区二区三区 | 香蕉视频在线免费 | 久久伦理网 | 欧美大jb | 久久精品亚洲一区二区三区观看模式 | 免费看片网址 | 久久久官网 | 国产91免费在线观看 | 久久久穴| 欧美精品被 | 国产精品亚 | 国产午夜小视频 | 日本精品一区二区三区在线播放视频 | 在线免费观看国产视频 | www视频在线观看 | 亚洲精品视频在线免费 | 精品在线观看一区二区 | 欧美日本一区 | 免费网站看v片在线a | 色偷偷中文字幕 | 亚洲精品视频免费在线观看 | 婷婷在线免费 | 精品欧美一区二区三区久久久 | 国产色网站| 五月婷婷综合色拍 | 国产精品成人av久久 | 91九色在线观看视频 | 99久久国产免费,99久久国产免费大片 | 久久在视频 | 操操色 | 韩国一区二区三区在线观看 | 免费在线一区二区三区 | 国产青草视频在线观看 | 精品国产区 | 黄色a在线 | av高清一区二区三区 | 成人av高清 | 国产一区二区视频在线播放 | 久久久久久久国产精品影院 | 久久久高清一区二区三区 | 日韩精品影视 | 在线播放国产精品 | 国产一区二区高清 | 91麻豆精品国产91久久久久久久久 | 亚洲自拍av在线 | 日韩中文在线电影 | 爱干视频| 国产一级片网站 | 精品久久久久久国产偷窥 | 国产热re99久久6国产精品 | 日韩黄色免费看 | 免费毛片一区二区三区久久久 | 亚洲精品在线视频播放 | 天天透天天插 | 国产特级毛片 | 亚洲电影av在线 | 91网站在线视频 | 1024手机基地在线观看 | 精品人妖videos欧美人妖 | 久久久久北条麻妃免费看 | 久久九精品 | 欧美成年黄网站色视频 | 99久精品 | 婷婷久草 | 天天操天天干天天玩 | 国产精品美女 | 黄色av网站在线免费观看 | av超碰免费在线 | www久久国产| 国产精品久99 | 日韩久久精品一区二区 | 色综合久久88色综合天天免费 | 日韩午夜电影院 | 久久精品—区二区三区 | 国产精品久久久久久久久久99 | 一区二区三区在线观看 | 在线观看的av网站 | 国产淫片 | 人人爱人人添 | 久久九九免费 | 亚洲天堂在线观看完整版 | 成人久久 | 久久久片 | 亚洲精品免费观看 | 亚洲高清在线视频 | 亚洲伊人av| 51久久夜色精品国产麻豆 | 综合色婷婷 | 日韩在线字幕 | 国产一区二区三区午夜 | 福利电影一区二区 | 久久婷婷视频 | 伊人久久电影网 | 韩国精品一区二区三区六区色诱 | 91视频xxxx| 欧美精品久久久久久久亚洲调教 | 欧美精品一区二区免费 | 人人搞人人干 | 久草在线一免费新视频 | 亚洲一级免费观看 | 黄网在线免费观看 | 成人av影视| 一本色道久久精品 | 精品女同一区二区三区在线观看 | 久久免费视频这里只有精品 | 在线免费性生活片 | 日韩在线视频不卡 | 天堂网在线视频 | 国产小视频你懂的在线 | 黄色片免费看 | 99爱在线 | 日韩免费视频一区二区 | 97在线观看视频免费 | 国产a高清| 国产精品激情偷乱一区二区∴ | 精品国产亚洲一区二区麻豆 | 五月婷婷久 | 亚州人成在线播放 | 五月激情丁香 | 国产色视频一区二区三区qq号 | 欧美色图亚洲图片 | 手机看片99 | 草免费视频 | 综合国产在线观看 | 日本高清免费中文字幕 | 西西444www高清大胆 | 91成人网在线观看 | 欧美韩国日本在线观看 | 成人午夜精品福利免费 | 在线黄色av | 狠狠狠干 | 亚洲精品欧美精品 | 波多野结衣电影久久 | 国产小视频在线免费观看 | 国产成人精品在线播放 | 国产毛片久久久 | 久久午夜电影网 | 亚洲国产精品视频 | 超碰97在线资源 | 精品久久久久久国产偷窥 | 亚洲成人黄色网址 | 99久久精品日本一区二区免费 | 国产精品国产三级国产不产一地 | 久久99国产综合精品 | 91精品视频免费看 | www久久久久 | 国产精品乱码久久久久久1区2区 | av网在线观看 | 久久久亚洲影院 | 久久亚洲成人网 | 国产精品成| 亚洲一区二区三区在线看 | 亚洲免费av一区二区 | 中文字幕永久 | 中文字幕中文字幕在线中文字幕三区 | 亚洲综合欧美激情 | 国产午夜精品一区二区三区四区 | 精品欧美一区二区精品久久 | 国产精品久久久久久久久免费 | 国际精品久久久久 | 中文字幕专区高清在线观看 | 香蕉网在线 | 99精品久久99久久久久 | 一区二区三区四区在线免费观看 | 最新免费中文字幕 | 久久在线看 | 亚洲精品黄| 国产免费观看久久 | av网站播放 | 精品久久久免费 | 亚洲精品乱码久久久久久写真 | 国产一级视频免费看 | 久久www免费人成看片高清 | www.com在线观看 | 98精品国产自产在线观看 | 99精品视频播放 | 麻豆小视频在线观看 | 日韩电影一区二区三区在线观看 | 久久久久女教师免费一区 | 天天干,夜夜操 | 亚洲91视频 | 久久精品中文字幕少妇 | 成人午夜电影在线播放 | 国产高清在线看 | 91人网站 | 久久99九九99精品 | 国产麻豆精品久久一二三 | 六月色丁 | 日韩精品一区二区三区丰满 | 国产精品1000 | 九九热精品视频在线观看 | 在线观看免费一区 | 日韩欧美在线观看 | 日韩电影在线观看一区二区 | jizzjizzjizz亚洲 | 丝袜美腿在线播放 | 国产成人免费 | 欧美日韩91| 亚洲视频456 | 亚州欧美视频 | 一区二区三区播放 | 国产精品久久久久久久久久白浆 | 久久黄色免费观看 | 在线观看韩国av | 欧美另类巨大 | 精品久久久久久久久久久久久久久久 | 免费在线播放 | 97色视频在线 | 欧美专区国产专区 | 天天操天天怕 | 婷婷丁香色综合狠狠色 | 一区二区视频网站 | 国产免费又粗又猛又爽 | 韩国av电影网 | 麻花豆传媒mv在线观看网站 | 天天天操操操 | 97精品久久人人爽人人爽 | 在线观看岛国av | 亚洲爱爱视频 | 国产男女无遮挡猛进猛出在线观看 | 天天操天天操天天操天天操天天操天天操 | 手机在线日韩视频 | 欧美与欧洲交xxxx免费观看 | 中文字幕中文字幕在线一区 | 麻豆成人小视频 | 国产精品久久久久国产精品日日 | 91精品国产综合久久婷婷香蕉 | 99r在线| 在线中文字幕一区二区 | 久久99久久99 | 国产不卡在线 | 97综合视频 | 日韩av二区 | av高清一区二区三区 | 韩国av一区二区 | 看片在线亚洲 | 亚洲人片在线观看 | 国产无套精品久久久久久 | 国产精品一区二区免费 | 国产 欧美 日产久久 | 久久久久欧美精品999 | 色伊人网| 天天艹日日干 | 韩国精品一区二区三区六区色诱 | 人人天天夜夜 | 久久成年人网站 | 日韩影视精品 | 日韩欧美国产精品 | 99视频在线 | 日韩av中文字幕在线免费观看 | 国产又黄又爽又猛视频日本 | 99精品视频精品精品视频 | 久久久久亚洲a | 中文字幕乱码亚洲精品一区 | 久久久不卡影院 | 黄色网在线免费观看 | 99中文字幕在线观看 | 久草久热 | 国产精品成人自拍 | 国产精品欧美一区二区三区不卡 | 久久久国产精品免费 | 操久久免费视频 | 一区二区三区四区久久 | 日本少妇久久久 | 99久久精品午夜一区二区小说 | 久久草网站 | 国产不卡一区二区视频 | 亚洲日本国产精品 | 欧美成人黄色片 | 日韩欧美中文 | 日本久久久久久久久久 | 国产精品99久久久久久大便 | 毛片永久新网址首页 | 日韩欧美一级二级 | 日韩av免费在线电影 | 一区二区av | 免费三级在线 | 日韩精品首页 | 中文字幕丰满人伦在线 | 国产a级片免费观看 | 九色91视频 | 欧美日韩国产免费视频 | 在线观看的黄色 | 欧美日韩亚洲第一 | 久久99久久99精品免费看小说 | 99热在线观看 | 国产黄网站在线观看 | 99久久婷婷国产 | 狠狠干五月天 | 亚洲国产av精品毛片鲁大师 | 国产黄色片免费 | 日韩欧美国产成人 | 亚洲日韩中文字幕在线播放 | 美女视频黄免费的久久 | 亚洲精品18日本一区app | 97碰碰视频 | 日韩电影久久 | 人人擦 | 欧洲成人免费 | 亚洲一区二区91 | 黄色特级片| 91亚色视频 | 最近中文字幕国语免费高清6 | 91精品国产欧美一区二区 | 亚洲精品视频在线播放 | 日韩激情av在线 | 天天射一射 | 黄网站色欧美视频 | 五月婷婷电影网 | 在线观看国产福利片 | 国产麻豆精品久久一二三 | 亚洲综合小说电影qvod | 国内精品久久久久影院日本资源 | 精品视频免费 | 国产片免费在线观看视频 | 五月婷婷丁香激情 | 久久久黄色免费网站 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 免费一区在线 | 中文字幕国产精品 | 国产69精品久久app免费版 | 国产精品中文字幕在线播放 | 成人av日韩 | 国产麻豆视频免费观看 | 久久爱资源网 | 久久精品99国产精品酒店日本 | 激情久久久久久久久久久久久久久久 | 欧美日产一区 | 欧美精品三级在线观看 | 在线不卡中文字幕播放 | 久久久精品电影 | 久久99国产精品视频 | 国产精品永久久久久久久久久 | 六月丁香激情网 | av一级网站 | 国产精品久久久久久久久久久不卡 | 九九热在线精品 | 波多野结衣精品视频 | 在线播放国产精品 | 国产 在线 高清 精品 | 日韩不卡高清视频 | 91桃花视频 | 日韩xxxx视频 | 亚洲精品啊啊啊 | 久久艹免费 | www色| 欧美-第1页-屁屁影院 | 免费又黄又爽视频 | 成人福利在线播放 | 一区二区三区精品久久久 | 97夜夜澡人人爽人人免费 | 青青久视频| 国产在线观看免费 | 日日干天天操 | 精品国产视频一区 | 麻豆传媒视频在线免费观看 | 国产精品久久久久久久久久了 | 黄色a视频免费 | 99精品乱码国产在线观看 | 免费色黄 | 欧美a级在线 | 亚洲精品免费观看视频 | 网站在线观看你们懂的 | 免费黄色在线网站 | 96亚洲精品久久 | 丁香五婷 | 精品久久1| 五月婷婷在线观看视频 | 国产精品一区久久久久 | 黄色一级大片在线免费看国产一 | 国产精品久久久久久久久久久久午夜片 | 国内少妇自拍视频一区 | 久久免费黄色网址 | 在线看国产| 精品99久久 | 久久免费视频1 | 三级av中文字幕 | 国产精品久久久久久久免费 | 999久久国精品免费观看网站 | 色婷婷中文 | 天天干天天射天天爽 | 亚洲电影久久久 | 黄色国产精品 | 国产a级片免费观看 | 国产91精品一区二区绿帽 | 日韩xxxxxxxxx | 国产a网站 | 亚州精品成人 | 黄色福利视频网站 | 美女网站黄在线观看 | 九九免费精品 | 国产精品高清在线观看 | 亚洲一区日韩 | 国产日产精品一区二区三区四区 | 激情偷乱人伦小说视频在线观看 | 五月网婷婷| 欧美精品久久久久性色 | 一区二区激情 | 五月婷婷综合在线观看 | 日日操夜夜操狠狠操 | 久久精品久久精品久久精品 | 国产精品麻豆视频 | 国产精品视频免费观看 | 日韩精品久久一区二区三区 | 免费人做人爱www的视 | 久久不射电影院 | 国产精品美 | 夜夜骑天天操 | 日韩在线视频一区二区三区 | 久久久久亚洲国产精品 | 成人av资源在线 | 99久久夜色精品国产亚洲96 | 在线黄色免费 | 在线一区观看 | 亚洲精品国偷自产在线91正片 | 国产高清在线免费视频 | 国语自产偷拍精品视频偷 | 亚洲91中文字幕无线码三区 | 正在播放五月婷婷狠狠干 | 亚洲精品视频网 | 国产一区二区电影在线观看 | 日本黄色大片免费看 | 日韩h在线观看 | 日韩免费观看av | 久久首页 | 夜夜躁狠狠燥 | 伊人中文在线 | 中文字幕4 | 免费久久网站 | 国产a精品| 深爱激情开心 | 久久精品国产免费观看 | 国产一区二区三区免费视频 | 97在线观看免费观看 | 一区二区三区四区精品 | 欧美激情奇米色 | 亚洲另类视频 | 免费网站在线观看成人 | 欧美极品在线播放 | 国产视频在 | 97超视频免费观看 | 亚洲综合网站在线观看 | 国产精选视频 | 91一区啪爱嗯打偷拍欧美 | 97视频亚洲 | 婷婷色在线观看 | 人人爱爱 | 久久精品免费 | 日韩毛片在线免费观看 | 九九久久久久久久久激情 | 国产尤物一区二区三区 | av线上免费观看 | 欧美国产日韩一区 | 成年人在线观看视频免费 | 在线欧美小视频 | 在线观看岛国 | 国产精品免费久久 | 亚洲黄色av网址 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 国产免费片| 91日韩精品| 天堂麻豆| 日韩在线一二三区 | 日韩理论在线 | 久久精品影片 | 麻花豆传媒mv在线观看网站 | 国产中文字幕视频在线 | 国产精品爽爽爽 | 中文一二区 | 国产韩国日本高清视频 | 久久黄色影视 | 美女网站色免费 | 成年人国产在线观看 | 色婷婷综合视频在线观看 | 五月婷婷狠狠 | 国产精品6| 伊人视频 | 丁香五月网久久综合 | 波多野结衣视频一区 | 最新黄色av网址 | 亚洲专区在线播放 | 亚洲欧美国内爽妇网 | 97免费在线观看视频 | 91精品国自产拍天天拍 | 国产精品久久99精品毛片三a | 国产免费观看久久 | 99re国产| 五月丁婷婷 | 亚洲欧美国产精品 | 亚洲成人黄色在线观看 | 亚洲国产69 | 在线观看va | 久久激情日本aⅴ | 99久久婷婷国产一区二区三区 | 在线播放亚洲 | 黄色大全视频 | 亚洲日本国产精品 | 日韩一区二区三区在线观看 | 一区二区观看 | 综合激情网 | 亚洲区另类春色综合小说校园片 | 日本不卡一区二区三区在线观看 | 人人看97 | 国产精品va在线播放 | 美女在线国产 | 国产区高清在线 | 免费电影一区二区三区 | 久草91视频 | 日本精品久久久久 | 成人av一区二区兰花在线播放 | 高清日韩一区二区 | 99视频精品视频高清免费 | 亚洲视频免费在线 | 免费成视频 | 免费视频一二三 | 久久视屏网 | 久久久国产一区二区 | 色无五月 | 亚洲精品乱码久久久久久9色 | 国产午夜精品一区二区三区 | 91九色在线观看 | 日韩高清国产精品 | 夜夜操综合网 | www.午夜视频 | 久久精品欧美一 | 成人av在线观 | 成人黄色大片在线免费观看 | 一区二区三区四区五区在线视频 | 久久av免费观看 | 亚洲手机天堂 | 久久tv| 中文字幕在线网 | 精品国产成人在线 | 一区二区三区动漫 | 久久躁日日躁aaaaxxxx | 97av视频| 人人爽人人爱 | 久久久91精品国产一区二区三区 | 亚洲精品玖玖玖av在线看 | 欧美精品一区二区三区四区在线 | 在线a视频| 久久伊人免费视频 | 91伊人久久大香线蕉蜜芽人口 | 亚洲精品国偷拍自产在线观看蜜桃 | 黄色成人免费电影 | 天天射天天| 日韩大片在线免费观看 | 波多野结衣在线中文字幕 | 色综合久久中文字幕综合网 | 亚洲视频免费在线观看 | av在线免费观看黄 | 国产在线播放一区二区三区 | 青草视频在线播放 | 狠狠的干| 99久久婷婷国产综合亚洲 | 久久 国产一区 | 色综合久久久久网 | 欧美成人性战久久 | 国内精品久久久久影院优 | 久久亚洲欧美日韩精品专区 | 欧美亚洲成人xxx | 精品久久久久久亚洲综合网 | 亚洲精品一区中文字幕乱码 | 天天天天天天操 | 亚洲欧美偷拍另类 | 国产精品成人久久久久 | 欧美日韩精品免费观看视频 | 日韩影片在线观看 | 久久毛片网 | 免费69视频 | 天天色天天射天天干 | 免费高清在线观看成人 | 久久精品久久综合 | 亚洲男人天堂a | av在线免费观看网站 | 色婷婷电影 | 久久五月天色综合 | 久久99久久99精品免视看婷婷 | 人人爽久久涩噜噜噜网站 | 国产人成看黄久久久久久久久 | 欧美91片 | 久久免费高清视频 | 久久国产露脸精品国产 | 四虎影视av| 最近日韩中文字幕中文 | 久久精品8| 国产精品18毛片一区二区 | 黄网站大全 | 日韩欧美精品一区二区 | 日韩动漫免费观看高清完整版在线观看 | 欧美亚洲另类在线视频 | 中文字字幕在线 | 在线精品在线 | 天天摸天天操天天舔 | 久久五月天综合 | 在线看v片成人 | 久久久久9999亚洲精品 | 久久免费影院 | 久久久久久国产精品久久 | 天天色天天骑天天射 | 一级黄色在线视频 | 亚洲国产高清在线观看视频 | 久久国色夜色精品国产 | www.国产在线观看 | 欧美日韩高清在线一区 | 午夜av一区二区三区 | 丁香婷婷综合激情五月色 | 91黄色小视频 | 日韩视频一区二区在线 | 国产黄色成人 | www.久久视频 | 日本公妇在线观看高清 | 黄色app网站在线观看 | 中文资源在线官网 | 91免费在线 | 久草在线久草在线2 | 国产午夜激情视频 | 999久久久精品视频 日韩高清www | 九九久久久 | 婷婷综合伊人 | 五月的婷婷 | 天天射天天干天天爽 | 国产综合片| 久久视频中文字幕 | 久久综合色一综合色88 | 久热色超碰 | 黄色.com| 成人黄色av网站 | 日韩av不卡在线观看 | 亚洲人成免费网站 | 天天操天天干天天操天天干 | 国产尤物一区二区三区 | 激情综合婷婷 | 99久久这里只有精品 | 欧美日韩一区二区视频在线观看 | 在线播放91 | 久久草在线免费 | 色狠狠狠 | 中文字幕在线久一本久 | 成年人免费看 | 91精品国产欧美一区二区 | 一级a性色生活片久久毛片波多野 | 欧美在线free| 久久久久久久久黄色 | 91亚洲视频在线观看 | 久久精品视频国产 | 日韩网站一区 | 国产一区福利在线 | 97精品国自产拍在线观看 | 成人欧美在线 | 国产成人av一区二区三区在线观看 | 色久综合 | 色资源网免费观看视频 | 在线成人免费电影 | 91大神精品视频在线观看 | 国产精品一区二区久久精品 | 亚洲精品国内 | 手机av看片| 亚洲精品国产欧美在线观看 | 久草免费在线视频 | 天天草视频 | 中文字幕av有码 | 激情久久伊人 | 毛片区 | 久久免费视频1 | 999视频网 | 久久久久久久久久久久影院 | 超碰国产在线观看 | 欧美日韩性生活 | 91丨porny丨九色 | 久久短视频| 亚洲精品免费看 | 国产成人三级一区二区在线观看一 | 国产日韩欧美视频 | 色在线最新 | 国产片免费在线观看视频 | 国产一级片在线播放 | 免费在线一区二区 | 天天干天天上 | 日韩一级电影在线观看 | 97av在线视频免费播放 | 久久久久久久久久久免费视频 | 黄色精品一区 | 成人av一区二区兰花在线播放 | 亚洲va综合va国产va中文 | 精品国产理论 | 91精品国自产在线观看欧美 | 久草视频免费看 | 成人午夜电影网 | 欧美影片 | 超级碰碰碰免费视频 | 久久香蕉一区 | 久久久久久国产精品 | 欧美日韩综合在线观看 | 91av在线免费观看 | 日本久久久久久 | 超碰97人人射妻 | 精品国模一区二区 | 九九九九九国产 | 久草a在线 | av网站地址 | 欧美精品日韩 | 天天婷婷 | 午夜精品久久久久99热app | 欧美一级艳片视频免费观看 | 五月天丁香 | 中文字幕丝袜一区二区 | 免费看污污视频的网站 | 人人狠狠综合久久亚洲婷 | 国产日产精品一区二区三区四区 | 亚洲国产精品小视频 | 日本中文字幕网 | 91精品黄色 | 欧美亚洲成人免费 | 波多野结衣视频一区二区 | 日本黄色免费观看 | 久久精品久久精品久久39 | 91在线免费公开视频 | 日韩在线看片 | 国产一级在线观看视频 | 欧美二区在线播放 | 中文日韩在线视频 | 天堂av在线免费观看 | 在线观看一级片 | 视频在线观看入口黄最新永久免费国产 | 国产精品自拍在线 | 女女av在线| 国产精品久久电影网 | 精品久久1| 亚洲精品中文在线资源 | 91精品国产乱码在线观看 | 国产精品99蜜臀久久不卡二区 | 99视频在线观看免费 | 国产一区二区三区高清播放 | 欧美精品亚洲精品 | 激情五月在线视频 | 国产精品18毛片一区二区 | 国产精品成人一区二区 | 福利区在线观看 | 欧美日韩亚洲在线观看 | 国产资源免费 | 天天爽天天碰狠狠添 | 亚洲最新视频在线播放 | 国产在线不卡视频 | 蜜臀av在线一区二区三区 | 91天天操| 亚洲精品国产电影 | 高清免费在线视频 | 欧美了一区在线观看 | 麻豆久久久久久久 | 精品99免费 | av九九九| 精品在线观看免费 | www免费在线观看 | 一区二区三区国产精品 | 九九热在线视频免费观看 | 色综合婷婷久久 | 麻豆视频在线播放 | 天天操天天干天天摸 | 超碰97av在线 | 日韩高清精品免费观看 | 999热视频| 不卡中文字幕在线 | 人九九精品 | www.色在线| 久精品在线 | 久久综合九色综合97婷婷女人 | av在线免费在线 | 91最新在线观看 | 欧美日韩午夜在线 | 在线不卡视频 | 伊人天天色 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 99久久久久国产精品免费 | 97在线观看免费高清 | av成人在线看 | 在线观看视频一区二区三区 | 中文字幕av最新 | 久久伊99综合婷婷久久伊 | 一区二区三区精品久久久 | 国产精品18久久久久久vr | 99夜色| 免费在线观看黄网站 | 国产精品中文字幕在线播放 | 久久久精品午夜 | 亚洲视频h | 午夜.dj高清免费观看视频 | 狠狠五月婷婷 | 久久成人精品电影 | 午夜精品一区二区三区在线播放 | 伊人宗合网 | 亚洲1区在线 | 中文在线8资源库 | 激情婷婷色 | 国产在线欧美在线 | 亚洲午夜激情网 | 韩国av免费 | 又色又爽又激情的59视频 | 中文字幕资源在线 | 国产高清黄色 | 中文字幕亚洲国产 | 日日干夜夜操视频 | 午夜丁香视频在线观看 | 欧美成人高清 | 五月天网站在线 | 国产激情电影综合在线看 | 一区二区三区四区免费视频 | 一二区av| 欧美一区二区在线 | 国产综合福利在线 | 国产中文在线视频 | 国产不卡在线 | 国产精品免费视频观看 | 免费看的视频 | 国内精品久久久久影院日本资源 | 黄p在线播放 | 久久精品韩国 | av一区在线播放 | 国产精品18久久久久久不卡孕妇 | 青青河边草手机免费 | 又爽又黄又刺激的视频 | 超碰在线人人爱 | 五月婷婷激情六月 | 国产亚洲欧美精品久久久久久 | 视频在线播放国产 | 少妇精69xxtheporn| 天天色天天色 | 亚洲精品国产精品久久99热 | 国产精品 中文在线 | 久草在线视频免赞 | 午夜电影 电影 | 亚洲春色综合另类校园电影 | 天天干com| 国产一区成人在线 | 亚洲国产字幕 | 中文字幕 成人 | 久久黄色小说视频 | 丁香激情网 | 国产黄色在线看 | 99精品国产福利在线观看免费 | 日韩成人在线免费观看 | 久久综合色天天久久综合图片 | 97网| zzijzzij亚洲成熟少妇 | 亚洲综合欧美日韩狠狠色 | 13日本xxxxxⅹxxx20 | 精品国产视频一区 | 亚洲精品99久久久久久 | 国产中文字幕在线视频 | 久草免费福利在线观看 | 亚洲精品国产高清 | 中文字幕在线有码 | 亚洲人成影院在线 | 91在线麻豆| 久久成人午夜视频 | 人人爽人人爽 | 亚洲天堂精品视频在线观看 | 亚洲理论在线 | 久久久久黄 | 色是在线视频 | 99综合影院在线 | 婷婷干五月| 久久久久久久影院 | 五月开心婷婷 | 色妞色视频一区二区三区四区 | 在线视频app| 天天干夜夜夜操天 | 欧美精品久久久 | 亚洲黄色成人网 | 人人爽人人爽 | www国产一区 | 超碰在线个人 | 免费日韩 精品中文字幕视频在线 | 久久久精品久久日韩一区综合 | 日韩一区二区三区在线观看 | av在线电影网站 | 99免费观看视频 | 国偷自产视频一区二区久 | 国产拍揄自揄精品视频麻豆 | 欧美在线视频日韩 | 国产裸体无遮挡 | 天天爱天天草 | 911免费视频 | 欧美精品国产综合久久 | 精品国产不卡 | 久久不卡免费视频 | 国产小视频在线观看免费 | 丁香午夜 | 国产福利久久 | 国产美女无遮挡永久免费 | 日日夜夜91 | av网站免费看 | 深爱激情综合网 | 亚洲经典视频在线观看 | 九九九九九国产 | 久久久91精品国产一区二区精品 | 国产精品国内免费一区二区三区 | 在线观看免费 | 婷婷激情影院 | 九九电影在线 | www,黄视频 | 69av在线播放 | 免费观看www小视频的软件 | 亚洲乱码精品久久久久 | 久久久av电影 | 成人免费视频视频在线观看 免费 | 在线免费观看黄色大片 | 中文字幕一区二区三区四区在线视频 | 亚洲精品视频在 | 免费在线播放视频 | 国产视频中文字幕 | 九九欧美视频 | 亚洲aⅴ乱码精品成人区 | 国产成人av在线 | 97国产精品免费 | 国产欧美日韩精品一区二区免费 | 国产精品欧美久久久久无广告 | 久久久久电影网站 | 狠狠网 | 日韩大片在线观看 | 色综合久久五月 | 欧美人zozo| 国产在线黄色 | 精品国产伦一区二区三区观看方式 | 青青河边草观看完整版高清 | 黄色国产高清 | 久久久久综合精品福利啪啪 | 色欲综合视频天天天 | 999国内精品永久免费视频 | 国产福利免费看 | 91chinese在线 | 91精彩视频在线观看 | 亚洲精品www. | 日日碰狠狠躁久久躁综合网 | 正在播放日韩 | 999精品视频 | 果冻av在线 | 亚洲va欧美va | 色av男人的天堂免费在线 | 国产精品久久久久久久久蜜臀 | 在线va视频 | 久久人人爽爽人人爽人人片av | av高清网站在线观看 | 丰满少妇一级 | 亚洲精品视频大全 | 国产a精品 | 国产精品精品久久久久久 | 久久大视频| 日躁夜躁狠狠躁2001 | 最近中文字幕国语免费高清6 | 欧美色精品天天在线观看视频 | 亚洲乱亚洲乱妇 | 免费又黄又爽 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 日韩在线观看中文字幕 | 97在线观看视频免费 | 综合激情伊人 | 国产精品热 |