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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

[自制简单操作系统] 4、计时器(线性表实现优化中断)

發(fā)布時間:2024/4/17 windows 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [自制简单操作系统] 4、计时器(线性表实现优化中断) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

?

1、第一版:數(shù)組方式[09d]

>_<" 在bootpack.h里面的timer.c的聲明和結構體:

1 /* timer.c */ 2 #define MAX_TIMER 500 //最多500個定時器 3 struct TIMER{ 4 unsigned int flags;//flags記錄各個寄存器狀態(tài) 5 unsigned int timeout;//用來記錄離超時還有多長時間,一旦這個剩余時間為0,程序就往FIFO緩沖區(qū)里發(fā)送數(shù)據(jù),定時器就是用這種方法通知HariMain時間到了 6 struct FIFO8 *fifo;//消息隊列 7 unsigned char data;//該定時器標志,用來向消息隊列寫的標志信息 8 }; 9 struct TIMERCTL{ 10 unsigned int count;//計數(shù) 11 struct TIMER timer[MAX_TIMER]; 12 }; 13 extern struct TIMERCTL timerctl; 14 void init_pit(void);//定時器初始化100hz 15 struct TIMER *timer_alloc(void);//分配定時器,遍歷所有找到第一個沒有使用的分配 16 void timer_free(struct TIMER *timer);//釋放定時器 17 void timer_init(struct TIMER *timer, struct FIFO8 *fifo, unsigned char data);//初始化定時器,fifo和標志符data 18 void timer_settime(struct TIMER *timer, unsigned int timeout);//定時器設置,設定剩余時間 19 void inthandler20(int *esp);//定時器中斷函數(shù) 20 //void settimer(unsigned int timeout, struct FIFO8 *fifo, unsigned char data);//設置定時器 1 /* PIT 定時器 */ 2 3 #include "bootpack.h" 4 5 #define PIT_CTRL 0x0043 6 #define PIT_CNT0 0x0040 7 8 struct TIMERCTL timerctl; 9 //struct TIMERCTL timerctl;//計數(shù)器結構體實例化 10 #define TIMER_FLAGS_ALLOC 1 //已配置狀態(tài) 11 #define TIMER_FLAGS_USING 2 //定時器運行中 12 13 / 14 //功能:定時器初始化,要3次OUT指令,(0x34->0x34)(中斷周期低8位->0x40)(高8位->0x40) 15 //參數(shù): 16 //附加:設置結果為主頻/設置數(shù),這里中斷周期設置為0x2e9c,大約為100hz,具體搜:IRQ0中斷周期變更PIT 17 void init_pit(void) 18 { 19 int i; 20 io_out8(PIT_CTRL, 0x34); 21 io_out8(PIT_CNT0, 0x9c); 22 io_out8(PIT_CNT0, 0x2e); 23 timerctl.count=0;//初始化計數(shù)為0 24 // timerctl.timeout=0;//剩余時間為0 25 for(i=0;i<MAX_TIMER;i++){//初始化所有定時器未使用 26 timerctl.timer[i].flags=0;//未使用 27 } 28 return; 29 } 30 / 31 //功能:分配定時器 32 //參數(shù): 33 struct TIMER *timer_alloc(void) 34 { 35 int i; 36 for (i = 0; i < MAX_TIMER; i++) {//從開始開始找沒有使用的定時器,找到后設置為分配狀態(tài),反回 37 if (timerctl.timer[i].flags == 0) { 38 timerctl.timer[i].flags = TIMER_FLAGS_ALLOC; 39 return &timerctl.timer[i]; 40 } 41 } 42 return 0; /* 沒有找到 */ 43 } 44 / 45 //功能:釋放定時器,直接把標志位設為0即可 46 //參數(shù): 47 void timer_free(struct TIMER *timer) 48 { 49 timer->flags = 0; /* 未使用 */ 50 return; 51 } 52 / 53 //功能:初始化定時器,賦值fifo,設置標志位 54 //參數(shù): 55 void timer_init(struct TIMER *timer, struct FIFO8 *fifo, unsigned char data) 56 { 57 timer->fifo = fifo; 58 timer->data = data; 59 return; 60 } 61 / 62 //功能:設置timer 63 //參數(shù):輸入剩余時間 64 void timer_settime(struct TIMER *timer, unsigned int timeout) 65 { 66 timer->timeout = timeout; 67 timer->flags = TIMER_FLAGS_USING; 68 return; 69 } 70 71 72 / 73 //功能:定時器中斷處理程序,和鍵盤鼠標中斷類似 74 //參數(shù): 75 void inthandler20(int *esp) 76 { 77 int i; 78 io_out8(PIC0_OCW2, 0x60); /* 把IRQ-00信號接受完了的信息通知給PIC */ 79 timerctl.count++;//計數(shù) 80 for (i = 0; i < MAX_TIMER; i++) {//遍歷所有的定時器 81 if (timerctl.timer[i].flags == TIMER_FLAGS_USING) {//有正在使用的就剩余時間-- 82 timerctl.timer[i].timeout--; 83 if (timerctl.timer[i].timeout == 0) {//剩余時間為0就直接將標志位改為非使用,將消息寫進隊列 84 timerctl.timer[i].flags = TIMER_FLAGS_ALLOC; 85 fifo8_put(timerctl.timer[i].fifo, timerctl.timer[i].data);////剩余時間為0就向緩沖區(qū)寫數(shù)據(jù),用這種方法通知main函數(shù) 86 } 87 } 88 } 89 return; 90 } 91 / 92 //功能:定時器設置,因為沒有設置好就發(fā)生中斷就會混亂,所以先關閉中斷,然后恢復中斷 93 //參數(shù):初始剩余時間,fifo,標志data(向緩沖區(qū)寫的數(shù)據(jù)) 94 //void settimer(unsigned int timeout, struct FIFO8 *fifo, unsigned char data) 95 //{ 96 // int eflags; 97 // eflags = io_load_eflags(); 98 // io_cli(); 99 // timerctl.timeout = timeout; 100 // timerctl.fifo = fifo; 101 // timerctl.data = data; 102 // io_store_eflags(eflags); 103 // return; 104 //} timer.c

>_<" 這里定義一個計時器結構體和一個管理計時器的結構體,其中TIMERCTL中含有一個timer的數(shù)組,用來實現(xiàn)最多MAX_TIMER個計時器的管理。這里:

  • 初始化的時候只是將所有的定時器的flags賦值為0

  • 分配定時器函數(shù)是從開始遍歷所有定時器,一旦有未使用的就置標志為TIMER_FLAGS_ALLOC,然后返回~

  • 釋放計時器只是簡單的把標志置0,恢復未使用狀態(tài)

  • 計時器初始化函數(shù)是給計時器的fifo,和定時器標志賦值,這里的計時器標志是等計時器計時完畢時向fifo發(fā)送的消息,用來區(qū)分不同的計時器

  • 設置定時器就是給定時器設定一個時間,然后置flags為正在使用

  • 中斷處理函數(shù)每次count++實現(xiàn)時間累加,然后遍歷所有正在使用的定時器,讓他們的剩余時間--,如果發(fā)現(xiàn)剩余時間為0,就向fifo發(fā)送對應消息~

PS: 很顯然,這種處理速度是很慢很慢的!接下來要一步步的優(yōu)化~


?

2、有序數(shù)組[09g] ? ? ? ? ?? ?

>_<" 在bootpack.h里面的timer.c的聲明和結構體:

1 /* timer.c */ 2 #define MAX_TIMER 500 //最多500個定時器 3 struct TIMER{ 4 unsigned int flags;//flags記錄各個寄存器狀態(tài) 5 unsigned int timeout;//用來記錄離超時還有多長時間,一旦這個剩余時間為0,程序就往FIFO緩沖區(qū)里發(fā)送數(shù)據(jù),定時器就是用這種方法通知HariMain時間到了 6 struct FIFO8 *fifo;//消息隊列 7 unsigned char data;//該定時器標志,用來向消息隊列寫的標志信息 8 }; 9 struct TIMERCTL { 10 unsigned int count, next, using;//using表示有幾個定時器處于活動中,next是下一個設定時間點,count是累加時間軸 11 struct TIMER *timers[MAX_TIMER];//記錄按照某種順序存好的定時器地址 12 struct TIMER timers0[MAX_TIMER]; 13 }; 14 extern struct TIMERCTL timerctl; 15 void init_pit(void);//定時器初始化100hz 16 struct TIMER *timer_alloc(void);//分配定時器,遍歷所有找到第一個沒有使用的分配 17 void timer_free(struct TIMER *timer);//釋放定時器 18 void timer_init(struct TIMER *timer, struct FIFO8 *fifo, unsigned char data);//初始化定時器,fifo和標志符data 19 void timer_settime(struct TIMER *timer, unsigned int timeout);//定時器設置,設定剩余時間 20 void inthandler20(int *esp);//定時器中斷函數(shù) 21 //void settimer(unsigned int timeout, struct FIFO8 *fifo, unsigned char data);//設置定時器 1 /* PIT 定時器 */ 2 3 #include "bootpack.h" 4 5 #define PIT_CTRL 0x0043 6 #define PIT_CNT0 0x0040 7 8 struct TIMERCTL timerctl; 9 //struct TIMERCTL timerctl;//計數(shù)器結構體實例化 10 #define TIMER_FLAGS_ALLOC 1 //已配置狀態(tài) 11 #define TIMER_FLAGS_USING 2 //定時器運行中 12 13 / 14 //功能:定時器初始化,要3次OUT指令,(0x34->0x34)(中斷周期低8位->0x40)(高8位->0x40) 15 //參數(shù): 16 //附加:設置結果為主頻/設置數(shù),這里中斷周期設置為0x2e9c,大約為100hz,具體搜:IRQ0中斷周期變更PIT 17 void init_pit(void) 18 { 19 int i; 20 io_out8(PIT_CTRL, 0x34); 21 io_out8(PIT_CNT0, 0x9c); 22 io_out8(PIT_CNT0, 0x2e); 23 timerctl.count=0;//初始化計數(shù)為0 24 timerctl.next=0xffffffff;//初始時沒有計時器所以下一個為無窮大 25 timerctl.using=0;//正在使用的定時器為0 26 27 for(i=0;i<MAX_TIMER;i++){//初始化所有定時器未使用 28 timerctl.timers0[i].flags=0;//未使用 29 } 30 return; 31 } 32 / 33 //功能:分配定時器 34 //參數(shù): 35 struct TIMER *timer_alloc(void) 36 { 37 int i; 38 for (i = 0; i < MAX_TIMER; i++) {//從開始開始找沒有使用的定時器,找到后設置為分配狀態(tài),反回 39 if (timerctl.timers0[i].flags == 0) { 40 timerctl.timers0[i].flags = TIMER_FLAGS_ALLOC; 41 return &timerctl.timers0[i]; 42 } 43 } 44 return 0; /* 沒有找到 */ 45 } 46 / 47 //功能:釋放定時器,直接把標志位設為0即可 48 //參數(shù): 49 void timer_free(struct TIMER *timer) 50 { 51 timer->flags = 0; /* 未使用 */ 52 return; 53 } 54 / 55 //功能:初始化定時器,賦值fifo,設置標志位 56 //參數(shù): 57 void timer_init(struct TIMER *timer, struct FIFO8 *fifo, unsigned char data) 58 { 59 timer->fifo = fifo; 60 timer->data = data; 61 return; 62 } 63 / 64 //功能:設置timer 65 //參數(shù):輸入定時時間 66 void timer_settime(struct TIMER *timer, unsigned int timeout) 67 { 68 int e, i, j; 69 timer->timeout = timeout + timerctl.count;//當前時間+定時器定時時間 70 timer->flags = TIMER_FLAGS_USING;//設置成正在使用 71 e = io_load_eflags();//保存寄存器,關中斷 72 io_cli(); 73 /* 搜索注冊位置 */ 74 for (i = 0; i < timerctl.using; i++) {//把所有timeout從小到大排列,找出新建的定時器插入位置 75 if (timerctl.timers[i]->timeout >= timer->timeout) { 76 break; 77 } 78 } 79 /* i之后的全部后移1位 */ 80 for (j = timerctl.using; j > i; j--) { 81 timerctl.timers[j] = timerctl.timers[j - 1]; 82 } 83 timerctl.using++; 84 /* 插入到空位上 */ 85 timerctl.timers[i] = timer; 86 timerctl.next = timerctl.timers[0]->timeout; 87 io_store_eflags(e);//恢復寄存器 88 return; 89 } 90 91 92 / 93 //功能:定時器中斷處理程序,和鍵盤鼠標中斷類似 94 //參數(shù): 95 void inthandler20(int *esp) 96 { 97 int i,j; 98 io_out8(PIC0_OCW2, 0x60); /* 把IRQ-00信號接受完了的信息通知給PIC */ 99 timerctl.count++;//計數(shù) 100 if(timerctl.next>timerctl.count){//如果下一個還沒計數(shù)完畢就直接返回 101 return; 102 } 103 for(i=0;i<timerctl.using;i++){ 104 if(timerctl.timers[i]->timeout>timerctl.count){ 105 break; 106 }//從前往后遍歷,一旦發(fā)現(xiàn)有計時未完成的計時器就跳出循環(huán) 107 /*除了上面的情況,都是定時已達的定時器*/ 108 timerctl.timers[i]->flags = TIMER_FLAGS_ALLOC; 109 fifo8_put(timerctl.timers[i]->fifo, timerctl.timers[i]->data); 110 } 111 /*從上面循環(huán)結束后,i的值就是前面有幾個超時的定時器*/ 112 timerctl.using-=i;//所以減去超時的定時器 113 for(j=0;j<timerctl.using;j++){//將后面的定時器前移 114 timerctl.timers[j]=timerctl.timers[i+j]; 115 } 116 if(timerctl.using>0){//判斷是否還有正在使用的定時器,有就用下一個剩余時間更新next 117 timerctl.next=timerctl.timers[0]->timeout; 118 }else{//沒有,就直接設為無窮大 119 timerctl.next=0xffffffff; 120 } 121 return; 122 } timer.c

>_<" 這里和上一個的最大的不同之處是:上一個采用暴力遍歷每一個的情況,而這個則采用插入和刪除等操作時就事先調整好數(shù)組。此外為了方便實現(xiàn)這一數(shù)據(jù)結構,TIMERCTL里除了用timers0[]數(shù)組保存計時器外,還聲明一個timers[]數(shù)組用來記錄按照某種順序排好的定時器,這里的using是出于活動中的定時器數(shù),next是下一個設定的時間:

  • 初始化函數(shù)改變比較少,只是加了個using=0,next=0xffffffff等初始化賦值操作

  • 分配定時器基本無變化

  • 設定時間函數(shù)則從前往后遍歷查找該新的定時器要插入的位置,因為這里是有序排列的,而且只遍歷正在使用中的定時器,所以比上一個純暴力要快

  • 中斷函數(shù),是將當前前面的已經(jīng)超時的定時器發(fā)送消息及取消使用狀態(tài),然后從有序列表里面刪除這些(具體做法就是前移后面的部分覆蓋這部分超時的部分)


?

3、線性表[10h] ? ? ? ? ? ? ? ? ??

>_<" 在bootpack.h里面的timer.c的聲明和結構體:

1 /* timer.c */ 2 #define MAX_TIMER 500 //最多500個定時器 3 struct TIMER{ 4 struct TIMER *next;//用來指下一個即將超時的定時器地址 5 unsigned int flags;//flags記錄各個寄存器狀態(tài) 6 unsigned int timeout;//用來記錄離超時還有多長時間,一旦這個剩余時間為0,程序就往FIFO緩沖區(qū)里發(fā)送數(shù)據(jù),定時器就是用這種方法通知HariMain時間到了 7 struct FIFO32 *fifo;//消息隊列 8 int data;//該定時器標志,用來向消息隊列寫的標志信息 9 }; 10 struct TIMERCTL { 11 unsigned int count, next, using;//using表示有幾個定時器處于活動中,next是下一個設定時間點,count是累加時間軸 12 struct TIMER *t0;//記錄按照某種順序存好的定時器地址,頭指針 13 struct TIMER timers0[MAX_TIMER]; 14 }; 15 extern struct TIMERCTL timerctl; 16 void init_pit(void);//定時器初始化100hz 17 struct TIMER *timer_alloc(void);//分配定時器,遍歷所有找到第一個沒有使用的分配 18 void timer_free(struct TIMER *timer);//釋放定時器 19 void timer_init(struct TIMER *timer, struct FIFO32 *fifo, int data);//初始化定時器,fifo和標志符data 20 void timer_settime(struct TIMER *timer, unsigned int timeout);//定時器設置,設定剩余時間 21 void inthandler20(int *esp);//定時器中斷函數(shù) 1 /* PIT 定時器 */ 2 3 #include "bootpack.h" 4 5 #define PIT_CTRL 0x0043 6 #define PIT_CNT0 0x0040 7 8 struct TIMERCTL timerctl; 9 //struct TIMERCTL timerctl;//計數(shù)器結構體實例化 10 #define TIMER_FLAGS_ALLOC 1 //已配置狀態(tài) 11 #define TIMER_FLAGS_USING 2 //定時器運行中 12 13 / 14 //功能:定時器初始化,要3次OUT指令,(0x34->0x34)(中斷周期低8位->0x40)(高8位->0x40) 15 //參數(shù): 16 //附加:設置結果為主頻/設置數(shù),這里中斷周期設置為0x2e9c,大約為100hz,具體搜:IRQ0中斷周期變更PIT 17 void init_pit(void) 18 { 19 int i; 20 io_out8(PIT_CTRL, 0x34); 21 io_out8(PIT_CNT0, 0x9c); 22 io_out8(PIT_CNT0, 0x2e); 23 timerctl.count=0;//初始化計數(shù)為0 24 timerctl.next=0xffffffff;//初始時沒有計時器所以下一個為無窮大 25 timerctl.using=0;//正在使用的定時器為0 26 27 for(i=0;i<MAX_TIMER;i++){//初始化所有定時器未使用 28 timerctl.timers0[i].flags=0;//未使用 29 } 30 return; 31 } 32 / 33 //功能:分配定時器 34 //參數(shù): 35 struct TIMER *timer_alloc(void) 36 { 37 int i; 38 for (i = 0; i < MAX_TIMER; i++) {//從開始開始找沒有使用的定時器,找到后設置為分配狀態(tài),反回 39 if (timerctl.timers0[i].flags == 0) { 40 timerctl.timers0[i].flags = TIMER_FLAGS_ALLOC; 41 return &timerctl.timers0[i]; 42 } 43 } 44 return 0; /* 沒有找到 */ 45 } 46 / 47 //功能:釋放定時器,直接把標志位設為0即可 48 //參數(shù): 49 void timer_free(struct TIMER *timer) 50 { 51 timer->flags = 0; /* 未使用 */ 52 return; 53 } 54 / 55 //功能:初始化定時器,賦值fifo,設置標志位 56 //參數(shù): 57 void timer_init(struct TIMER *timer, struct FIFO32 *fifo, int data) 58 { 59 timer->fifo = fifo; 60 timer->data = data; 61 return; 62 } 63 / 64 //功能:設置timer 65 //參數(shù):輸入定時時間 66 void timer_settime(struct TIMER *timer, unsigned int timeout) 67 { 68 int e; 69 struct TIMER *t,*s; 70 timer->timeout = timeout + timerctl.count;//當前時間+定時器定時時間 71 timer->flags = TIMER_FLAGS_USING;//設置成正在使用 72 e = io_load_eflags();//保存寄存器,關中斷 73 io_cli(); 74 75 timerctl.using++; 76 if (timerctl.using == 1) { 77 /* 處于運行狀態(tài)的只有一個 */ 78 timerctl.t0 = timer; 79 timer->next = 0; /* 沒有下一個 */ 80 timerctl.next = timer->timeout; 81 io_store_eflags(e); 82 return; 83 } 84 t = timerctl.t0; 85 if (timer->timeout <= t->timeout) { 86 /* 插入最前面 */ 87 timerctl.t0 = timer; 88 timer->next = t; /* 下面是t */ 89 timerctl.next = timer->timeout; 90 io_store_eflags(e); 91 return; 92 } 93 /* 搜尋插入位置 */ 94 for (;;) { 95 s = t; 96 t = t->next; 97 if (t == 0) { 98 break; /* 最后面 */ 99 } 100 if (timer->timeout <= t->timeout) { 101 /* 插入到s和t之間 */ 102 s->next = timer; /* s的先一個是timer */ 103 timer->next = t; /* timer的下一個是t */ 104 io_store_eflags(e); 105 return; 106 } 107 } 108 /* 插入最后面的情況 */ 109 s->next = timer; 110 timer->next = 0; 111 io_store_eflags(e); 112 return; 113 } 114 115 / 116 //功能:定時器中斷處理程序,和鍵盤鼠標中斷類似 117 //參數(shù): 118 void inthandler20(int *esp) 119 { 120 int i,j; 121 struct TIMER *timer; 122 io_out8(PIC0_OCW2, 0x60); /* 把IRQ-00信號接受完了的信息通知給PIC */ 123 timerctl.count++;//計數(shù) 124 if(timerctl.next>timerctl.count){//如果下一個還沒計數(shù)完畢就直接返回 125 return; 126 } 127 timer=timerctl.t0;//把最前面的地址賦址給timer 128 for(i=0;i<timerctl.using;i++){ 129 if(timer->timeout>timerctl.count){ 130 break; 131 }//從前往后遍歷,一旦發(fā)現(xiàn)有計時未完成的計時器就跳出循環(huán) 132 /*除了上面的情況,都是定時已達的定時器*/ 133 timer->flags = TIMER_FLAGS_ALLOC; 134 fifo32_put(timer->fifo, timer->data); 135 timer=timer->next;//下一個定時器的地址賦址給timer 136 } 137 /*從上面循環(huán)結束后,i的值就是前面有幾個超時的定時器*/ 138 timerctl.using-=i;//所以減去超時的定時器 139 timerctl.t0=timer;//新移位 140 //timectl.next設定 141 if(timerctl.using>0){//判斷是否還有正在使用的定時器,有就用下一個剩余時間更新next 142 timerctl.next=timerctl.t0->timeout; 143 }else{//沒有,就直接設為無窮大 144 timerctl.next=0xffffffff; 145 } 146 return; 147 } timer.c

>_<" 通過上面2個優(yōu)化的實例發(fā)現(xiàn),用數(shù)組避免不了大量數(shù)據(jù)的前移和后移,于是我們就想到了用指針來構成線性表,這樣交換插入都可以在幾步之能完成!這里在結構體TIMER里加入了*next指針,用來存放下一個即將超時的定時器地址。

  • 這里中斷處理函數(shù)只是把上面數(shù)組實現(xiàn)的有序數(shù)組改成用指針實現(xiàn)的有序鏈表,這樣交換和插入數(shù)據(jù)就不用一塊一塊的移位了,直接切換一下指針就能夠完成了,所以能夠優(yōu)化中斷處理能力!

  • 這里的settimer函數(shù)也類似,這里不做詳細介紹,直接看代碼就能理解啦!

PS: 在使用線性表之后發(fā)現(xiàn)TIMERCTR結構體里的TIMER數(shù)組可以只要一個首地址就行了,于是也簡化為*t0


?

4、使用“哨兵”簡化程序[10i]

>_<" 在bootpack.h里面的timer.c的聲明和結構體:

1 /* timer.c */ 2 #define MAX_TIMER 500 //最多500個定時器 3 struct TIMER{ 4 struct TIMER *next;//用來指下一個即將超時的定時器地址 5 unsigned int flags;//flags記錄各個寄存器狀態(tài) 6 unsigned int timeout;//用來記錄離超時還有多長時間,一旦這個剩余時間為0,程序就往FIFO緩沖區(qū)里發(fā)送數(shù)據(jù),定時器就是用這種方法通知HariMain時間到了 7 struct FIFO32 *fifo;//消息隊列 8 int data;//該定時器標志,用來向消息隊列寫的標志信息 9 }; 10 struct TIMERCTL { 11 unsigned int count, next;//next是下一個設定時間點,count是累加時間軸 12 struct TIMER *t0;//記錄按照某種順序存好的定時器地址,頭指針 13 struct TIMER timers0[MAX_TIMER]; 14 }; 15 extern struct TIMERCTL timerctl; 16 void init_pit(void);//定時器初始化100hz 17 struct TIMER *timer_alloc(void);//分配定時器,遍歷所有找到第一個沒有使用的分配 18 void timer_free(struct TIMER *timer);//釋放定時器 19 void timer_init(struct TIMER *timer, struct FIFO32 *fifo, int data);//初始化定時器,fifo和標志符data 20 void timer_settime(struct TIMER *timer, unsigned int timeout);//定時器設置,設定剩余時間 21 void inthandler20(int *esp);//定時器中斷函數(shù) 1 /* PIT 定時器 */ 2 3 #include "bootpack.h" 4 5 #define PIT_CTRL 0x0043 6 #define PIT_CNT0 0x0040 7 8 struct TIMERCTL timerctl; 9 //struct TIMERCTL timerctl;//計數(shù)器結構體實例化 10 #define TIMER_FLAGS_ALLOC 1 //已配置狀態(tài) 11 #define TIMER_FLAGS_USING 2 //定時器運行中 12 13 / 14 //功能:定時器初始化,要3次OUT指令,(0x34->0x34)(中斷周期低8位->0x40)(高8位->0x40) 15 //參數(shù): 16 //附加:設置結果為主頻/設置數(shù),這里中斷周期設置為0x2e9c,大約為100hz,具體搜:IRQ0中斷周期變更PIT 17 void init_pit(void) 18 { 19 int i; 20 struct TIMER *t; 21 io_out8(PIT_CTRL, 0x34); 22 io_out8(PIT_CNT0, 0x9c); 23 io_out8(PIT_CNT0, 0x2e); 24 timerctl.count=0;//初始化計數(shù)為0 25 for(i=0;i<MAX_TIMER;i++){//初始化所有定時器未使用 26 timerctl.timers0[i].flags=0;//未使用 27 } 28 t=timer_alloc();//取得一個 29 t->timeout=0xffffffff; 30 t->flags=TIMER_FLAGS_USING; 31 t->next=0;//末尾 32 timerctl.t0=t;//現(xiàn)在就一個 33 timerctl.next=0xffffffff;//下一個計時器為哨兵,所以下一個為無窮大 34 return; 35 } 36 / 37 //功能:分配定時器 38 //參數(shù): 39 struct TIMER *timer_alloc(void) 40 { 41 int i; 42 for (i = 0; i < MAX_TIMER; i++) {//從開始開始找沒有使用的定時器,找到后設置為分配狀態(tài),反回 43 if (timerctl.timers0[i].flags == 0) { 44 timerctl.timers0[i].flags = TIMER_FLAGS_ALLOC; 45 return &timerctl.timers0[i]; 46 } 47 } 48 return 0; /* 沒有找到 */ 49 } 50 / 51 //功能:釋放定時器,直接把標志位設為0即可 52 //參數(shù): 53 void timer_free(struct TIMER *timer) 54 { 55 timer->flags = 0; /* 未使用 */ 56 return; 57 } 58 / 59 //功能:初始化定時器,賦值fifo,設置標志位 60 //參數(shù): 61 void timer_init(struct TIMER *timer, struct FIFO32 *fifo, int data) 62 { 63 timer->fifo = fifo; 64 timer->data = data; 65 return; 66 } 67 / 68 //功能:設置timer 69 //參數(shù):輸入定時時間 70 void timer_settime(struct TIMER *timer, unsigned int timeout) 71 { 72 int e; 73 struct TIMER *t,*s; 74 timer->timeout = timeout + timerctl.count;//當前時間+定時器定時時間 75 timer->flags = TIMER_FLAGS_USING;//設置成正在使用 76 e = io_load_eflags();//保存寄存器,關中斷 77 io_cli(); 78 79 t=timerctl.t0; 80 if (timer->timeout <= t->timeout) { 81 /* 插入最前面的情況 */ 82 timerctl.t0 = timer; 83 timer->next = t; /* 下面是設定t */ 84 timerctl.next = timer->timeout; 85 io_store_eflags(e); 86 return; 87 } 88 /* 搜尋插入位置 */ 89 for (;;) { 90 s = t; 91 t = t->next; 92 if (timer->timeout <= t->timeout) { 93 /* 插入s和t之間 */ 94 s->next = timer; /* s下一個是timer */ 95 timer->next = t; /* timer下一個是t */ 96 io_store_eflags(e); 97 return; 98 } 99 } 100 return; 101 } 102 103 / 104 //功能:定時器中斷處理程序,和鍵盤鼠標中斷類似 105 //參數(shù): 106 void inthandler20(int *esp) 107 { 108 struct TIMER *timer; 109 io_out8(PIC0_OCW2, 0x60); /* 把IRQ-00信號接受完了的信息通知給PIC */ 110 timerctl.count++; 111 if (timerctl.next > timerctl.count) {//如果下一個還沒計數(shù)完畢就直接返回 112 return; 113 } 114 timer = timerctl.t0; //把最前面的地址賦址給timer 115 for (;;) { 116 if (timer->timeout > timerctl.count) { 117 break; 118 }//從前往后遍歷,一旦發(fā)現(xiàn)有計時未完成的計時器就跳出循環(huán) 119 /*除了上面的情況,都是定時已達的定時器*/ 120 timer->flags = TIMER_FLAGS_ALLOC; 121 fifo32_put(timer->fifo, timer->data); 122 timer = timer->next;//下一個定時器的地址賦址給timer 123 } 124 timerctl.t0 = timer;//新移位 125 timerctl.next = timer->timeout;//timectl.next設定 126 return; 127 } timer.c

>_<" “哨兵”聽起來高大上,其實就是在10g的線性表的基礎上多加一個空結點,這樣就能把插入結點時的判斷條件減少很多,用來達到精簡代碼的目的~其實由于多了一個空結點,這種處理雖然代碼精簡了,但是其速度就沒有上面純的線性表快了~這里就不仔細介紹細節(jié)的東西了,相信大家一看就懂~


?

5、工程代碼鏈接: ? ? ? ?

包含上面項目工程的所有代碼:http://pan.baidu.com/s/1bnEkjWN

LZ主頁:http://www.cnblogs.com/zjutlitao/

1 /* 2 同一占用一個fifo,這里: 3 0~1 光標閃爍用定時器 4 3 3秒定時器 5 10 10秒定時器 6 256~511 鍵盤輸入(從鍵盤控制器讀入的值再加上256) 7 512~767 鼠標輸入(從鍵盤控制器讀入的值再加上512) 8 */

?

轉載于:https://www.cnblogs.com/zjutlitao/p/3983279.html

總結

以上是生活随笔為你收集整理的[自制简单操作系统] 4、计时器(线性表实现优化中断)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

日韩二区三区 | 国产伦精品一区二区三区… | 国产婷婷在线观看 | 成人在线黄色 | 99久久er热在这里只有精品66 | 亚洲视频在线免费观看 | 一区二区三区精品久久久 | 久久久免费观看完整版 | 久久综合色8888 | 2020天天干夜夜爽 | 日韩av成人在线观看 | 波多野结依在线观看 | 日韩一区二区三区观看 | 国产精品成人国产乱 | 亚洲午夜精品久久久 | 99久久精| 久久久久久久久精 | 色国产精品| 国产区高清在线 | 91丨九色丨勾搭 | 91精品1区2区 | 97视频在线观看成人 | 亚洲va欧美va | 一区二区久久久久 | 97超碰人人在线 | 精品在线亚洲视频 | 99久久精品国产观看 | 在线免费精品视频 | 99久高清在线观看视频99精品热在线观看视频 | 天天操天天操天天操天天 | 欧美综合在线视频 | 亚洲精品国产自产拍在线观看 | 最近中文字幕在线中文高清版 | 国产色视频一区 | 91九色蝌蚪视频网站 | 国产探花 | 免费观看一级视频 | 青青草国产精品 | 天天操天天操天天爽 | 精品国产不卡 | 在线观看亚洲电影 | 成年人在线视频观看 | 手机在线观看国产精品 | 国产午夜三级 | 99精品视频免费看 | 国产高清专区 | 久久精品久久精品久久39 | 免费色视频在线 | 免费看的黄色小视频 | 久久在现| 国产91精品在线观看 | 日韩精品一区二区三区丰满 | 久久99精品久久久久久清纯直播 | 久久国产免费 | 亚洲一区尤物 | 国产精品永久免费在线 | 天天鲁天天干天天射 | 成年人免费av网站 | 91在线播| 狠狠操电影网 | 亚洲成人精品在线观看 | 久久er99热精品一区二区 | 国产手机视频在线播放 | 亚洲午夜精品久久久久久久久久久久 | 免费观看国产精品 | 中文永久免费观看 | 国产精品99免视看9 国产精品毛片一区视频 | 久青草电影 | 亚洲专区免费观看 | 免费av影视 | 草久中文字幕 | 国产一卡二卡四卡国 | 99成人在线视频 | 欧美怡红院 | 亚洲国产精品传媒在线观看 | 免费在线国产视频 | 久久久综合九色合综国产精品 | 免费视频 你懂的 | 国产毛片久久久 | 欧美日韩aaaa | 国产在线观看二区 | 欧美另类视频 | 91热视频| 亚洲国产播放 | 2019精品手机国产品在线 | 成人av免费电影 | 国产日韩欧美在线看 | 国产精品国内免费一区二区三区 | 在线看av网址 | 久久综合欧美精品亚洲一区 | 精品一区 在线 | 国产精品成人免费精品自在线观看 | 九九免费在线观看 | 精品国产一区二区三区日日嗨 | 超碰国产97 | 国产精品精品国产色婷婷 | 国产视频一区在线免费观看 | 国产成人一区二区精品非洲 | 三级在线国产 | 精品国产一区二区三区久久久蜜臀 | 在线观看香蕉视频 | a视频在线 | 国产理论免费 | 成年人国产视频 | 久久伊99综合婷婷久久伊 | 久久黄色网页 | 最新av网址在线观看 | 精品久久免费看 | www.一区二区三区 | 韩国av三级 | 97在线视频网站 | 久久视频在线免费观看 | 成人免费在线观看入口 | 久久网页 | 国产精品激情偷乱一区二区∴ | 99在线精品视频观看 | 国产精品亚洲视频 | 狠狠色噜噜狠狠 | 在线看日韩av | 黄色a三级| 亚洲国产中文字幕在线观看 | 中文字幕亚洲字幕 | 久久久精品高清 | 成人va视频| 国产色视频网站 | 超碰免费在线公开 | 亚洲春色奇米影视 | 欧美 日韩 国产 中文字幕 | 日韩亚洲精品电影 | 久久精品xxx | 成人黄色中文字幕 | 国产激情电影综合在线看 | 男女精品久久 | 黄网在线免费观看 | 国产不卡片 | 国产免码va在线观看免费 | 午夜久久久久久久久久久 | 久久全国免费视频 | 99久久精品免费看国产一区二区三区 | 三级在线国产 | 亚洲爱视频| 99在线视频网站 | 国产精品久久久久久久久软件 | 久草在线久草在线2 | 国产精品一区二区 91 | 午夜精品久久久久久久99热影院 | 特级西西444www大精品视频免费看 | 国产无套精品久久久久久 | 91免费高清观看 | 精品久久一级片 | 日韩免费电影在线观看 | 亚洲视频在线观看网站 | 欧美精品久久久久久久久免 | 91丨九色丨国产丨porny精品 | 亚洲国产精品500在线观看 | 欧美aaa视频| 亚洲一区二区三区毛片 | 免费视频xnxx com| 久久精品综合一区 | 日韩精品欧美专区 | 天天操夜夜干 | 成人午夜电影在线播放 | 日本精品久久 | 国产一区免费观看 | 又黄又爽免费视频 | 久久伊人爱 | 亚洲视频一级 | 成人app在线播放 | 久草视频手机在线 | 色综合久久88色综合天天免费 | 一区二区三区久久 | 手机在线视频福利 | 国产99久久精品一区二区永久免费 | 蜜桃久久久| 五月天天色 | 色天堂在线视频 | 国产午夜亚洲精品 | 国产专区欧美专区 | 99精品视频一区二区 | 天天干天天操天天干 | 天天操,夜夜操 | 久章草在线观看 | 欧美日韩精品在线观看视频 | 欧美极品xxx| 一区二区电影在线观看 | 国产精品成人av电影 | 一区二区三区视频网站 | 福利一区在线视频 | 精品亚洲欧美无人区乱码 | 在线亚洲欧美视频 | 在线看欧美 | 一级黄色片在线免费看 | 亚洲一区二区高潮无套美女 | 欧美精品xx | 亚洲精品88欧美一区二区 | 欧美另类网站 | 九九色在线观看 | 天天色天天干天天 | 欧美一级片在线 | 亚洲国产精品99久久久久久久久 | 缴情综合网五月天 | 久久久久久久免费看 | 91麻豆精品国产91久久久久久 | 日韩三级不卡 | 久久久免费在线观看 | 热久精品 | 欧美日本不卡视频 | 亚洲资源片| 成人一区二区在线 | 色综合久久久久久久 | 国产成人一区二区三区免费看 | 久久影视一区二区 | 免费看成人av | 国产视频99| 欧美亚洲国产一卡 | 91久久国产露脸精品国产闺蜜 | 狠狠狠色狠狠色综合 | 国产一区二区精 | 久久影院中文字幕 | 久久久精品国产一区二区三区 | 久草在线免费电影 | 4hu视频 | 免费观看视频的网站 | 国产精品一区二区你懂的 | 午夜国产一区二区 | 黄色视屏免费在线观看 | 日本h视频在线观看 | 成人国产精品一区二区 | 91人人爽人人爽人人精88v | 免费国产在线观看 | 亚洲国产字幕 | 国产精品免费久久久久久久久久中文 | 超碰97中文 | 国产精品免费在线播放 | 波多野结衣最新 | 狠狠做深爱婷婷综合一区 | 综合影视 | 在线观看激情av | 九九免费精品视频在线观看 | 国产精品黄网站在线观看 | 日韩专区 在线 | 高清国产午夜精品久久久久久 | 天天玩天天干天天操 | 国产免费二区 | 国产成人精品三级 | 午夜性福利 | 免费高清在线视频一区· | 精品国内| 99se视频在线观看 | 免费观看第二部31集 | 激情视频区 | 人人干天天干 | 超碰在线观看av.com | 在线播放91 | 99久久婷婷国产综合精品 | 久久久国产精品免费 | 91大片网站| 美女精品在线 | 日韩在线在线 | 91成人在线视频 | 久久国产经典视频 | 在线看日韩av | 久久99电影| 免费a级毛片在线看 | 国产69精品久久久久9999apgf | 日本精品久久久久中文字幕5 | 99久久综合狠狠综合久久 | 免费污片| 青青看片 | 久久在线免费视频 | 香蕉网在线观看 | 日av免费 | av在线之家电影网站 | 久久夜视频 | 人人澡人| 成年人电影免费看 | 九色精品在线 | 欧美国产精品一区二区 | 亚洲一区欧美激情 | 日韩在线第一区 | 不卡视频国产 | 亚洲一区黄色 | 最近最新最好看中文视频 | 永久免费av在线播放 | 国产美女搞久久 | 亚洲色图27p| 九九九九九精品 | 97超级碰碰碰碰久久久久 | 91九色视频在线 | sm免费xx网站 | 久久免费的视频 | www.成人久久 | 中午字幕在线观看 | 91精品视频免费看 | 在线韩国电影免费观影完整版 | 九九精品久久 | 成全免费观看视频 | 激情欧美丁香 | 日韩在线免费高清视频 | 日日夜夜精品 | 六月色丁香 | 午夜三级理论 | 国产69精品久久久久久久久久 | 黄色精品免费 | 国产啊v在线 | 在线看v片成人 | 亚洲国产精品一区二区久久,亚洲午夜 | 韩日成人av | 欧美有色 | 综合网成人 | 98福利在线 | 天天插狠狠干 | 四虎视频 | 国产精品视频99 | 精品久久久久久电影 | 成人性生交大片免费看中文网站 | 欧美精品一区二区免费 | 黄色特一级 | 欧美日bb | 亚洲区精品 | 天天天插| 国产群p视频 | 国产成人精品a | 国产一区国产二区在线观看 | 婷婷综合伊人 | 精品中文字幕在线播放 | 欧美日韩国产综合网 | 国产男女免费完整视频 | 97视频在线免费 | 国产亚洲婷婷免费 | 中文字幕资源在线 | 久久久99精品免费观看app | 人人玩人人添人人澡97 | 超碰免费97 | 成人精品亚洲 | 狠狠色丁香婷婷综合久小说久 | 美女视频久久 | 九九日韩 | 久草在线这里只有精品 | 中文字幕中文字幕 | 精品国自产在线观看 | 国产精品成人一区二区三区 | 国产精品免费看 | 国产小视频在线免费观看视频 | 波多野结衣视频在线 | 亚洲精品xxx | 国产精品一级视频 | 久精品视频在线观看 | 欧美ⅹxxxxxx | 精品一区精品二区 | 亚洲高清91 | 亚洲精品人人 | 天堂av在线网址 | 久久精品久久99精品久久 | 国产99久久久久久免费看 | 国产麻豆精品在线观看 | 天天干,天天干 | 国产精品免费麻豆入口 | 国产在线一区观看 | 96av在线视频 | 手机看片中文字幕 | 久久久久网站 | 91热视频在线观看 | 免费国产在线精品 | 99精品视频在线观看免费 | 97成人免费视频 | 男女激情网址 | 久久免费在线观看视频 | 粉嫩av一区二区三区免费 | 久久色网站 | 久久黄色小说视频 | 99亚洲精品 | 久久欧美在线电影 | 日本中文一级片 | 国产999精品久久久影片官网 | 久久经典国产视频 | 亚洲一区视频免费观看 | 亚洲成人xxx | 欧美污在线观看 | 日本韩国精品一区二区在线观看 | 日本精品免费看 | 欧美日韩国产在线精品 | 日韩精品一区二区三区中文字幕 | 丁香五月亚洲综合在线 | 伊香蕉大综综综合久久啪 | 成人午夜性影院 | 91看毛片 | 久久久久久久久久久久久久电影 | 六月丁香综合网 | 91久久国产露脸精品国产闺蜜 | 日韩天天干| 成人av影院在线观看 | 狠狠狠的干| 久久一区91 | 久久午夜电影院 | 欧美 日韩 成人 | 13日本xxxxxⅹxxx20 | 激情黄色一级片 | 国产欧美精品一区二区三区四区 | 国产伦理精品一区二区 | 国产精品一区二区久久国产 | 久久国产高清视频 | 久久伊人爱 | 免费视频你懂得 | 日韩av在线一区二区 | 国产一区二区高清不卡 | 久久99久久久久久 | 亚洲aaa级 | 日韩av二区 | 欧美日韩在线观看一区二区 | 99av国产精品欲麻豆 | 91欧美日韩国产 | 精品国产免费久久 | 亚洲视频免费视频 | 国产中文字幕在线视频 | 麻豆视频免费在线观看 | 69精品在线观看 | 久久精品视频一 | 91av超碰| 国产精品永久免费 | 中文永久免费观看 | 丁香六月国产 | 天天插伊人 | 黄色a一级片 | 成人在线视频在线观看 | 久久香蕉国产 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 91热在线| 久久国产高清视频 | 日韩精品在线免费播放 | 国产精品96久久久久久吹潮 | 欧美性极品xxxx娇小 | 国产精品99久久99久久久二8 | 91精品啪在线观看国产81旧版 | 国产在线观看你懂得 | 九九热在线视频免费观看 | 丁香六月婷 | 欧美激情视频在线免费观看 | 狠狠色丁香婷婷综合最新地址 | 亚洲三级在线免费观看 | 揉bbb玩bbb少妇bbb | 日韩电影一区二区三区在线观看 | 99精品视频在线 | 99在线免费观看视频 | 国产精品99久久久久久人免费 | 五月激情片 | 国产伦精品一区二区三区免费 | 亚洲午夜精品久久久久久久久久久久 | 国产不卡精品 | 久久久久日本精品一区二区三区 | 国产永久免费高清在线观看视频 | 在线国产高清 | 国产二区免费视频 | 中文字幕观看av | 狠狠88综合久久久久综合网 | 久久五月天综合 | 日本精品视频在线 | 四虎成人在线 | 一区二区三区久久 | 午夜精品福利一区二区三区蜜桃 | 久久精品理论 | 天天综合日日夜夜 | 国产日韩精品在线观看 | 精品国产亚洲一区二区麻豆 | 日本久久成人中文字幕电影 | 欧美午夜性生活 | 久久午夜电影网 | 一区在线观看视频 | 伊色综合久久之综合久久 | 中文字幕高清视频 | 99中文在线 | 国产 日韩 欧美 中文 在线播放 | 狂野欧美激情性xxxx欧美 | 成人在线免费视频观看 | 色婷婷综合久色 | 天天躁日日躁狠狠躁av中文 | 国产 日韩 在线 亚洲 字幕 中文 | 日三级在线 | www日韩在线观看 | 久久电影国产免费久久电影 | 91视视频在线直接观看在线看网页在线看 | 久久黄色小说视频 | www久久九| 欧美在线a视频 | 国产精久久 | 四虎国产精品免费 | 免费美女久久99 | 日韩专区 在线 | 成人免费视频视频在线观看 免费 | 特级毛片爽www免费版 | 免费a v在线 | 在线观看aaa| 中文字幕日韩av | 色亚洲网| 国产剧情一区二区在线观看 | 少妇18xxxx性xxxx片 | 91成品人影院 | 日韩在线观看视频中文字幕 | 精品91| 国产一区二区中文字幕 | 毛片网在线播放 | 欧美激情视频一二区 | 成人小视频在线播放 | 黄色av大片| 亚洲日本欧美 | 免费看国产视频 | 国产日产精品久久久久快鸭 | 九九色视频| av在线等| 成人久久视频 | 久久久99精品免费观看app | 久久久久久久久网站 | 日韩中文在线播放 | 国产xxxx性hd极品 | 亚洲欧洲国产精品 | 色妞色视频一区二区三区四区 | 视频在线观看入口黄最新永久免费国产 | 精品美女在线视频 | 懂色av一区二区在线播放 | 久操中文字幕在线观看 | 亚洲精品免费观看 | 久久99热精品 | 国产激情电影综合在线看 | 天天操 夜夜操 | 亚洲精品网站 | 91网在线观看 | 99在线热播精品免费99热 | 久操视频在线观看 | 四虎影视国产精品免费久久 | 在线成人短视频 | 贫乳av女优大全 | 丁香激情五月婷婷 | 91成人网在线 | 人人爽人人爽人人片 | 国产精品免费观看国产网曝瓜 | 麻豆久久 | 久久国产成人午夜av影院宅 | 五月丁香 | 干av在线 | 免费av观看 | 天天干亚洲 | 日韩av偷拍| 一级成人在线 | 91视频链接 | 亚洲性xxxx| 国产欧美综合视频 | 五月综合婷 | 精品一二三区视频 | 在线导航av | 99中文视频在线 | 一区二区三区在线观看免费 | 久久tv| 国产精品久久久久久久久搜平片 | 亚洲综合国产精品 | 亚洲精品在线视频播放 | 亚洲精品视频网站在线观看 | 在线观看完整版免费 | 99热最新地址 | 国产成人精品一区二区 | 免费在线观看一区二区三区 | 色午夜| 国产午夜三级 | 中文字幕一区二区在线播放 | 综合色狠狠 | 久久99影院 | 99视频在线精品国自产拍免费观看 | 欧美日韩成人一区 | av成人在线看 | 久久96国产精品久久99软件 | 超碰在线中文字幕 | 国产麻豆精品免费视频 | 91网在线 | 国产1区2| 久久好看免费视频 | 亚洲一区二区麻豆 | 中午字幕在线 | 午夜精品一区二区三区四区 | 97超碰人人 | 蜜桃视频在线视频 | 中文字幕中文字幕在线中文字幕三区 | 中文字幕乱码日本亚洲一区二区 | 97视频久久久 | 国产精品麻豆视频 | 中文字幕在线观看国产 | 性色va| 免费视频成人 | 黄色三级网站 | 久久国产成人午夜av影院宅 | 91麻豆精品国产自产 | 久久久一本精品99久久精品 | 97人人超 | 亚洲综合五月 | 搡bbbb搡bbb视频 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 亚洲激情| 国产中的精品av小宝探花 | 国产韩国日本高清视频 | www.五月激情.com | 国产69久久久 | 91麻豆国产福利在线观看 | 在线观看免费日韩 | 福利一区视频 | 亚av在线 | 精品久久久久久综合日本 | 激情五月综合网 | 久久国产精品偷 | 欧美二区在线播放 | 国产一区 在线播放 | 精品一区二区三区香蕉蜜桃 | www.色五月.com | 天堂视频一区 | 日韩91在线 | 97综合网 | 亚洲精品乱码久久久久v最新版 | 亚洲一级国产 | 久久久久在线视频 | 岛国片在线 | 精品你懂的 | 在线a亚洲视频播放在线观看 | 天天操天天操 | 免费欧美高清视频 | 亚洲视频1区2区 | 91试看 | 久久99久久99久久 | 婷婷精品进入 | 国模视频一区二区三区 | 久久久国产精品一区二区三区 | 91伊人久久大香线蕉蜜芽人口 | 久久艹国产视频 | 天天色天天射综合网 | 日日弄天天弄美女bbbb | av一级片在线观看 | 久久99国产精品二区护士 | 免费久久网 | 韩日电影在线观看 | 欧美日韩不卡在线 | 日韩在线国产精品 | 超碰在线个人 | 国产成人99久久亚洲综合精品 | 国产在线日韩 | 婷婷色九月 | 亚洲国产日韩av | 97网站| 日韩va在线观看 | 五月婷婷香蕉 | 免费高清在线观看电视网站 | 亚洲国产精品免费 | 国语自产偷拍精品视频偷 | 日韩 在线a | 三级黄色三级 | av免费看网站 | 综合色中文 | 国产日韩视频在线播放 | 日韩欧美一级二级 | 九色91福利| av网站地址 | 国产精品久久久久毛片大屁完整版 | 人人要人人澡人人爽人人dvd | 国产免费黄色 | 欧美一二三视频 | 制服丝袜成人在线 | 国产亚洲视频在线免费观看 | 在线看污网站 | 有码中文在线 | 97天堂网 | 久久综合9988久久爱 | 精品99久久久久久 | 国产精品一区专区欧美日韩 | 伊人网综合在线观看 | a级国产乱理伦片在线观看 亚洲3级 | 亚洲黄色免费在线看 | 一级黄色av| 天天超碰 | 麻豆影视网站 | av视屏在线 | 在线电影中文字幕 | 久草电影在线观看 | 婷婷午夜天 | 91中文在线视频 | 成 人 黄 色视频免费播放 | 美女视频是黄的免费观看 | 精品专区| 成人免费看片98欧美 | 日韩午夜小视频 | 九九在线国产视频 | 黄色亚洲在线 | 日韩免费高清在线 | 午夜性生活 | 国产日产精品久久久久快鸭 | 毛片99 | 亚洲色图27p | www久久九| 免费一级特黄毛大片 | 免费涩涩网站 | 国产最新福利 | 一区二区三区四区影院 | 友田真希x88av| 欧美va日韩va | 欧美伦理一区二区三区 | 国产一级黄色片免费看 | 精品视频资源站 | 成人免费在线播放 | 人人澡人人爽 | 免费国产在线精品 | 精品在线看 | 99热99热| 久久成人在线 | 免费在线国产黄色 | 免费在线观看一区 | 成人毛片在线观看视频 | 狠狠地操 | 国产精品九九热 | 久久精品福利视频 | 天天操天天爽天天干 | 精品国产一区二区三区av性色 | 久久呀 | 色永久免费视频 | 黄色在线观看网站 | 精品一区二区三区香蕉蜜桃 | 91九色在线| 免费人做人爱www的视 | 中文字幕亚洲高清 | 天天干夜夜想 | 99视频导航| 日本中文字幕免费观看 | 黄色小说免费在线观看 | 色久天| 超碰伊人网 | 西西444www高清大胆 | 亚洲精品videossex少妇 | 午夜精品成人一区二区三区 | 欧美久久久一区二区三区 | 成年人免费看av | 97超碰人人模人人人爽人人爱 | 综合久久综合久久 | 亚洲一级电影在线观看 | 97精品免费视频 | av中文字幕不卡 | 精品在线亚洲视频 | 黄色三级免费看 | 国产直播av | 欧美日韩一区二区免费在线观看 | 波多野结依在线观看 | 日韩激情在线 | 国产资源 | 成人在线小视频 | 色狠狠久久av五月综合 | 久久99精品视频 | 天天操天天摸天天射 | 成人影视免费看 | 欧美一级片在线观看视频 | 亚洲精品乱码久久久久v最新版 | 日韩理论 | 免费观看丰满少妇做爰 | 日韩视频免费在线 | 中文字幕在线视频精品 | av成人在线看 | 激情婷婷亚洲 | 香蕉视频网站在线观看 | 一区三区视频 | 中文字幕在线观看完整版电影 | 天天天色| 五月婷婷香蕉 | 91在线看免费 | 国产日韩视频在线播放 | 天天天色| 少妇按摩av | www.狠狠操.com| 91av大全| 国产精品国产毛片 | 波多野结衣在线播放一区 | 日韩av一区二区三区 | 亚洲精品在线观看视频 | 国产成人精品一区二区三区 | 一区二区中文字幕在线播放 | 国产精品中文字幕在线观看 | 久久超碰99 | 麻豆一区二区 | 国产精品成人一区二区三区吃奶 | 狠狠色综合欧美激情 | 亚洲人人射 | 婷婷亚洲综合五月天小说 | 中文字幕在线影院 | 园产精品久久久久久久7电影 | 麻豆视频免费网站 | 日日夜夜国产 | 色视频国产直接看 | 久久国产亚洲视频 | 久久综合九色九九 | 人人玩人人添人人澡97 | 国产一级二级在线 | 国产精品久久久久久久久久久不卡 | 在线观看视频福利 | 91污在线观看 | 视频在线一区 | www五月天婷婷 | 亚洲伦理中文字幕 | 天堂av在线免费观看 | 激情五月婷婷综合网 | 安徽妇搡bbbb搡bbbb | 日本aaa在线观看 | 久久国产影院 | 亚洲精品国产第一综合99久久 | 蜜臀久久99精品久久久无需会员 | 午夜三级理论 | 亚洲精品大全 | 丁香五月网久久综合 | 久草网在线 | 婷婷福利影院 | 色婷婷欧美 | 国产97在线观看 | 成人av一二三区 | 在线观看精品 | 国产精品黄色影片导航在线观看 | 日韩色综合 | 91黄色小视频 | 色婷婷综合成人av | 免费在线观看污 | 在线免费观看羞羞视频 | 亚洲观看黄色网 | a一片一级 | 欧美性春潮 | 婷婷六月丁 | 国产色啪| 亚洲视频 一区 | 天天干天天拍天天操天天拍 | 成人97视频一区二区 | 欧美成亚洲 | 日日夜夜人人天天 | 日韩欧美视频免费在线观看 | 91看片淫黄大片一级在线观看 | 国产电影一区二区三区四区 | 亚洲人毛片 | 国产精品 亚洲精品 | 久久精品毛片 | av电影中文字幕在线观看 | 精品国产乱码久久久久久三级人 | 国产综合久久 | 91亚洲精品久久久 | 麻豆精品在线 | 日韩av高潮 | 久久久精品影视 | 久久综合免费视频影院 | 国产精品一区二区三区免费看 | 美女黄色网在线播放 | 粉嫩一区二区三区粉嫩91 | 日韩精品一区二区免费 | 日本久久免费电影 | 午夜av免费| 国产精品青青 | 日本精品va在线观看 | 国产区av在线 | 日韩国产精品毛片 | 国产精品av在线免费观看 | 中文字幕在线观看一区二区三区 | 国产视频网站在线观看 | 亚洲国产精品久久久久 | 久久久久久久久黄色 | 欧美日韩二区三区 | 免费中文字幕 | 天堂在线免费视频 | 中文在线免费看视频 | 97视频总站| 蜜臀一区二区三区精品免费视频 | 天天天干 | 2019中文 | 天天爽网站 | 区一区二区三区中文字幕 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 免费视频色| .精品久久久麻豆国产精品 亚洲va欧美 | 毛片激情永久免费 | 黄色免费大全 | 日韩一区二区三区不卡 | 日韩精品免费在线视频 | 国产91免费在线观看 | 视频福利在线观看 | 国产999精品久久久久久麻豆 | av资源免费观看 | 久福利| 国产精品高清在线观看 | 亚洲国产三级在线 | 久久激情影院 | 国产精品视频资源 | 在线成人性视频 | 正在播放久久 | 亚洲国产精品电影在线观看 | 五月激情姐姐 | 日韩91精品 | 天天狠狠操 | 欧美日韩亚洲精品在线 | 国产精品免费小视频 | 久久五月婷婷丁香社区 | 三级av小说| 国产伦精品一区二区三区四区视频 | 亚洲影视九九影院在线观看 | 欧美日韩裸体免费视频 | 亚洲电影一区二区 | 日本精品免费看 | 97人人爽人人 | 日韩一区二区三区高清在线观看 | 六月色婷婷| 手机在线看永久av片免费 | 亚洲激情网站免费观看 | 波多野结衣电影一区二区三区 | 97视频免费观看2区 亚洲视屏 | 色视频国产直接看 | 天天干婷婷 | 久久午夜网 | 国产在线黄色 | www好男人 | 美女免费黄视频网站 | 亚洲精品午夜久久久 | 精品国产伦一区二区三区观看方式 | 国产成人精品亚洲日本在线观看 | 人人艹人人 | 视频精品一区二区三区 | 91看片淫黄大片在线播放 | 欧美久久综合 | 成人免费观看完整版电影 | 欧美亚洲精品一区 | 国产精品毛片一区二区在线看 | 欧美在线视频精品 | 久久国语露脸国产精品电影 | 国产日韩欧美在线一区 | 免费精品视频在线 | 97成人在线 | 四虎8848免费高清在线观看 | 伊人狠狠色 | 亚洲激情电影在线 | 日韩免费在线观看视频 | 国产精品久久久久久久午夜片 | 就色干综合 | 免费看污黄网站 | 91干干干 | 亚洲好视频 | 色多多污污在线观看 | 91亚洲夫妻| 激情综合色综合久久综合 | 国产小视频国产精品 | 欧美日韩精品国产 | 在线亚洲免费视频 | 中文字幕中文字幕在线中文字幕三区 | 麻豆视频免费入口 | 亚洲免费av电影 | 91精品一区二区三区久久久久久 | 欧美美女视频在线观看 | 特级西西444www高清大视频 | 欧美孕交vivoestv另类 | 免费男女羞羞的视频网站中文字幕 | 成人久久毛片 | 国产精品97| 久久系列| 五月婷婷综合在线视频 | 一级α片 | 麻豆视频在线看 | 久久电影色| 久久在线免费观看 | 91精品视屏 | 中文字幕中文字幕中文字幕 | 99在线热播精品免费 | 久久99精品久久久久蜜臀 | 中文字幕在线一区二区三区 | 一区二区三区动漫 | 国产色女人 | av一级在线观看 | 久久久久久久电影 | 久久亚洲精品电影 | 亚洲成aⅴ人在线观看 | 色丁香久久 | 日韩欧美在线中文字幕 | 久久天天躁夜夜躁狠狠85麻豆 | 天天拍天天爽 | 成人免费观看电影 | 一区二区理论片 | 国产视频一区在线播放 | 成人观看视频 | 中文字幕久久久精品 | 日韩理论电影网 | 伊人婷婷网 | 国产一区二区三区四区大秀 | 久久精品中文视频 | 国产福利小视频在线 | 色综合久久久久久久久五月 | 在线观看免费色 | 成全在线视频免费观看 | 在线亚州 | 国产流白浆高潮在线观看 | 91精品成人久久 | 波多野结衣在线视频一区 | 三级黄色在线 | 国产精品久久久免费 | 黄色毛片网站在线观看 | 国产正在播放 | 免费看片网址 | 精品一区二区久久久久久久网站 | 久久久久久久久久福利 | 亚洲午夜久久久久久久久久久 |