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

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

?? sosos.c

?? 基于AVR平臺的RTOS
?? C
?? 第 1 頁 / 共 2 頁
字號:
         if(SOSOS_RUNNING_INHERIT_PRI>i){
#else
         if(SOSOS_RUNNING_TASK_PRI>i){
#endif
           set_bit(SOSOS_STATE,STATE_SCHED_REQ);
           }
         return;
         }
       }
     point++;
     tmpj<<=1;
     }
   }

}
#endif

#if SOSOS_COUNT_SEM_ENABLE == 1
void SososCreateCountSem(SOSOS_SEM *sem,SOSOS_SEM value)//創建計數型信號量
//sem為要創建的數字型信號量的指針
//value為要創建時的初始值{
 (*sem)=value;
}
#endif

#if SOSOS_QUERY_SEM_ENABLE == 1 && SOSOS_COUNT_SEM_ENABLE == 1
SOSOS_SEM SososQueryCountSem(SOSOS_SEM *sem)//查詢計數型信號量
{
 return (*sem);
}
#endif

#if SOSOS_COUNT_SEM_ENABLE == 1
unsigned char SososCountSemPend(SOSOS_SEM *sem,SOSOS_TIMEOUT_TYPE timeout)//等待計數型信號量
//本函數用于等待指定的計數型信號量為有效,有效則立即返回,不能用在中斷中
//sem為計數型信號量的指針
//timeout為等待時間,單位:時間間隔,0:為無限期等待
{
 unsigned char temp;

 ENTER_CRITICAL();
 if((*sem)>0){
   (*sem)--;
   }
 else{
   TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_STATE=TASK_STATE_SEM;
   TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].EVENT_INDICATION=(SOSOS_ADDRESS)sem;
   TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_TIMEOUT=timeout;
   SOSOS_TASK_READY[SOSOS_RUNNING_TASK_PRI]=SOSOS_TASK_READY[SOSOS_RUNNING_TASK_PRI]&(~SOSOS_RUNNING_TASK_ID_INDEX);//清除任務就緒狀態
   if(timeout>0)
     set_bit(SOSOS_WAIT_TASK,SOSOS_RUNNING_TASK_PRI);
   SososScheder();//重新調度
   }
 if(TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_STATE==TASK_STATE_SEM_TIMEOUT)
   temp=SOSOS_TASK_TIMEOUT;
 else{
   if((*sem)>0)
     (*sem)--;
   temp=SOSOS_OK;
   }
 EXIT_CRITICAL();
 return temp;
}
#endif

#if SOSOS_COUNT_SEM_ENABLE == 1
void SososCountSemPost(SOSOS_SEM *sem)//發送計數型信號量
//將指定的計數型信號量加一,若有等待該信號量的高優先級任務,則進行任務切換
{
 ENTER_CRITICAL();

 if((*sem)<SOSOS_SEM_MAX_VALUE)
   (*sem)++;

 if((*sem)==1){
   ENABLE_INTERRUPT();

   SOSOS_SEARCH_ALL_WAIT_SIGNAL_TASK((SOSOS_ADDRESS)sem);//搜尋等待信號的任務

   if(test_1(SOSOS_STATE,STATE_SCHED_REQ)&&test_0(SOSOS_STATE,STATE_SCHED_RUN)&&(SOSOS_INT_NEST==0))
     SososScheder();
   }
 EXIT_CRITICAL();
}
#endif

#if SOSOS_LOGIC_SEM_ENABLE == 1
void SososCreateLogicSem(SOSOS_SEM *sem,SOSOS_SEM value)//創建邏輯型信號量
//sem為指向信號量的指針
//value為創建時設置的初始值{
 (*sem)=value;
}
#endif

#if SOSOS_QUERY_SEM_ENABLE == 1 && SOSOS_LOGIC_SEM_ENABLE == 1
SOSOS_SEM SososQueryLogicSem(SOSOS_SEM *sem)//查詢邏輯型信號量
//sem為指向信號量的指針
//信號量空閑返回:SOSOS_SIGNAL_FREE;信號量被占有返回:SOSOS_SIGNAL_ENGROSS{
 return (*sem);
}
#endif

#if SOSOS_LOGIC_SEM_ENABLE == 1
unsigned char SososLogicSemPend(SOSOS_SEM *sem,SOSOS_TIMEOUT_TYPE timeout)//等待邏輯型信號量
//本函數用于等待指定的邏輯型信號量為有效,有效則立即返回,不能用在中斷中
//sem為邏輯型信號量的指針
//timeout為等待時間,單位:時間間隔,0:為無限期等待
{
 unsigned char temp;

 ENTER_CRITICAL();
 if((*sem)==SOSOS_SIGNAL_FREE){
   (*sem)=SOSOS_SIGNAL_ENGROSS;
   }
 else{
   TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_STATE=TASK_STATE_SEM;
   TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].EVENT_INDICATION=(SOSOS_ADDRESS)sem;
   TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_TIMEOUT=timeout;
   SOSOS_TASK_READY[SOSOS_RUNNING_TASK_PRI]=SOSOS_TASK_READY[SOSOS_RUNNING_TASK_PRI]&(~SOSOS_RUNNING_TASK_ID_INDEX);//清除任務就緒狀態
   if(timeout>0)
     set_bit(SOSOS_WAIT_TASK,SOSOS_RUNNING_TASK_PRI);
   SososScheder();//重新調度
   }
 if(TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_STATE==TASK_STATE_SEM_TIMEOUT)
   temp=SOSOS_TASK_TIMEOUT;
 else{
   (*sem)=SOSOS_SIGNAL_ENGROSS;
   temp=SOSOS_OK;
   }
 EXIT_CRITICAL();
 return temp;
}
#endif

#if SOSOS_LOGIC_SEM_ENABLE == 1
void SososLogicSemPost(SOSOS_SEM *sem)//發送邏輯型信號量
//將指定的邏輯型信號量置為可用,若有等待該信號量的高優先級任務,則進行任務切換
{

 ENTER_CRITICAL();
 if((*sem)==SOSOS_SIGNAL_ENGROSS){
   (*sem)=SOSOS_SIGNAL_FREE;

   ENABLE_INTERRUPT();

   SOSOS_SEARCH_ALL_WAIT_SIGNAL_TASK((SOSOS_ADDRESS)sem);//搜尋等待信號的任務

   if(test_1(SOSOS_STATE,STATE_SCHED_REQ)&&test_0(SOSOS_STATE,STATE_SCHED_RUN)&&(SOSOS_INT_NEST==0))
     SososScheder();
   }
 EXIT_CRITICAL();
}
#endif

#if SOSOS_MUTEX_ENABLE == 1
void SososCreateMutex(SOSOS_MUTEX *mutex,unsigned char value)//創建互斥型信號量//mutex為指向信號量的指針,將新加入信號量放在列表的最后
//value為創建信號量時的初始值,可為SOSOS_SIGNAL_FREE或SOSOS_SIGNAL_ENGROSS
{
 SOSOS_MUTEX *point;

 if(SOSOS_MUTEX_POINT==0)//列表為空時,作為第一個成員
   SOSOS_MUTEX_POINT=mutex;
 else{//已有成員時,添加在列表末尾
   point=SOSOS_MUTEX_POINT;
   while(1){
     if((point->NEXT_MUTEX)==0){
       point->NEXT_MUTEX=(SOSOS_ADDRESS)mutex;
       break;
       }
     point=(SOSOS_MUTEX *)point->NEXT_MUTEX;
     }
   }//已有成員時,添加在列表末尾

 mutex->NEXT_MUTEX=0;//表示為最后一個列表成員
 mutex->MUTEX_VALUE=value;
 mutex->INHERIT_PRI=SOSOS_PRI_MAX-1;
}
#endif

#if SOSOS_QUERY_MUTEX_ENABLE == 1
unsigned char SososQueryMutex(SOSOS_MUTEX *mutex)//查詢互斥型信號量狀態
//查詢指定的互斥型信號量的狀態,可用在中斷函數中
{
 return (mutex->MUTEX_VALUE);
}
#endif

#if SOSOS_MUTEX_ENABLE == 1
void SososInsertMutex(SOSOS_MUTEX *mutex)//調整互斥信號量在表內的位置
//系統內部使用,用于調整互斥型信號量在鏈表中的位置,信號量在鏈表中是按
//繼承后的優先級從高到低排列(優先級數值從小到大),沒有被占用的信號量
//的優先級被指定為最低可用優先級
{
 SOSOS_MUTEX *mutex_point,*pre_point;

//從列表中去除指定的信號量
 if(SOSOS_MUTEX_POINT==mutex){//是第一個成員
   SOSOS_MUTEX_POINT=0;
   }//是第一個成員
 else{//不是第一個成員
   mutex_point=SOSOS_MUTEX_POINT;
   while(mutex_point!=0){
     if((mutex_point->NEXT_MUTEX)==(SOSOS_ADDRESS)mutex){
       mutex_point->NEXT_MUTEX=mutex->NEXT_MUTEX;
       break;
       }
     mutex_point=(SOSOS_MUTEX *)mutex_point->NEXT_MUTEX;
     }
   }//不是第一個成員

//按優先級插人該成員
 if(SOSOS_MUTEX_POINT==0){//隊列為空
   SOSOS_MUTEX_POINT=mutex;
   mutex->NEXT_MUTEX=0;
   }//隊列為空
 else{//隊列不空
   if((SOSOS_MUTEX_POINT->INHERIT_PRI)>=(mutex->INHERIT_PRI)){//被插入成員是隊列中的最高優先級成員
     mutex->NEXT_MUTEX=SOSOS_MUTEX_POINT->NEXT_MUTEX;
     SOSOS_MUTEX_POINT=mutex;
     }//被插入成員是隊列中的最高優先級成員
   else{//其他情況
     pre_point=SOSOS_MUTEX_POINT;
     while(1){
       mutex_point=(SOSOS_MUTEX *)(pre_point->NEXT_MUTEX);
       if((mutex_point->INHERIT_PRI)>=(mutex->INHERIT_PRI)){
         pre_point->NEXT_MUTEX=(SOSOS_ADDRESS)mutex;
         mutex->NEXT_MUTEX=(SOSOS_ADDRESS)mutex_point;
         break;
         }
       pre_point=mutex_point;
       }
     }//其他情況
   }//隊列不空
 }

unsigned char SososGetMutex(SOSOS_MUTEX *mutex,SOSOS_TIMEOUT_TYPE timeout)//獲得互斥型信號量
//在規定的時間內等待信號量,若得到信號量返回SOSOS_OK,若超時返回SOSOS_TASK_TIMEOUT
//mutex為請求的互斥型信號量
//timeout為超時時間,單位是ticks;0為無限期等待
{
 unsigned char temp;

 ENTER_CRITICAL();
 if((mutex->MUTEX_VALUE)==SOSOS_SIGNAL_FREE){//信號量空閑
   mutex->INHERIT_PRI=SOSOS_RUNNING_INHERIT_PRI;
   mutex->OWN_TASK_PRI=SOSOS_RUNNING_TASK_PRI;
   mutex->OWN_TASK_ID=SOSOS_RUNNING_TASK_ID;
   mutex->MUTEX_VALUE=SOSOS_SIGNAL_ENGROSS;
   SososInsertMutex(mutex);//調整互斥型信號量列表
   }//信號量空閑
 else{//信號量被占用
   TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_STATE=TASK_STATE_MUTEX;
   TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].EVENT_INDICATION=(SOSOS_ADDRESS)mutex;
   TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_TIMEOUT=timeout;
   SOSOS_TASK_READY[SOSOS_RUNNING_TASK_PRI]=SOSOS_TASK_READY[SOSOS_RUNNING_TASK_PRI]&(~SOSOS_RUNNING_TASK_ID_INDEX);//清除任務就緒狀態
   if(SOSOS_RUNNING_INHERIT_PRI<(mutex->INHERIT_PRI)){
     mutex->INHERIT_PRI=SOSOS_RUNNING_INHERIT_PRI;
     SososInsertMutex(mutex);
     }
   if(timeout>0)
     set_bit(SOSOS_WAIT_TASK,SOSOS_RUNNING_TASK_PRI);
   SososScheder();//重新調度
   }//信號量被占用

 if(TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_STATE==TASK_STATE_MUTEX_TIMEOUT)
   temp=SOSOS_TASK_TIMEOUT;
 else{
   mutex->INHERIT_PRI=SOSOS_RUNNING_INHERIT_PRI;
   mutex->OWN_TASK_PRI=SOSOS_RUNNING_TASK_PRI;
   mutex->OWN_TASK_ID=SOSOS_RUNNING_TASK_ID;
   mutex->MUTEX_VALUE=SOSOS_SIGNAL_ENGROSS;
   SososInsertMutex(mutex);
   temp=SOSOS_OK;
   }
 EXIT_CRITICAL();
 return temp;
}
#endif

#if SOSOS_MUTEX_ENABLE == 1
void SOSOS_MUTEX_SEARCH_ALL_PRI_TASK(SOSOS_MUTEX * POINT)//搜尋等待互斥型信號量的任務
//系統內部使用,用于在任務控制塊中搜索等待指定互斥型信號量的任務
{
 unsigned char i,j;
 SOSOS_TCB *point;

 point=TCB;
 for(i=0;i<SOSOS_PRI_MAX;i++){
   for(j=0;j<SOSOS_MAX_TASK_PER_PRI;j++){
     if(point->TASK_STATE==TASK_STATE_MUTEX){
       if(point->EVENT_INDICATION==(SOSOS_ADDRESS)POINT){
         set_bit(SOSOS_TASK_READY[i],j);
         point->TASK_STATE=TASK_STATE_OK;
         if(SOSOS_RUNNING_INHERIT_PRI>i){
           set_bit(SOSOS_STATE,STATE_SCHED_REQ);
           }
//獲得該互斥型信號量
         POINT->INHERIT_PRI=i;
         POINT->OWN_TASK_PRI=i;
         POINT->OWN_TASK_ID=j;
         POINT->MUTEX_VALUE=SOSOS_SIGNAL_ENGROSS;
         SososInsertMutex(POINT);//調整互斥型信號量列表
         return;
         }
       }
     point++;
     }
   }
//恢復互斥型信號量為空閑狀態
 POINT->INHERIT_PRI=SOSOS_PRI_MAX-1;
 POINT->MUTEX_VALUE=SOSOS_SIGNAL_FREE;
 SososInsertMutex(POINT);//調整互斥型信號量列表
}
#endif

#if SOSOS_MUTEX_ENABLE == 1
void SososFreeMutex(SOSOS_MUTEX *mutex)//釋放互斥型信號量
//釋放指定的互斥型信號量
{
 ENTER_CRITICAL();

 SOSOS_MUTEX_SEARCH_ALL_PRI_TASK(mutex);//搜尋等待互斥型信號量的任務

 if(test_1(SOSOS_STATE,STATE_SCHED_REQ)&&test_0(SOSOS_STATE,STATE_SCHED_RUN)&&(SOSOS_INT_NEST==0))
   SososScheder();
 EXIT_CRITICAL();
}
#endif

#if SOSOS_FLAG_ENABLE ==1
void SososCreateFlag(SOSOS_EVENT_FLAG *FLAG,SOSOS_FLAG_TYPE *point,SOSOS_FLAG_TYPE wait,SOSOS_FLAG_TYPE msk)//創建事件標志
{
//FLAG:事件標記
//point:事件標記組的指針
//wait:事件標記等待的狀態
//msk:事件標記屏蔽碼
 FLAG->FLAG_POINT=point;
 FLAG->FLAG_WAIT=wait&msk;
 FLAG->FLAG_MSK=msk;
}
#endif

#if SOSOS_QUERY_FLAG_ENABLE == 1
SOSOS_FLAG_TYPE SososQueryFlag(SOSOS_EVENT_FLAG *FLAG)//查詢事件標志狀態
{
//FLAG:事件標記
 return ((*(FLAG->FLAG_POINT))&(FLAG->FLAG_MSK));
}
#endif

#if SOSOS_FLAG_ENABLE ==1
unsigned char SososWaitFlag(SOSOS_EVENT_FLAG *FLAG,SOSOS_FLAG_TYPE wait,SOSOS_FLAG_TYPE msk,SOSOS_TIMEOUT_TYPE timeout)//等待指定的事件
{
//FLAG:事件標記
//wait:事件標記等待的狀態
//msk:事件標記屏蔽碼
//timeout:等待溢出延時
 unsigned char temp;
 
 ENTER_CRITICAL();
 FLAG->FLAG_WAIT=wait&msk;
 FLAG->FLAG_MSK=msk;
 if(((*(FLAG->FLAG_POINT))&msk)!=(wait&msk)){
   TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_STATE=TASK_STATE_FLAG;
   TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].EVENT_INDICATION=(SOSOS_ADDRESS)FLAG;
   TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_TIMEOUT=timeout;
   SOSOS_TASK_READY[SOSOS_RUNNING_TASK_PRI]=SOSOS_TASK_READY[SOSOS_RUNNING_TASK_PRI]&(~SOSOS_RUNNING_TASK_ID_INDEX);//清除任務就緒狀態
   if(timeout>0)
     set_bit(SOSOS_WAIT_TASK,SOSOS_RUNNING_TASK_PRI);
   SososScheder();//重新調度
   }
 if(TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_STATE==TASK_STATE_FLAG_TIMEOUT)
   temp=SOSOS_TASK_TIMEOUT;
 else
   temp=SOSOS_OK;
 EXIT_CRITICAL();
 return temp;
}
#endif

#if SOSOS_FLAG_ENABLE ==1
void SOSOS_FLAG_SEARCH_ALL_PRI_TASK(SOSOS_EVENT_FLAG *POINT)//搜尋等待事件標志的任務
{
 unsigned char i,j,tmp;
 SOSOS_TCB *point;

 point=TCB;
 DISABLE_INTERRUPT();
 tmp=*(POINT->FLAG_POINT);

 for(i=0;i<SOSOS_PRI_MAX;i++){
   for(j=0;j<SOSOS_MAX_TASK_PER_PRI;j++){
     if(point->TASK_STATE==TASK_STATE_FLAG){
       if((point->EVENT_INDICATION)==(SOSOS_ADDRESS)POINT){
         if((POINT->FLAG_WAIT)==((POINT->FLAG_MSK)&tmp)){
           set_bit(SOSOS_TASK_READY[i],j);
           point->TASK_STATE=TASK_STATE_OK;
#if SOSOS_MUTEX_ENABLE == 1
           if(SOSOS_RUNNING_INHERIT_PRI>i){
#else
           if(SOSOS_RUNNING_TASK_PRI>i){

#endif
             set_bit(SOSOS_STATE,STATE_SCHED_REQ);
             }
           return;
           }
         }
       }
     point++;
     }
   }
}
#endif

#if SOSOS_FLAG_ENABLE ==1
void SososChangeFlag(SOSOS_EVENT_FLAG *FLAG,SOSOS_FLAG_TYPE flag,unsigned char opt)//改變事件標志
{
//FLAG:事件標記
//flag:要改變的標記位
//opt:進行的操作(設置 或 清除)
 ENTER_CRITICAL();
 if(opt==SOSOS_FLAG_OPT_CLR)
   *(FLAG->FLAG_POINT)&=(~flag);
 else
   *(FLAG->FLAG_POINT)|=flag;
 ENABLE_INTERRUPT();

 SOSOS_FLAG_SEARCH_ALL_PRI_TASK(FLAG);//搜尋等待事件標志的任務

 if(test_1(SOSOS_STATE,STATE_SCHED_REQ)&&test_0(SOSOS_STATE,STATE_SCHED_RUN)&&(SOSOS_INT_NEST==0))
   SososScheder();
 EXIT_CRITICAL();
}
#endif

#if SOSOS_TASK_ENALBE == 1
void SososStartOs(void)//啟動SOSOS系統
{
#if SOSOS_MUTEX_ENABLE == 1
 SOSOS_RUNNING_INHERIT_PRI=SOSOS_PRI_MAX-1;
#endif
 SOSOS_RUNNING_TASK_PRI=SOSOS_PRI_MAX-1;
 SOSOS_RUNNING_TASK_ID=SOSOS_MAX_TASK_PER_PRI-1;
 SOSOS_RUNNING_TASK_ID_INDEX=1<<SOSOS_RUNNING_TASK_ID;
 SososCreateTask(SososIdleTask,SOSOS_RUNNING_TASK_PRI,SOSOS_RUNNING_TASK_ID,IDLE_TASK_STACK_SIZE,(void *)0);//創建idle任務
#if SOSOS_WDT_ENABLE == 1
//看門狗
 wdt_enable(SOSOS_WDT_PERIOD);
 SOSOS_WDT_RST();//復位看門狗
#endif
 SYS_TIMER_INIT();
 SP=TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_STACK_POINT+SOSOS_PUSH_REGISTER_NO; 
 __asm__ __volatile__( "reti" "\n\t" );
}
#endif


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99精品一区二区三区 | 久久精品一区二区三区不卡牛牛| 日本不卡的三区四区五区| 久久只精品国产| a级高清视频欧美日韩| 午夜久久久久久久久| 2020日本不卡一区二区视频| av影院午夜一区| 免费的成人av| 亚洲精品日日夜夜| 精品剧情在线观看| 色狠狠综合天天综合综合| 精品一区二区三区欧美| 亚洲精品日韩专区silk| 精品国产一区二区在线观看| 色呦呦国产精品| 久久99精品国产麻豆不卡| 国产精品美女久久久久久久久久久 | 亚洲精选视频在线| 欧美成人精品二区三区99精品| www.一区二区| 精品午夜一区二区三区在线观看 | 麻豆精品视频在线观看视频| 国产精品理论片| 日韩一级完整毛片| 在线观看91精品国产入口| 国产精品1024| 日本中文字幕一区二区视频 | 亚洲精品自拍动漫在线| 亚洲精品在线免费观看视频| 91国偷自产一区二区三区成为亚洲经典 | 欧美中文字幕不卡| 成人免费高清在线| 九九国产精品视频| 午夜免费久久看| 一区二区三区欧美| 国产精品视频第一区| 精品国产在天天线2019| 欧美精品三级在线观看| 一本色道久久综合精品竹菊| 国产成人鲁色资源国产91色综| 视频一区在线播放| 夜夜爽夜夜爽精品视频| 国产精品人妖ts系列视频| 久久综合色婷婷| 91精品国产综合久久婷婷香蕉| 91免费视频大全| 成人av电影免费观看| 国产成a人亚洲精| 精品系列免费在线观看| 久久精品国产精品青草| 五月综合激情婷婷六月色窝| 一区二区三区四区不卡在线 | 国产99久久久国产精品潘金网站| 久久99最新地址| 久久不见久久见免费视频7| 日韩精品亚洲一区| 亚洲18色成人| 午夜a成v人精品| 日韩综合一区二区| 日韩在线一区二区三区| 日本中文在线一区| 日本va欧美va欧美va精品| 亚洲一区二区精品久久av| 亚洲理论在线观看| 亚洲精品视频观看| 亚洲成人综合网站| 日韩精品久久久久久| 强制捆绑调教一区二区| 蜜臀av一区二区在线免费观看| 日本特黄久久久高潮| 日本欧洲一区二区| 麻豆91精品视频| 国产美女av一区二区三区| 国产呦精品一区二区三区网站| 国产精品亚洲午夜一区二区三区| 国产精品中文字幕日韩精品| 国产成人免费视| 99久精品国产| 欧美三级中文字| 777奇米四色成人影色区| 日韩午夜精品电影| 久久综合999| 国产精品福利影院| 一区二区三区四区亚洲| 亚洲h在线观看| 韩国女主播成人在线| 国产精品88av| 色综合久久88色综合天天6| 欧美日韩一区二区欧美激情| 欧美一区二区网站| 国产日韩亚洲欧美综合| 成人免费视频在线观看| 亚洲超碰精品一区二区| 国产精品一线二线三线精华| 99久免费精品视频在线观看| 欧美日韩久久一区二区| 久久欧美一区二区| 亚洲美女精品一区| 热久久久久久久| 国产69精品一区二区亚洲孕妇| 色综合久久精品| 精品久久久久久久久久久久久久久| 国产欧美日本一区视频| 一区二区三区免费网站| 久久国产三级精品| 色综合久久精品| 日韩美女天天操| 亚洲综合在线视频| 久久成人麻豆午夜电影| 在线免费观看日本欧美| 欧美成人伊人久久综合网| 中文字幕不卡在线观看| 性感美女极品91精品| 国产黄色精品网站| 精品视频在线免费| 中文字幕第一区二区| 午夜精品久久一牛影视| 国产成人精品午夜视频免费| 欧美日韩亚洲国产综合| 国产欧美日韩不卡免费| 日韩av高清在线观看| 91丨porny丨户外露出| 精品国产一区久久| 亚洲高清在线视频| 成人精品国产一区二区4080| 911精品国产一区二区在线| 国产精品久久影院| 精品一区二区国语对白| 欧美日韩一区二区欧美激情| 日韩一区中文字幕| 久久99久久久久| 欧美怡红院视频| 国产精品久久精品日日| 久久99精品国产91久久来源| 欧美日韩不卡一区二区| 亚洲视频一区在线观看| 国产ts人妖一区二区| 日韩一级片在线观看| 亚洲精品欧美综合四区| 懂色av噜噜一区二区三区av| 日韩欧美国产系列| 亚洲大片免费看| 一本一本大道香蕉久在线精品| 国产亚洲婷婷免费| 狠狠狠色丁香婷婷综合激情| 欧美日韩高清影院| 亚洲综合区在线| 91免费看视频| 亚洲欧洲精品成人久久奇米网| 国产精品一级片在线观看| 欧美一区二区三区四区高清| 天天操天天色综合| 日本精品视频一区二区| 日韩一区中文字幕| 色综合天天综合在线视频| 国产精品私人影院| 丁香另类激情小说| 欧美韩国日本综合| 国产成人精品在线看| 国产网站一区二区三区| 国模娜娜一区二区三区| 欧美电视剧在线观看完整版| 欧美aa在线视频| 欧美一区二区在线免费播放| 日韩国产在线观看一区| 欧美精品一级二级| 午夜在线成人av| 在线综合亚洲欧美在线视频| 亚洲成人动漫在线观看| 欧美日韩国产另类不卡| 午夜电影网亚洲视频| 91精品欧美福利在线观看| 蜜桃久久久久久久| 欧美mv日韩mv亚洲| 国产在线精品国自产拍免费| 欧美激情综合在线| 99久久精品国产麻豆演员表| 日韩美女视频一区二区 | 欧美挠脚心视频网站| 日韩av在线播放中文字幕| 欧美一区二区三区白人| 激情文学综合插| 欧美韩国日本不卡| 91美女片黄在线观看91美女| 一区二区三区毛片| 欧美日本韩国一区| 另类专区欧美蜜桃臀第一页| 久久久精品国产免费观看同学| 国产成人av电影免费在线观看| 国产精品女主播在线观看| 91成人网在线| 蜜臀va亚洲va欧美va天堂| 国产日韩三级在线| 99久久国产综合色|国产精品| 亚洲综合色网站| 日韩欧美国产小视频| 成人精品视频一区二区三区| 亚洲线精品一区二区三区| 日韩精品中文字幕一区二区三区|