鏈表和結構體實現:MCU軟件定時器

汽車電子嵌入式 2025-07-02 09:09

在一般的嵌入式產品設計中,介于成本、功耗等,所選型的MCU基本都是資源受限的,而里面的定時器的數量更是有限。在我們軟件設計中往往有多種定時需求,例如脈沖輸出、按鍵檢測、LCD切屏延時等等 ,我們不可能讓每一個定時業務都去開一個硬件定時器,一來硬件資源可能不足,二來會使軟件過度依賴于硬件平臺,從而導致較差的可移植性。

而若我們有一個軟件定時器,所有定時業務都依賴于軟件定時器,不僅節省硬件資源,以后在移植的時候也只需要將軟件定時器和硬件相關的部分修改就行了,其他部分都不用動。

軟件定時器實現方式:

一、用結構體數組的方式實現軟件定時器


用結構體數組的方式實現起來較簡單,也容易理解,除此之外和之后的鏈表實現方式比起來沒有其他優點。但還是介紹一下實現方法:在結構體數組內定義一個start標志和定時時長duration,還有一個為計數值count,這3個變量為最基本的3個變量,其他的可以自己補充,比如運行模式、回調函數指針等。還有就是每一個結構體數組就是一個定時器,需要我們提前定義好這個結構體數組有多大。

定義好之后,在開啟定時器的時候我們將對應的數組內start標志置位,在硬件tick中斷服務函數里面我們去查所有結構體數組內的start標志是否置位,當查到當前start被置位時,將此數組內的duration和count做比較,如果相等就說明此定時器定時時間到了,如果不等就將count++,然后接著查其他數組的start標志,以此無限循環。

此種方式缺點非常明顯,那就是在硬件tick中斷服務函數內,我們得輪詢所有數組,如果我們軟件業務需求是20個定時任務,那我們就得在軟件定時器的實現里定義20個數組,空間浪費倒是其次的,關鍵是硬件tick輪詢的數組越多,執行到某個數組的時間就越長,若以后有50個、100個定時需求時,將會導致定時時間極不精準。

二、用鏈表實現軟件定時器


介于以上用結構體數組實現軟件定時器的種種缺點,我們提出改進方案。經過分析,在大多數定時業務中,往往只需要在某個時間段定時一次,也就是說定時器會開啟定時和結束定時,當然,用數組的實現的定時器也可以開啟定時和關閉定時,只需要用start標志去決定就行了,但是用數組實現的方式中,即使你關閉了定時器,也就是去掉了start標志,此定時器雖然不運行了,但是數組的空間不會減少,硬件 tick依然要輪詢所有數組。

所以我們需要用鏈表來實現軟件定時器,在硬件tick中輪詢所有節點,開啟一個定時器就加入一個節點,關閉定時器就刪除一個節點,可以保證在當前時刻只輪詢需要定時的節點,可以極大的保證定時準確性。

在加上可以讓用戶選擇定時時間到了直接在硬件tick內執行或者在硬件tick內置標志,然后在while循環內排隊執行,可以非常有效的解決關鍵業務定時不精準的問題,比如脈沖輸出這種需要定時準確的業務。

鏈表實現方式

H文件:

/**
 * sfor_timer_list.h
 * 鏈表實現的軟件定時器庫
 */

#ifndef __SOFT_TIMER_LIST_H
#define __SOFT_TIMER_LIST_H


/**
 * 硬件中斷tick
 */

#define TIMER_HARD_TICK                      100U    //ms,硬件tick取決于硬件定時中斷時間
#define TIMER_200MS_TICK                     (200U/TIMER_HARD_TICK) //TIMER_HARD_TICK * (2) = 100mS
#define TIMER_SEC_TICK                       (1000U/TIMER_HARD_TICK) //TIMER_HARD_TICK * (20) = 1S



/**
 * 定時模式選擇
 */

typedefenum
{
    ONCE_MODE,                            /* 單次定時模式,即超時后自動關閉定時器 */
    CONTINUE_MODE,                        /* 持續定時模式,只要開啟除非手動關閉否則永不停歇 */
    DEFINE_NUM_MODE,                      /* 定義次數的模式,運行指定的次數后關閉定時器 */
}TimerTimingModeType;


/**
 * 定時超時后運行的回調函數可以選擇在中斷直接運行或者掛起任務輪詢執行
 * 只要在定時需求準確的時候才建議選擇中斷模式執行,類似無磁傳感器脈沖測量
 * 像一些超時判斷類的應用以輪詢的方式進行執行
 * 中斷執行模式越多,其他定時器越不準,畢竟中斷允許占時間,查詢其他定時器時
 * 會有延時
 */

typedefenum
{
    RUN_IN_LOOP_MODE,                      /* 輪詢執行模式 */
    RUN_IN_INTERRUPT_MODE,                 /* 中斷實時執行模式 */
}TimerRunModeType;


/**
 * 軟件定時器基本類型
 */

typedefstructSoftTimer
{
    unsignedlong counter;                /* 計數              */
    unsignedlong duration;               /* 定時時長          */
    unsignedlong run_num;                /* 自定義的定時次數  */
    BOOL start_flag;                      /* 啟動標志          */
    BOOL loop_flag;                       /* 輪詢標志          */
    TimerRunModeType run_mode;
    TimerTimingModeType timing_mode;
    void (*callback_function)(void);      /* 回調函數          */
    structSoftTimer *next;
}SoftTimer;


/*
 * 初始化軟件定時器的硬件tick
 */

externvoidsoft_timer_tick_init(void);

/*
 * 創建一個只運行一次的軟件定時器并立刻開始計時
 * 參數表:p: 定時器結構體指針,由用戶創建
 *        mode: 選擇運行模式,可選定時器到了之后是直接在tick中斷內執行還是置起標志在while循環內輪詢執行
 *        duration: 要計時的時長,單位為硬件中斷的tick
 *        timeout_handler: 定時到了之后要執行的函數指針
 * return:無
 */

externvoidcreat_single_soft_timer(SoftTimer *p, TimerRunModeType mode, unsignedlong duration, void(*timeout_handler)(void));

/*
 * 創建永遠運行的軟件定時器并立刻開始計時
 * 參數表:p: 定時器結構體指針,由用戶創建
 *        mode: 選擇運行模式,可選定時器到了之后是直接在tick中斷內執行還是置起標志在while循環內輪詢執行
 *        duration: 要計時的時長,單位為硬件中斷的tick
 *        timeout_handler: 定時到了之后要執行的函數指針
 * return:無
 */

externvoidcreat_continue_soft_timer(SoftTimer *p, TimerRunModeType mode, unsignedlong duration, void(*timeout_handler)(void));

/*
 * 創建指定次數運行的軟件定時器并立刻開始計時
 * 參數表:p: 定時器結構體指針,由用戶創建
 *        mode: 選擇運行模式,可選定時器到了之后是直接在tick中斷內執行還是置起標志在while循環內輪詢執行
 *        run_num:要定時的次數,比如1就是定時1次,5就是定時5次以后自動關閉定時器
 *        duration: 要計時的時長,單位為硬件中斷的tick
 *        timeout_handler: 定時到了之后要執行的函數指針
 * return:無
 */

externvoidcreat_limit_num_soft_timer(SoftTimer *p, TimerRunModeType mode,unsignedlong run_num, unsignedlong duration, void(*timeout_handler)(void));


/*
 * 重啟指定的單次軟件定時器
 * 參數表:p: 定時器結構體指針,由用戶創建
 *        mode: 選擇運行模式,可選定時器到了之后是直接在tick中斷內執行還是置起標志在while循環內輪詢執行
 *        duration: 要計時的時長,單位為硬件中斷的tick
 *        timeout_handler: 定時到了之后要執行的函數指針
 * return:無
 */

externvoidrestart_single_soft_timer(SoftTimer *p, TimerRunModeType mode, unsignedlong duration, void(*timeout_handler)(void));

/**
 * 刪除一個軟件定時器
 */

externvoidstop_timer(SoftTimer *p);


/**
 * 系統main循環進程,用于執行輪詢模式的回調函數
 */

externvoidsoft_timer_main_loop(void);


/**
 * 此函數為tick中斷服務函數,需要掛載在外部硬件定時器上
 * 因此軟件定時器的定時精度由此函數掛載的硬件定時時間決定,
 * 比如此函數掛載在定時50ms的外部定時器上,那么定時dutation
 * 為20時定時時間就是20*50ms=1S
 */

externvoidsystem_tick_IrqHandler(void);



#endif/* !1__SOFT_TIMER_LIST_H */

C文件:

/**
 * sfor_timer_list.c
 * 鏈表實現的軟件定時器庫
 */

#define NULL ((void *)0)
typedefenum {FALSE = 0, TRUE = !FALSE} BOOL;

#include"meter_include.h"//包含用戶的硬件定時器初始化函數
#include"soft_timer_list.h"

/**
 * 軟件定時器內部變量
 */

static SoftTimer *head_point = NULL;

staticstruct SoftTimer *creat_node(SoftTimer *node);
staticchardelete_node(SoftTimer *node);
static BOOL is_node_already_creat(SoftTimer *node);


/**
 * 初始化軟件定時器的硬件tick
 */

voidsoft_timer_tick_init(void)
{
    R_IT_Create(); /* 由用戶初始化一個硬件定時器,當前tick 100ms */
    R_IT_Start();
}


/**
 * 系統main循環進程,用于執行輪詢模式的回調函數
 */

voidsoft_timer_main_loop(void)
{
    structSoftTimer *p1 = head_point;

    while (p1 != NULL//下一個節點如果不為空
    {
        if(p1->loop_flag == TRUE)
        {
            p1->loop_flag= FALSE;
            p1->callback_function();
            if(p1->start_flag != TRUE)
                delete_node(p1);   /* 如果定時器被刪除就刪除節點 */
        }
        /*  尋找下一個有意義的節點  */
        p1 = p1->next;
    }
}


/*
 * 創建一個只運行一次的軟件定時器并立刻開始計時
 * 參數表:p: 定時器結構體指針,由用戶創建
 *        mode: 選擇運行模式,可選定時器到了之后是直接在tick中斷內執行還是置起標志在while循環內輪詢執行
 *        duration: 要計時的時長,單位為硬件中斷的tick
 *        timeout_handler: 定時到了之后要執行的函數指針
 * return:無
 */

voidcreat_single_soft_timer(SoftTimer *p, TimerRunModeType mode, unsignedlong duration, void(*timeout_handler)(void))
{
    if ((p == NULL)||(timeout_handler == NULL) || duration == 0return;

    p->start_flag = TRUE;
    p->counter = 0;
    p->loop_flag = FALSE;
    p->duration = duration;
    if(mode == RUN_IN_LOOP_MODE)
        p->run_mode = RUN_IN_LOOP_MODE;
    else
        p->run_mode = RUN_IN_INTERRUPT_MODE;
    p->callback_function = timeout_handler;
    p->timing_mode = ONCE_MODE;
    p->run_num = 0/* 只有在自定義運行次數的情況下此值才有效 */
    head_point = creat_node(p);
}


/*
 * 創建永遠運行的軟件定時器并立刻開始計時
 * 參數表:p: 定時器結構體指針,由用戶創建
 *        mode: 選擇運行模式,可選定時器到了之后是直接在tick中斷內執行(除非實在必要)還是置起標志在while循環內輪詢執行
 *        duration: 要計時的時長,單位為硬件中斷的tick
 *        timeout_handler: 定時到了之后要執行的函數指針
 * return:無
 */

voidcreat_continue_soft_timer(SoftTimer *p, TimerRunModeType mode, unsignedlong duration, void(*timeout_handler)(void))
{
    if ((p == NULL)||(timeout_handler == NULL) || duration == 0return;

    p->start_flag = TRUE;
    p->counter = 0;
    p->loop_flag = FALSE;
    p->duration = duration;
    if(mode == RUN_IN_LOOP_MODE)
        p->run_mode = RUN_IN_LOOP_MODE;
    else
        p->run_mode = RUN_IN_INTERRUPT_MODE;
    p->callback_function = timeout_handler;
    p->timing_mode = CONTINUE_MODE;
    p->run_num = 0;       /* 只有在自定義運行次數的情況下此值才有效 */
    head_point = creat_node(p);
}



/*
 * 創建指定次數運行的軟件定時器并立刻開始計時
 * 參數表:p: 定時器結構體指針,由用戶創建
 *        mode: 選擇運行模式,可選定時器到了之后是直接在tick中斷內執行還是置起標志在while循環內輪詢執行
 *        run_num:要定時的次數,比如1就是定時1次,5就是定時5次以后自動關閉定時器
 *        duration: 要計時的時長,單位為硬件中斷的tick
 *        timeout_handler: 定時到了之后要執行的函數指針
 * return:無
 */

voidcreat_limit_num_soft_timer(SoftTimer *p, TimerRunModeType mode,unsignedlong run_num, unsignedlong duration, void(*timeout_handler)(void))
{
    if ((p == NULL)||(timeout_handler == NULL) || duration == 0return;
    p->start_flag = TRUE;
    p->counter = 0;
    p->loop_flag = FALSE;
    p->duration = duration;
    if(mode == RUN_IN_LOOP_MODE)
        p->run_mode = RUN_IN_LOOP_MODE;
    else
        p->run_mode = RUN_IN_INTERRUPT_MODE;
    p->callback_function = timeout_handler;
    p->timing_mode = DEFINE_NUM_MODE;
    p->run_num = run_num;       /* 只有在自定義運行次數的情況下此值才有效 */
    head_point = creat_node(p);
}


/*
 * 重啟指定的單次軟件定時器
 * 參數表:p: 定時器結構體指針,由用戶創建
 *        mode: 選擇運行模式,可選定時器到了之后是直接在tick中斷內執行還是置起標志在while循環內輪詢執行
 *        duration: 要計時的時長,單位為硬件中斷的tick
 *        timeout_handler: 定時到了之后要執行的函數指針
 * return:無
 */

voidrestart_single_soft_timer(SoftTimer *p, TimerRunModeType mode, unsignedlong duration, void(*timeout_handler)(void))
{
    if ((p == NULL)||(timeout_handler == NULL) || duration == 0return;

    p->start_flag = TRUE;
    p->counter = 0;
    p->loop_flag = FALSE;
    p->duration = duration;
    if(mode == RUN_IN_LOOP_MODE)
        p->run_mode = RUN_IN_LOOP_MODE;
    else
        p->run_mode = RUN_IN_INTERRUPT_MODE;
    p->callback_function = timeout_handler;
    p->timing_mode = ONCE_MODE;
    p->run_num = 0/* 只有在自定義運行次數的情況下此值才有效 */
    if (is_node_already_creat(p) != TRUE) /* 若之前的節點已被刪除就重新創建 */
        head_point = creat_node(p);
}


/**
 * 封裝后給用戶使用
 */

voidstop_timer(SoftTimer *p)
{
    if (p != NULL) {
        p->counter = 0;
        p->start_flag = FALSE;
        delete_node(p);
    }
}


staticstruct SoftTimer *creat_node(SoftTimer *node)
{  
    structSoftTimer *p1;   //p1保存當前需要檢查的節點的地址
    if(node == NULL)
        return head_point;

    if(is_node_already_creat(node)!=FALSE) {
        delete_node(node);  /* 當節點已經存在的時候在這里選擇退出還是刪除后重新創建,目前重新創建 */
    }
    //當頭節點為空時,將傳入的節點作為頭節點,返回頭節點  
    if (head_point == NULL)         {    
        head_point = node; 
        node->next = NULL;
        return head_point;
    }
    p1 = head_point;  
    while(p1->next != NULL)  
    {  
        p1 = p1->next;       //后移一個節點  
    }  

    if(p1->next == NULL)  //將該節點插入鏈表的末尾
    {  
        p1->next = node;
        node->next = NULL;
    }  
    else
    {
        
    }
    return head_point;  
}


staticchardelete_node(SoftTimer *node)
{  
    structSoftTimer *p1;   //p1保存當前需要檢查的節點的地址  
    structSoftTimer *temp;
    if(node == NULL)
       return1;

    p1 = head_point;
    if(node == head_point) {
        head_point = head_point->next;    /* 如果要刪除頭指針,就將頭指針后移  */
    } else {
        while (p1 != NULL/*頭節點如果不為空 */
        {
            temp = p1;     /* 記錄當前節點 */
            p1 = p1->next; /* 檢索的是下一個節點  */
            if (p1 == NULL) {
                return1;
            }
            if (p1 == node) {
                temp->next = p1->next; /* 刪除此節點 */
                return0;
            }
        }
    }
    return0;
}


static BOOL is_node_already_creat(SoftTimer *node)
{  
    structSoftTimer *p1;   //p1保存當前需要檢查的節點的地址  
    if(node == NULL)
       return FALSE;

    p1 = head_point;  
    while(p1 != NULL)  
    {  
        if(p1 == node)
            return TRUE;
        p1 = p1->next;       //后移一個節點  
    }
    return FALSE;
}


/**
 * 此函數為tick中斷服務函數,需要掛載在外部硬件定時器上
 * 因此軟件定時器的定時精度由此函數掛載的硬件定時時間決定,
 * 比如此函數掛載在定時50ms的外部定時器上,那么定時dutation
 * 為20時定時時間就是20*50ms=1S
 */

voidsystem_tick_IrqHandler(void)
{
    structSoftTimer *p1 = head_point;
    close_global_ir();  //關閉中斷,根據硬件平臺修改
    while (p1 != NULL//下一個節點如果不為空
    {
        if(p1->start_flag != FALSE)    /* 判斷當前定時器是否被開啟  */
        {
            if(++p1->counter >= p1->duration)  /* 判斷當前計時有沒有到達 */
            {
                switch (p1->timing_mode)
                {
                case ONCE_MODE:
                    p1->start_flag = FALSE;
                    break;
                case CONTINUE_MODE:
                    break;
                case DEFINE_NUM_MODE:
                    if (p1->run_num > 0)
                    {
                        if (--p1->run_num == 0)
                        {
                            p1->start_flag = FALSE;
                        }
                    }
                default:
                    break;
                }
                if(p1->run_mode == RUN_IN_INTERRUPT_MODE)
                {
                    p1->callback_function();   /* 中斷內直接運行回調函數,用于實時性比較高的程序 */
                    if(p1->start_flag != TRUE)
                        delete_node(p1);
                }
                else
                    p1->loop_flag = TRUE;
                p1->counter = 0;
            }
        }
        /*  尋找下一個有意義的節點  */
        p1 = p1->next;
    }
    open_global_ir();  //打開中斷,根據硬件平臺修改
}

結構體實現方式


最后在附上用結構體數組實現的軟件定時器以作參考。

H文件:

/**
 * sfor_timer_array.h
 * 數組實現的軟件定時器庫
 * 一個軟件定時器解決整個項目中所有的定時需求,回調函數可根據應用
 * 自動切換中斷實時操作或者不實時的輪詢操作,可以有效解決硬件資源
 * 不足或者軟件定時器定時不準的問題,定時誤差就幾個C語言語句,倘若
 * 配置最大10個軟件定時器,誤差就是最多10個for循環的時間
 */

#ifndef __SOFT_TIMER_ARRAY_H
#define __SOFT_TIMER_ARRAY_H


/**
 * 定義最大的可用的軟件定時器數量
 * 理論上可以無限大,但是數量越大定時誤差越大,所以用幾個開幾個
 * 誤差在于輪詢檢測所有定時器,定時器越多輪詢到自己的定時器就越慢,
 * 此外,數量增多亦會帶來空間增大
 */

#define MAX_TIMER_NUM                       10


/**
 * 定時模式選擇
 */

typedefenum
{
    ONCE_MODE,                            /* 單次定時模式,即超時后自動關閉定時器 */
    CONTINUE_MODE,                        /* 持續定時模式,只要開啟除非手動關閉否則永不停歇 */
    DEFINE_NUM_MODE,                      /* 定義次數的模式,運行指定的次數后關閉定時器 */
}TimerTimingModeType;



/**
 * 定時超時后運行的回調函數可以選擇在中斷直接運行或者掛起任務輪詢執行
 * 只要在定時需求準確的時候才建議選擇中斷模式執行,類似無磁傳感器脈沖測量
 * 像一些超時判斷類的應用以輪詢的方式進行執行
 * 中斷執行模式越多,其他定時器越不準,畢竟中斷允許占時間,查詢其他定時器時
 * 會有延時
 */

typedefenum
{
    RUN_IN_LOOP_MODE,                      /* 輪詢執行模式 */
    RUN_IN_INTERRUPT_MODE,                 /* 中斷實時執行模式 */
}TimerRunModeType;



/**
 * 軟件定時器基本類型
 */

typedefstruct
{
    unsignedlong counter;                /* 計數           */
    unsignedlong duration;               /* 定時時長       */
    unsignedlong run_num;                /* 自定義的定時次數  */
    unsignedchar start_flag;             /* 啟動標志       */
    unsignedchar loop_flag;              /* 輪詢標志       */
    TimerRunModeType run_mode;
    TimerTimingModeType timing_mode;
    void (*callback_function)(void);      /* 回調函數 */
}SoftTimer;



/**
 * 刪除一個軟件定時器
 */

externvoidstop_timer(void (*callback_function)(void));



/*
 * 創建一個軟件定時器并立刻開始計時
 * return:沒有空閑定時器時返回1,創建成功時返回0
 */

externcharsoft_timer_start(TimerTimingModeType timing_mode, 
                                   TimerRunModeType run_mode,
                                       unsignedlong run_num, 
                                      unsignedlong duration,
                              void (*callback_function)(void));



/**
 * 系統main循環進程,用于執行輪詢模式的回調函數
 */

externvoidsoft_timer_main_loop(void);



/**
 * 此函數為tick中斷服務函數,需要掛載在外部硬件定時器上
 * 因此軟件定時器的定時精度由此函數掛載的硬件定時時間決定,
 * 比如此函數掛載在定時50ms的外部定時器上,那么定時dutation
 * 為20時定時時間就是20*50ms=1S
 */

externvoidsystem_tick_IrqHandler(void);



#endif/* !1__SOFT_TIMER_LIB_H */

C文件:

/**
 * sfor_timer_array.c
 * 數組實現的軟件定時器庫
 * 一個軟件定時器解決整個項目中所有的定時需求,回調函數可根據應用
 * 自動切換中斷實時操作或者不實時的輪詢操作,可以解決硬件資源
 * 不足或者軟件定時器定時不準的問題
 */

#include"soft_timer_array.h"


/**
 * 軟件定時器內部變量
 */

static SoftTimer soft_timer[MAX_TIMER_NUM];


/*
 * 創建一個軟件定時器并立刻開始計時
 * return:沒有空閑定時器時返回1,創建成功時返回0
 */

charsoft_timer_start(TimerTimingModeType timing_mode, TimerRunModeType run_mode, unsignedlong run_num, unsignedlong duration,
                      void (*callback_function)(void))
{
    unsignedchar i = 0;

    if(!callback_function) return1;
    stop_timer(callback_function);     /* 先判斷有沒有一樣的定時器,有的話先刪除  */
    for(i =0; i<MAX_TIMER_NUM;i++)
    {
        if(soft_timer[i].start_flag == 0)    /* 查詢空閑的定時器 */
        {
            soft_timer[i].start_flag = 1;
            soft_timer[i].counter = 0;
            soft_timer[i].loop_flag = 0;
            soft_timer[i].duration = duration;
            soft_timer[i].run_mode = run_mode;
            soft_timer[i].callback_function = callback_function;
            if ((soft_timer[i].timing_mode = timing_mode) == DEFINE_NUM_MODE)
                soft_timer[i].run_num = run_num;                     /* 只有在自定義運行次數的情況下此值才有效 */
            break;
        }
        if (i == MAX_TIMER_NUM )    /* 沒有空閑定時器 */
            return1;
    }
    return0;
}



/**
 * 刪除一個軟件定時器
 */

voidstop_timer(void (*callback_function)(void))
{
    unsignedchar i;
    for(i = 0; i <MAX_TIMER_NUM; i++)
    {
        if(soft_timer[i].callback_function == callback_function)
        {
            soft_timer[i].start_flag = 0;
            soft_timer[i].loop_flag = 0;
        }
    }
}



/**
 * 系統main循環進程,用于執行輪詢模式的回調函數
 */

voidsoft_timer_main_loop(void)
{
    unsignedchar i;
    for(i = 0; i <MAX_TIMER_NUM; i++)            /*  輪詢執行回調函數  */
    {
        if(soft_timer[i].loop_flag == 1)
        {
            soft_timer[i].loop_flag= 0;
            soft_timer[i].callback_function();
            // return;                              /*  運行一次任務后就退出去等跑一輪后運行下個程序,防止任務堆積在一起運行  */
        }
    }
}



/**
 * 此函數為tick中斷服務函數,需要掛載在外部硬件定時器上
 * 因此軟件定時器的定時精度由此函數掛載的硬件定時時間決定,
 * 比如此函數掛載在定時50ms的外部定時器上,那么定時dutation
 * 為20時定時時間就是20*50ms=1S
 */

voidsystem_tick_IrqHandler(void)
{
    unsignedchar i = 0;
    
    for(i =0 ;i <MAX_TIMER_NUM; i++)
    {
        if(soft_timer[i].start_flag !=0 )   /* 判斷當前定時器是否被開啟  */
        {
            if(++soft_timer[i].counter >= soft_timer[i].duration)  /* 判斷當前計時有沒有到達 */
            {
                switch (soft_timer[i].timing_mode)
                {
                case ONCE_MODE:
                    soft_timer[i].start_flag = 0;
                break;
                case CONTINUE_MODE:
                    break;
                case DEFINE_NUM_MODE:
                    if (soft_timer[i].run_num > 0)
                    {
                        if (--soft_timer[i].run_num == 0)
                        {
                            soft_timer[i].start_flag = 0;
                        }
                    }
                default:
                    break;
                }
                if(soft_timer[i].run_mode == RUN_IN_INTERRUPT_MODE)
                    soft_timer[i].callback_function();   /* 中斷內直接運行回調函數,用于實時性比較高的程序 */
                else
                    soft_timer[i].loop_flag = 1;
                soft_timer[i].counter = 0;
            }
            // else
            // {
            //     soft_timer[i].counter++;
            // }
            
        }
    }
}

聲明:本文素材來源網絡,版權歸原作者所有。如涉及作品版權問題,請與我聯系刪除。

評論
  • 文:杜杰編輯:侯煜當地時間7月28日,美國特朗普政府落地最新科技封鎖政策,美國聯邦通信委員會(FCC)正式更新《受管制清單》,新增兩大類設備——境外生產的先進機器人設備、境外生產的聯網電力逆變器。FCC在官方情況說明書中明確,該類境外制造產品,“會對美國國家安全或美國民眾的人身安全構成無法承受的風險”。本次新規設置明確豁免機制:經美國國防部(DoW)、電力逆變器品類經美國國土安全部(DHS)審核并授予“有條件批準”,認定對應設備品類不存在重大安全風險,即可獲得準入豁免。同時政策嚴格執行新老劃斷原
    華爾街科技眼 2026-08-03 21:28 350瀏覽
  • 做藍牙音箱的工程師大概都碰過這個局面。產品要連手機放歌,要本地播開機提示音和按鍵音,還要接 App 做配網和狀態上報。三件事拆開,早先的常規做法是音頻藍牙一顆料、數傳藍牙一顆料、本地播放再掛一顆小 MCU 加一片 Flash。板子越畫越大,BOM 越算越貴,待機電流和固件工作量也跟著漲。WT2605C 出來以后,這套需求可以集成到一顆芯片,就是 WT2605C-32N,該芯片采用QFN32 封裝,4×4 毫米,把音頻藍牙、BLE 數傳和 MP3 本地播放三樣全包了。對藍牙音箱來說,最實在的好處就
    唯創知音語音芯片 2026-08-06 15:14 324瀏覽
  •        很多人只見過封裝在SMD外殼里的小尺寸晶振,卻不知道一顆2016、1612甚至1210封裝的微型石英晶振,從一塊巴掌大的石英原礦,到最終能穩定起振的成品,要經過十幾道精密工序。它內部的石英晶片厚度最薄不到20微米,比普通A4紙的1/5還薄,整個生產過程里哪怕0.1微米的誤差,都會直接廢掉整批產品,這也是小尺寸晶振過去長期依賴進口,國內廠商花了十幾年才啃下量產硬骨頭的核心原因。1. 原石定向切割:0.01度的角度誤差都不能有小尺寸晶振的第一步,
    TKD泰晶科技 2026-08-07 08:43 465瀏覽
  • ?摘要:低價大流量卡正全面退市,政策收緊已成定局。面對傳統號卡的不確定性,隨身WiFi憑借穩定連接、多設備共享、獨立設備和靈活套餐等優勢,成為務實可靠的備選方案。1、流量卡黃金時代要結束了通信行業正迎來一場前所未有的“地震式”調整——曾讓無數用戶追捧的低價大流量卡,正在全速退出各大平臺。這早已不是一次普通的競合,而是一場趨勢性的行業洗牌。回望過去,19元200G的神卡,那時真是“睡著都能笑醒”,便宜到不敢相信,爽到忍不住炫耀。那些日子,好像隨便刷、隨便看,流量自由觸手可及??扇缃瘢仡^再看,那種
    愛上電路設計 2026-08-03 10:21 128938瀏覽
  • 摘要在防爆電氣設計中,只參照芯數選型而忽略額定載流量,長期滿負荷運行會出現插頭發熱、接觸面氧化、IP67 密封受熱老化等問題。結合常用 3 針 3 孔、4 芯、5PIN、8PIN 圓形防爆連接器,制作分級電流參數對照表,區分冷壓免焊接、焊接兩種接線結構的安全載流數值,設置合理電流冗余系數,搭配使用環境修正參數,規范防爆接近開關連接器、防爆法蘭插座的選型計算方式。關鍵詞圓形防爆連接器,載流參數表,防爆法蘭插座,防爆端子接頭,IP67 防爆防水接插件1 產品概述圓形防爆連接器觸點載流能力由插針直徑、
    kyfbest科迎法電氣 2026-08-03 09:18 128683瀏覽
  • 在物聯網從“萬物互聯”邁向“萬物智聯”的進程中,LTE Cat.1憑借其在速率、成本與網絡覆蓋之間的完美平衡,正成為中低速物聯網市場的絕對主力。隨著2G/3G網絡的逐步退網以及新國標對終端設備智能化、定位功能的強制要求,Cat.1模組迎來了爆發式的增長窗口。在這一關鍵節點,基于華為海思Hi2131芯片設計的LTE Cat.1模組,憑借其在能效、射頻、架構及物理規格上的底層創新,成功打破了“高性能必高功耗”的傳統魔咒,為行業提供了極具競爭力的連接最優解。核心技術優勢:重塑Cat.1能效與連接標桿海
    用戶1778981989717 2026-08-05 21:04 192瀏覽
  •                                                                        
    廣州鐵金剛 2026-08-06 17:44 183179瀏覽
  • 在EMC測試過程中,傳導發射(Conducted Emission,CE)超標是工程師最常遇到的問題之一。更令人頭疼的是,同樣的超標曲線背后,可能對應著完全不同的干擾機理:有的是差模噪聲沿電源回路傳播,有的是共模電流通過寄生路徑耦合,還有些問題甚至并非來自電源本身,而是負載、電纜布局或接地結構引起的連鎖反應。 · 150kHz~1MHz 超標:多為差模噪聲為主,干擾沿火線-零線回路傳輸。 · 1MHz~30MHz 超標:通常共模噪聲占主導,干擾通過火線/零線對地回路傳播。 如果條件允許,用電流探
    譽磁電磁兼容EMC 2026-07-31 18:45 529瀏覽
  • 導語在現代高速數字電路設計中,信號的完整性已不僅是理想波形推演,而是一場與物理非理想特性正面博弈的工程實踐。濾波器芯片作為凈化傳輸鏈路的關鍵屏障,其核心挑戰在于:能否有效識別并濾除那些隱匿在電平跳變過程中的亞納秒級瞬態脈沖干擾,這類干擾持續極短,卻足以在高速鏈路中引發誤觸發。然而,傳統函數發生器受限于采樣率與邊沿速率,根本無法忠實復現如此狹窄且陡峭的異常波形。針對此困境,德思特TS-AWG7000系列任意波形發生器以17 GS/s采樣率與50 ps原生邊沿速度,為瞬態脈沖提供精細刻畫,配合SPG
    德思特測試測量 2026-08-05 14:06 5瀏覽
  • 在前六期中,我們已經分別討論了 CRA 的適用范圍、整體影響、漏洞通報義務、風險評估與技術文檔證據鏈、第三方組件與 SBOM 供應鏈治理,以及產品上市后的支持期、安全更新、用戶說明和終止支持管理。到這里,企業已經能夠回答幾個核心問題:產品是否落入 CRA 適用范圍,產品由哪些組件構成,企業如何證明自己在設計、開發和上市前采取了必要的安全措施,以及產品上市后如何持續維護和安全下線。但對于真正準備落地 CRA 合規的企業來說,還有一個更現實的問題:CRA 的法規條文相對原則化,企業應當如何把“網絡安
    虹科云科技 2026-08-03 16:51 232285瀏覽
  • 摘要防爆自控系統同時布設本安信號、工業總線、動力供電三類線路,僅依靠標識標牌管控插接極易出現人為錯插問題,高壓動力回路竄入本安弱電回路會突破安全柵限能標準,產生點火風險。依托 A、D、K 標準化機械防呆編碼體系,搭配護套顏色區分管理,適配 3 針 3 孔免焊接冷壓增安型防爆航插、5PIN 總線防爆航空插頭、8 芯焊接防爆法蘭插座的選型使用,從物理結構層面杜絕防爆接近開關連接器、防爆傳感器航插接頭混用插接問題,補齊防爆系統被動安全防護體系。關鍵詞圓形防爆連接器,防呆編碼防爆航插,防爆航空插頭,防爆
    kyfbest科迎法電氣 2026-07-31 18:29 428瀏覽
  • 產品使用18V供電,配套4串鋰離子電池,需要設計一個充電器。因為輸入18V,電池最高 16.8V,壓差僅 1.2V。因為壓差太小。使用開關型的充電控制芯片不穩定。嘗試自行設計一個。整體采用分立三極管 + TL431架構,分4個功能單元:使能控制回路、限流環路、TL431 精密恒壓反饋環路、PNP 功率管主功率輸出回路;實現完整鋰電池充電邏輯。使能控制回路按鍵按下:5V 電壓經 R12 (2kΩ) 送入 NPN 管 Q3 基極,Q3 飽和導通,對地拉低 R1、R2 組成的分壓控制節點電位;該節點直
    southcreek 2026-08-07 13:45 394瀏覽
我要評論
0
點擊右上角,分享到朋友圈 我知道啦
請使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 朱莉安妮监狱的电影叫什么名字来着| 五年级上册习作三| 扫黑风暴 720P 下载| 龚玥菲新金瓶高清百度影音| 西班牙《掌中之物》电影| 三国创世录| 萌学园5异界对决20| 图书室的女朋友在线观看完整免费版电视剧第五集 | 特殊保险推销员中字资源下载 | 赌侠大战拉斯维加斯| 黑帮老大和我的356日在线观看| 需要爸爸播种籽2演员名字全集| 斗罗大陆电视剧免费版| 左撇子艾伦电视剧| 《姊妹牙医》免费完整版| 姐姐的朋友16| 高清《唯妆至上》| 《激战后厨5》完整版日本| 贞观之治演员表全部| 《修理工的艳遇》在线| 关山暮雪| 蓝田建言42条| 色即是空2视频| 老年钢琴班| 奔腾年代46全集免费观看| 爱丫爱丫歌词| 他在星河之州免费观看全集| 《伯爵夫人和园丁》在线观看免费| 夜莺在线观看| 不忠电影在线观看免费完整观看| 香醇绣感2普通话版2023年上映 | 斗罗大陆全集免费观看完整版高清| 罗丽星克莱尔的电影| 《情欲按摩院》未删减版| 洪武大案全集| 芈月传电视剧全集下载| 夫妻相隔5小时先后坠楼身亡 | 牝教师4在线观看视频| 杨思敏1一5集手机版| 推油电影| 第五元素国语| 盗墓笔记超级季播剧| 浴血玫瑰全集| 布兰迪 罗伯斯| 邻家女孩百度影音| 浴火奔腾浴火红在线观看| 掉了伴奏| 东京漂移高清| 双人调情按摩术在线看| 何需杀人灭口打一字| 俄罗斯猛男大吊AV美国黑人猛男大鸡吧 | 大鹏电影大赢家免费观看| 特战荣耀在线观看免费完整版| 云朵昆山演唱会| 黛比浪漫女教师在线| 绝命任务| 最美的时候遇见你在线观看完整版| 日韩一级伦理强奸电影在线观看| 袁浩然怎么了最新消息| 纯真时代几分做了| 赤子板《姐妹牙医》在线看| 高清通往你的地图| 神箭电视剧全集| 韩剧《激战三姊妹》在线观看 | 大江大河3免费观看全集电视剧| 大耳朵图图3部全集| 激战丛林满天星法版完整版| 免费观看唐人街探案3电影完整版| 电影炼狱| 三年全免费观看在线播放| 给你 陈奕迅| 三度诱惑| 美国的忌讳1~9| 那夜的武士| 韩剧拜托小姐| 农民伯伯下乡3国语版吴健视频| 张哲瀚许凯同框| 一边是友情一边是爱情| 小红帽满天星| 秦总夫人| 伦理片高压监游完整燃| 搞笑影视| 高清夺命网红2| qvod金瓶梅| 韩国理伦片驯服小峓子的主演背景故| 电影《乌托邦》免费观看| 爱的色放3 完整版| 《私密女性监狱》中文| 《满天星辰》免费观看| 傻王闯天下高清| 苍月女战士H版成人版| 普京视察图瓦共和国| 机器侠百度影音| 家属动漫1-6全集免费观看| 甄嬛传40集| 父女大作战2在线观看| 玄女心经二免费观看| 年轻的母亲2在线视频观看完整版| 想要成为影之实力者在线观看| 妻子6免费完整高清中文版电视剧| 北川地震为汶川余震| 黄手帕国语版| 木下凛凛子主演| 梦想光荣| 泰山电影完整版播放| 莉娜安德森《满天星》电影在线观看 | 高压监狱3线观看完整免费高清原声| 家在水草丰茂的地方 电影| 隔世相逢| 舟山市| 高清《鸽乳》无删减版| 地狱之歌ova高清| 白月梵星电视剧在线观看星辰影院 | 少妇精油按摩电影| 斗罗大陆第102集免费观看| 河南法治频道在线直播7:50| 日本年经的继拇3| 电影《最亲密的兄妹》在线看 | 银翼的魔术师免费观看日文版| 禁忌少女| 韩国年轻的母年轻线在6| 德川幕府刑法水月篇| 善良的嫂子4在线高清免费观看| 艰难爱情20| 善良的母亲中字开头9个字| 宫锁沉香| 在银行上班的老婆| 今天是个好日子舞蹈| 宁安如梦电视剧免费观看西瓜| 维修工与丰腴女子中文字幕电影| 团鬼六地狱之门| 如果不是本命就好了未删减| 美国电影《小辣椒》高清全集 | 新大头儿子和小头爸爸第二季| 女教师被学生连续糟蹋电影| 雪中悍刀行免费观看全集| 七天妻子失去理智电影| 德国最强大脑| 五道口宏楠怎么死的| 四位按摩电影免费观看| 拜托了老师全集| 蝴蝶与鲸鱼| 麦乐迪与父亲家庭矛盾在线观看| 心灵诡计| 鹿鼎记2神龙教下载| 高压监狱高2清完整免费版在线观看| 开心麻花甜咸配| 赤裸羔羊| 蓝色隐身帽在线观看免费高清 | 夺命小丑电影免费观看完整版| 女律师替夫还债50万电影叫什么| 家常菜全集| 萌宝神助攻电视剧免费观看 | 目中无人高清电影免费完整版 | 《伤爱罪》电影在线观看| 欢乐颂电视剧免费观看全集高清版| 法国空姐八部曲系列| 呼啸山庄全集观看| 痴心的我完整无删减版粤语| rbd505| 美容院·特珠待遇1| 铠甲勇士之帝皇侠| 微笑的山谷未删减| 花与蛇《牙医诊所》电影完整版| 爬山虎的资料| 矿桥第8集体检超棒| 蓝宝石之谜| 西游 降魔篇| 夺命权限韩剧在线观看| 左旋肉碱有用么| 售楼小姐的秘密完整版| 坚强的人张若昀| 天天鲁夜夜免费观看视频| 空弹之森海外版完整电影在线| 假面之夜| 鲁豫有约周星驰| 杀了我治愈我韩剧| 绝强驱魔师花子| 美姐妹牙医电影完整观看视频在线| 怒火威龙国语| 女学生去教授家补课| 丰满艳妇岳的引诱HD| 科学怪妓在线观看| 宁夏杀人案| 美国式忌讳结局1-5| 《肉体偿还》在线观看| 特战荣耀在线观看免费完整版| 天才基本法在线观看| 入室暴行国语免费看| 妖精视频在线免费观看| 熊出没之环游世界| 江南锄奸| 《卖保险套的女销售》| 枯骨之余猜生肖| 魔境仙踪快播| 母亲爱上儿子的同学》电影| 小美人鱼动画片| 惊鸿故人归短剧免费观看全集高清版| 爸爸的种子高清| 玉莆团在线观看| 影子缠身电影免费观看完整版| 画皮2电影| 特邀外卖员免费在线观看| 电竞少女:带队拿冠军短剧全集| 排球少年第四季免费| 周弘《村姑》完整版| 麦克斯奥特曼全集中文版| 女子护卫队满天星1973剧情解析 | 大男当婚全集免费观看| 潜伏40集免费版播放| 色戒电影原声大碟| 人之怒在线观看完整免费| 哥斯拉帝王计划| 隔壁女孩电视剧免费观看| 电视剧别问我是谁| 速度与激情8免费在线观看| 《XL司令免费观看| 二龙湖爱情故事2020免费观看| 主持人仇晓手捧鲜花迎接儿子下考| 日本空姐2019| 机甲女神| 高清《烧酒战争》电影| 美国电影需要爸爸播种中文版| 陈玉莲《豪门圣女》| 金瓶梅原著电视剧1| 活佛济公3全集| 法国监狱女狱警2免费观看| 韶华若锦 电视剧 在线观看| 同学两亿岁免费观看免费全集| 坎贝尔《无憾》播放| 朋友的姐姐在线观看| 韩版花样男子国语版| 我的老婆是大佬3高清| 法国空乘15在线看免费版 | 369你懂的电影永久入口| 我的陪读妈妈第25节阅读答案 | 孽欲狐仙| 犬夜叉第二季| 想耍爸爸播种| 猩疯血雨电影| 妻子的谎言电视剧全集| 锵锵锵锵锵锵锵锵电视剧在线观看 | 乡村爱情圆舞曲13| 《家属动漫6全集》动漫观看| 斩神之凡尘神域| 电影《需要爸爸播种美国》相似的片段 | 老鹰乐队墨尔本告别演唱会| 人间中毒在观完整有限中字| 潍坊科技学院吊带| 陪部长出差日本电影中文字幕| 爱的释放电影完整版在线观看| 诱人的瑜伽老师3hd中字 | 远得要命的爱情电视剧| 且听凤鸣短剧免费观看全集| 一代枭雄43| 三对一韩国在线观看| 韩剧iris| 光环电影完整版在线看高清| 渔夫妻子意大利1996年| 密室ブリード| 仙逆动漫在线观看完整版全集| 灵璧一中| 菲律宾电影维修工人工的艳遇| 烽火佳人电视剧全集在线观看| 归路1—30集免费观看策驰影院 | 恶魔奶爸59| 侦探成旭之千年迷局| 爱几何在线观看免费全集| 变形记成长之痛| 九品芝麻官电影| DTF圣路易日记| 分娩按摩4| 权力的游戏第一季免费观看完整| 大象的眼泪 电影| xl司令动漫全集免费| 星际宝贝第一季国语免费观看| 煎饼侠 电影| 爱不懂事| 高压监狱2完整版在线观看| 斗破苍穹年番免费观看高清版| 金牌月嫂狂甩女婴| 50岁大胸继拇5| 坎贝奇无憾人生完整版| 善良的嫂子完整| 少妇与情人苹果园偷欢| 别墅轮换1攻略| 蓝精灵国语版| 小五弟最近山歌| ovA义姐是不是良喂养小拓第一集mskn6.| 烽火儿女情百度影音| 我的游泳女教练免费观看| 《你的孩子不是你的孩子》| 国风电影院在线观看免费播放| 闪闪的红星| 战神传说百度影音| 布衣神相| 美国伦理电影爸爸我想要你的种子| sss111| 恋爱暴君ova2下载| 韩国电影 爱人 下载| 丰满的女同学3| 爱情公寓第3季| 巴厘岛的故事电视剧| 重生之爱泰剧| 吸血贵族5满天星电影免费观看高清| 按摩天堂| 秋元まゆ花| 在爱中疯狂| 八戒八戒电影在线观看播放 | 群演逆袭全集免费| 心理测量者| 祖母和おばあちゃん的区别| 法国空高压监狱伦理片| 快播老版播放器下载| 猪哥亮访问秀| 阳原县| 妻子丰胸按摩电影在线观看| 两个人的BD高清在线观看免费韩国| 满屏十大酷刑电影中文字幕观看| 双人调情按摩术韩国在线观看 | re从零开始的异世界| 杨幂函数| 豫剧程英救孤| 水灵的继拇BD中字3 | 饥饿站台2在线观看| 我心里有危险的东西| 俄罗斯美女| 亲爱的自己电视剧免费看| 契卡百度影音| 且试天下电视剧免费观看全集| 女子私人监狱法版免费| 天津卫视德云社春晚| 澡堂家的男人们| 家属动漫7集在线播放| 求安慰少年电视剧| 妻子被强奸电影| 契约新娘电视剧| 《落魄贵族琉璃川》在线观看中文| 中国维和警察 电视剧| 极限救援优酷| 贵溪市| 82版杨敏思版本1-5集免费观看 | 姐妹牙医 在线| 被欺凌的女人全集| 在大街上打开跳蛋遥控器开关| 恶女花魁| 酒店激战第1-5集免费观看伊丽莎白尖 | 桃花劫电视剧| 《农场主的三个女儿》 | 新乌托邦电影全集完整版| 美貌的社长夫人| 《四大美人之貂蝉》| 最后的华雨滋动漫在线观看| 王贵与安娜| 哇嘎成人电影| 冷眼看客| 来了来了终于来了| 骑士的战争下载| 意大利《美丽的丽莎》| 命悬一线的浪漫| 地铁迷情| 萨迦县| 黑白配中文版免费观看视频| 我为卿狂百度影音| 夺命巨鲨| 美国伦理蜜桃5| 波多野吉衣电影免费看| 电视剧追鱼传奇全集| 全职高手第二季在线看| 陈雅伦曹查理《我为卿痴狂》在哪里| 五味人生| 天师钟馗94版| 狂飙 电视剧| 欧美成人版电影荣誉守则在线观看| 左耳电影在线观看免费| 420电影网| 三妻四妾国语版第三部电视剧简介| 越南战场满天星版叫什么名字 | 漂亮的保姆3韩国免费| 法国电影空姐第4部免费观看| 入室强奸初中生免费观看| 超变身祈斗士| 我的阿姨| 男女做爰猛烈啪啪吃奶床戏| 公主嫁到粤语电视剧在线观看免费| 高清《侦察兵》免费观看| 阿加莎·克里斯蒂之七面钟电视剧| 一寸法师| 电视剧化剑| 钢琴教师百度影音| 真 倚天屠龙记| 我的幸福婚约| 一次邂逅| 强伦轩办公室女教师hd| 圣斗士传说| 私人女性监狱电视剧完整版观看免费| 闪耀的她电视剧免费观看全集| 百媚千娇全集| 南斗六圣拳| 法国空姐看完整免费高清原声奔跑吧| 天山暮雪| 《志愿军:浴血和平》| 金屋藏夫电视剧免费观看完整版| 五福临门在线观看| 电影小字辈完整版免费观看| 维修工的艳遇HD2| 混血大学生精油按摩伦理在线| 英雄的黎明 简谱| 黄金小子| 电影《需要爸爸播种美国》演员名字 | 无名卫士电视剧| 一剪梅歌曲| 领居家保姆2| 了不起的女孩免费观看| 电视剧沉默免费观看完整版| 欢颜电视剧在哪个台播出| 美国1985G点原版| 倔强的驱魔师1-4集免费观看 | 惊声尖叫6电影| 哇嘎日本电影全集在线看| 美女被破处| 电影蜜糖| 美国修车艳遇电影在线观看| 鼓楼外42集大结局| 爱情中毒| 爸爸要播种电影完整版免费观看| 快乐公媳1-36集免费观看截说| 未完全侦探| 法国空姐满天星法版第一季在线播放| 高清《人世间》免费全集 | TOTAKKA HAYA KIRGUZUX| 疯狂大老千国语| go电影免费观看国语高清| 旺角黑夜电影| 爱的释放电影完整版在线观看| 明星大侦探第八季在线观看| 岳母的味道| 妻子出差丈夫部长在线播放| 温柔的杀死龙| 电影恋爱的味道| 金银梅5一10普通话版免费观看第10集 | 需要爸爸播种子在线免费看| 狼来了电视剧| 《恶犬》短剧全集| 星际迷航6| 奇妙的发型屋中字韩国| 日韩r| 返老还童在线观看| 任盈盈股评| 行政助理2014完整版 | 亲爱的热爱的免费全集观看| 这才是马云| 《双人按摩调情术》| 新妹魔王的契约者动漫| 破晓之爱| 电视剧苍天| 黑人巨茎大战俄罗斯美女| 短剧在线观看免费全集| 年轻的妹妹| 桥隆飙2| 激战丛林3免费观看| 焕儿1小时19分| 爱的秘方百度影音| 闪耀的她1-36集免费观看| 《混血儿摇篮曲》在线| 爱丫爱丫免费观看电视剧高清在线| 亲爱的客栈2026免费观看| 我家三爷超宠的全集视频| 我女友的妈妈韩国| 满天星《背叛》| 整容室第七季| 《下女》| 孙子兵法与三十六计全集| XL司令在线观看完整版动漫 | 宽松世代又如何| 《卢旺达的玫瑰》完整版| 女人电影| 现在我们相爱吗| 年轻漂亮岳每5中文字幕| 金银悔1-5国语高清免费看| 财经郎眼20140929| 错点鸳鸯电视剧50集免费播放| 女兵排电视剧全集40| jizzwu| 极品女士第三季| 斗罗大陆电视剧第二部| 13一14chinesex破| 掌中之物西班牙完整版| 瑜伽健身3完整版| 朱莉安吉丽娜电影| 需要爸爸播种种子在线观看| 热辣滚烫电影完整版| 广场舞社会主义好| 和你一起飞| 折腰电视剧在线观看全集| 免费观看以爱为营的电视剧| 传教士第一季| 祥仔更多大片访问| 马路天使在线观看| 男按摩师做乳房按摩视频日韩电影 | 千与千寻免费| 隐形的帽子在线观看完整版免费高清| 《隔壁放荡人妻BD高清》在线| 新水浒传24集| 道士下山 豆瓣| 阳西县| 空蝉之森| 一不小心爱上你歌曲| 爱情公寓5第13集| 正者无敌电视剧完整版免费| 女版战狼10国语在线观看| 儿子妈妈免费观看电视剧| 满天星高压监狱2免费观看| 地牢女孩在线观看完整版高清| 老河口市| eeUsS| 似火流年电视剧免费观看| 祈祷爱情电视剧| 一天内全球多地发生客机事故| 法国女超人电影| 韩国三级丝袜销售在线播放| 春雨绵绵妻独睡| 怪医黑杰克剧场版| 边缘行者免费观看全集高清| 需要爸爸的种子免费观看电视剧意大 | 高清《幸福一家人》电视剧| 壮士出征全集| 原来你一直深爱着我短剧| 战狼6免费999加拿大版在线观看| 小密桃5| 再见艳阳天保剑锋版| 欢乐颂电视剧全集免费观看| 汤唯 电影| 酒店激战 第1-5集 免费观看李丽珍| 玉蒲心经| 箭在弦上29集| 零点电影完整版| 余罪第三部全集完整版| 需要爸爸的种子美剧| 汪峰春天里| 天天躁狂AAAA| 出伏后还要热多久| 《和讨厌的部长出差旅》在线观看 | 《酒店》1-90集免费观看| 让子弹飞完整版电影| 樱兰男公关部| 快乐大本营2011年全集在线观看| 我同学的妈妈双字id| 好儿子妈好爽快插我嫩草视频| 游戏规则 电影| 正面还是反面?电影| 梦华录在线电视剧免费观看西瓜| 荣誉守则(成人版)在线| 怪异在线观看| 向往的生活5完整版免费西瓜| 意大利电影爱情与秘密 | 泛而不精的我被逐出勇者队伍未删减| 监禁的时间| 凯登·克劳丝-Kayden壮志凌云| 胡桃大战史莱姆在线观看| 真探第二季在线观看完整版| 动漫男女一起愁愁愁观看全集| 电视剧精英律师48集全免费| 美妙旋律第三季| 顶楼第三季全集免费观看| 赤膊狂奔电影完整版| 淫荡女警| 信者无敌全集在线观看| 魔神英雄传第三季| 因为想你泰剧在线观看完整版免费| 2.5次元的疑惑| 驯服调教上司女社长电影| 哈尔滨美食团购| 绣春刀1| 小时代3西瓜影音| 美国1-7| 360大佬爱上我第三季免费观看| 驱魔面馆| 北欧冷冰冰| 无遮挡动漫在线观看| 激战酒店| 小密桃5| 播放米老鼠| 源代码在线观看| 海豹看看动画片在线观看 | 电影销魂玉| 小丑免费| 刘汉涉黑集团受审| 伴我入眠| 秋瓷炫《生死决断》在线观看| 友谊地久天长歌曲| 以法之名全集免费观看| 迎风的青春电视剧免费观看全集| 乡村爱情16部全集电视剧| 牛鞭擦进女人下身| 乡村爱情6全集| 庆余年28| 广场舞故乡的云| 林师傅在首尔剧情介绍| 伊波拉病毒2伊波拉大逃亡| 《致命游戏》免费观看| 破晓mv| 人鬼神 电影| 律师大人巴布印度电视剧在线观看| 小密逃| 国家宝藏cctv| 特殊争夺| 先生你哪位| 我和我的家乡电影免费完整版| 三年成全播放国语高清| 法国女超人HD版在线观看| 无限日本电影免费观看完整版| 《少年派》| 韩版泡沫之夏| 白峰电影全集免费观看国语| 维修师傅的遇艳在线观看伦理片| 月球正在冷却收缩| 霸王别姬电影| 我的后半生在线观看免费高清| 浪漫黛比| overflower第一季动漫免费观看| 百家讲坛张居正| 家族的荣誉| 淬火年代免费观看全集播放| 噼里啪啦在线影视免费观看| 禁止的爱 免费观看 百度百度| 少年包青天1高清| 月宫宝盒电影完整视频免费观看| 仙逆124集完整版| 日本轮理电影女儿国3| 灰姑娘2015电影下载| 奇葩说第六季| 娘亲舅大电视剧全集免费观看| 日本校园体检方式引争议| 玄好心经9| 电影 上位| 黑雾电视剧免费观看完整版 | 法国空乘5免费在线观看| 白峰小视频在线观看免费| 我的野蛮婆婆在线观看| 年轻的母亲如如| 我的时代和我免费观看| 美容室的特殊待遇| 放韩国电影特殊游泳的裸课| 年轻的嫂子正版在线观看| 国语韩剧爱的呼唤| 羽月希在线观看| 陵水| 三年成全免费观看大全动漫| 瓦尼塔斯的笔记动漫在线观看樱花| 铎字怎么读| 命运之夜前传| 短剧金枝缠梦免费观看| 修理工的艳遇日韩伦理片在线观看 | 纸箱包子| 我为卿 狂| 荣耀法则满天星版在线观看| 韩宝贝| 少年卫斯理| 校墓处国语版| 高校教师成熟在线播放视频| 战狼15欧式少女高清| 白峰电影在线播放免费版最新章节美 | 恶魔少爷别吻我第二季| 哪吒一免费播放完整版| 禁忌1980满天星帕克| 电影《毒医肥尸》| 风水之王:改命转运第一人短剧全集 | 无间道风云下载| 电影《需要爸爸播种子》| 王多鱼直播打扑克回放| 瑜伽女教练| 邻家特工 下载| 杜十娘电影| 爱情公寓3 在线| 出差遇到前任渣男完整版| 学校怪谈| 僵尸道长第一部26| 幸福照相馆的演员| 少年派第二季电视剧免费观看全集 | 豆豆笑笑| 《乳房按摩》高清观看| 中央台中秋晚会2022| 火凤皇特种兵| 二十一世纪性格爱情指南免费下载 | 熊熊帮帮团| 亲爱的自己全集在线观看| 上海滩之陈真免费全集在线观看| 夏树电影免费观看完整版全集最新一| 岁月的童话影评| 明星大侦探第五季在线观看| 美国式保罗4| 幽游白书在线玩| 高清96分钟:列车爆炸案未删减| 女版战狼19高清国语免费观看| 《瑜伽裤的狂热》主演佳媛 | 《善良的妻子》| 麦乐迪与父亲经典片段| 边缘行者 电影| 篮球飞人| 夏日福星粤语版| 林正英僵尸先生电影在线观看| 插曲的痛30集全集免费播放百度云资源 | 替身逆袭:影后桂冠短剧全集| 甄嬛传55集| 电影末路| 雷波县| 《女部长通宵的引诱》电影 | 贝尔法斯特天堂路全集观看| 《和部长一起去出差旅》免费观看完整版| 斑马电影街桥矿| 雪在烧电影在线观看完整版| 影音先锋男人qq813| 更衣服人偶坠入爱河在线| 朝鲜金雪美| 郝板栗《千金》免费看| 唐伯虎点秋香全集| 我的山与海未删减| 栋笃特工| 杀手记忆 第一季全集观看| 一路夫妻电视剧| 安娜和拳王满天星| 何百芮的地狱恋曲未删减| 阴阳路之红当当| 诱人的岳母| another动漫| 潜江市| 女子医院满天星法版免费观看| 你是迟来的欢喜免费观看| 仙王的日常生活免费观看| 五十度灰高清完整版电影| 漂亮的保姆高清 韩国| 西班牙《掌中之物》完整版| 加勒比海盗成人视频| 破地狱粤语版| 我的姐姐免费在线观看完整版资源| 东北往事2之黑道风云20年| 肺结节 科兴| 荷尔蒙爆发的视频原声| 锵锵锵锵免费观看完整版| 风间由美全集| 武则天秘史快播| 冷宫娘娘有喜啦| 皇后驾到短剧| 《overflower》动漫全集免费| 金银梅10普通话版免费观看下载| 高清《不遇云裳不遇你》电视剧| 新金瓶梅中文版真人| 罗马的房间图解| 胜女的代价3| 白峰电影在线播放免费版| 韩国特殊美发店| 电影《出轨成瘾》免费观看全集| 妈妈百度影音| 真破血全集免费看完整版| 秀丽江山之长歌行电视剧| 西红柿首付| 公与3个媳HD在线| 动画片少林传奇| 雷速登闪电冲线第3部全集| 爱我几何原版无删减版百度云 | 三圾片2013大全电影| 新杨门虎将电视剧免费观看| 女人强奸| 儿女情长电视剧| 《特别的酒店| 电影《需要爸爸播种子》在线看| 白雪公主被父亲高| 折腰电视剧观看在线播放| 高清《年轻的女仆》在线观看| 姐妹4完整版在线观看| 《双女任务》完整版电影| 法国版《女超人》在线播放| 甄嬛传免费版| 狄仁杰第一部全集| 向往的生活第7季| 新编辑部故事| 我的私人女家教老师理论片| 伦理《法国护士未删减》| 凌云壮志(欧美)满天星小娅是谁演的 | 金瓶玉梅完整版| 给我免费观看片在线电影的| 3对1初次体检4| 插曲的痛免费高清观看完整版| 开封府54集免费完整版电视剧| 放学后屋顶| 美国电影免费观看平台| 谎言大作战| 听说 720p| 丈夫升职妻子被社长欺负剧情| 售楼小姐的秘密》在线观看| 桑叶无删减| 年轻的母亲韩剧电视剧全集| 如来神掌国语| 暗区突围秘密任务| 圣特罗佩斯的姑娘们| 福利片《需要爸爸播种子》HD中字免费在线播放 - 酷客影院 | 学生的妈妈5字ID| 极限挑战第2季 综艺| 勾魂恶梦在线观看免费完整国语| 纯真时代| 母亲6免费完整高清电视剧在线看| 希岛爱理| 水卜樱剧情解析图解gif| 母亲爱上儿子同学的美剧| 高清《我脑中的橡皮擦》高清完整版 | 我的好妈妈4韩国免费观看| 游泳池的工作2姜敏宇| 房奴试爱电视剧开头智恩第2集| 变形金刚5:最后的骑士| 菲律宾电影修理工的艳遇| 女皇之刃| 卡萨布兰卡电影| 出差被最讨厌的部长欺负的电影| 姐姐的男朋友7| 少年歌行电视剧免费观看| 秀丽江山之长歌行 电视剧| 我的公主国语| 《功夫熊猫2》| 幸运星国语版| 《义子侵犯》加山夏子| 妻子6免费完整版高清韩剧观看| 飙速宅男第二季| 神探夏洛克第四季第三集下载 | 阳原县| 台湾动感之星全集视频| 插曲的痛45全集免费观看高清版 | 哇嘎电影免费观看国语高清| 小姨子在线观看| 萌鸡小队第六季| 江山为重| 大城小事电视剧免费观看全集| 一家不说两家话| 女版战狼12免费观看999战狼7| 美国伦理片激战丛林珍妮免费在线观看全集兵王影视 | 高压监狱法版在线| 壮硕军警猛男高H| 优酷爱情公寓| 电视剧时尚女编辑| 波野结衣qvod| 杜康指的是什么意思| 《蓝帽子》朴亚珍| 美国XXXX视频| 《沉香如屑》电视剧| 银魂105| 天使的翅膀简谱| 玉莆田之级乐鉴宝| 全开女孩| 泰国非常大度的电影原声| 酒店1-100集免费看全集下载| 雷火剑OVA番剧初恋时间演员表|