国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

自定義循環(huán)隊列、軟件定時器、事件集,實用嵌入式代碼庫

這篇具有很好參考價值的文章主要介紹了自定義循環(huán)隊列、軟件定時器、事件集,實用嵌入式代碼庫。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、介紹

本篇博文分享一個很實用的嵌入式代碼庫。
它可靈活應用到有無RTOS的程序中,采用C語言面向?qū)ο蟮乃悸穼崿F(xiàn)各個功能,盡可能最大化的復用代碼,目前為止工具包包含:循環(huán)隊列、軟件定時器、事件集
網(wǎng)址:https://download.csdn.net/download/m0_38106923/87765476?spm=1001.2014.3001.5503

  • Queue 循環(huán)隊列
    1. 支持動態(tài)、靜態(tài)方式進行隊列的創(chuàng)建與刪除。
    2. 可獨立配置緩沖區(qū)大小。
    3. 支持數(shù)據(jù)最新保持功能,當配置此模式并且緩沖區(qū)已滿,若有新的數(shù)據(jù)存入,將會移除最早數(shù)據(jù),并保持緩沖區(qū)已滿。
  • Timer 軟件定時器
    1. 支持動態(tài)、靜態(tài)方式進行定時器的創(chuàng)建與刪除。
    2. 支持循環(huán)、單次模式。
    3. 可配置有無超時回調(diào)函數(shù)。
    4. 可配置定時器工作在周期間隔模式。
    5. 使用雙向鏈表,超時統(tǒng)一管理,不會因為增加定時器而增加超時判斷代碼。
  • Event 事件集
    1. 支持動態(tài)、靜態(tài)方式進行事件集的創(chuàng)建與刪除。
    2. 每個事件最大支持32個標志位。
    3. 事件的觸發(fā)可配置為**“標志與”“標志或”**。

2 、文件目錄

toolkit
├── include                         // 包含文件目錄
|   ├── toolkit.h                   // toolkit頭文件
|   └── toolkit_cfg.h               // toolkit配置文件
├── src                             // toolkit源碼目錄
|   ├── tk_queue.c                  // 循環(huán)隊列源碼
|   ├── tk_timer.c                  // 軟件定時器源碼
|   └── tk_event.c                  // 事件集源碼
├── samples                         // 例子
|   ├── tk_queue_samples.c          // 循環(huán)隊列使用例程源碼
|   ├── tk_timer_samples.c          // 軟件定時器使用例程源碼
|   └── tk_event_samples.c          // 事件集使用例程源碼
└── README.md                       // 說明文檔

3 、函數(shù)定義

3.1 配置文件


  • ToolKit配置項

    宏定義 描述
    TOOLKIT_USING_ASSERT ToolKit使用斷言功能
    TOOLKIT_USING_QUEUE ToolKit使用循環(huán)隊列功能
    TOOLKIT_USING_TIMER ToolKit使用軟件定時器功能
    TOOLKIT_USING_EVENT ToolKit使用事件集功能
  • Queue 循環(huán)隊列配置項

    宏定義 描述
    TK_QUEUE_USING_CREATE Queue 循環(huán)隊列使用動態(tài)創(chuàng)建和刪除
  • Timer 軟件定時器配置項

    宏定義 描述
    TK_TIMER_USING_CREATE Timer 軟件定時器使用動態(tài)創(chuàng)建和刪除
    TK_TIMER_USING_INTERVAL Timer 軟件定時器使用間隔模式
    TK_TIMER_USING_TIMEOUT_CALLBACK Timer 軟件定時器使用超時回調(diào)函數(shù)
  • Event 事件集配置項

    宏定義 描述
    TK_EVENT_USING_CREATE Event 事件集使用動態(tài)創(chuàng)建和刪除

說明:當配置TOOLKIT_USING_ASSERT后,所有功能都將會啟動參數(shù)檢查。

3.2 Queue 循環(huán)隊列API函數(shù)


以下為詳細API說明及簡要示例程序,綜合demo可查看tk_queue_samples.c示例。

3.2.1 動態(tài)創(chuàng)建隊列

注意:當配置TOOLKIT_USING_QUEUE后,才能使用此函數(shù)。此函數(shù)需要用到malloc。

struct tk_queue *tk_queue_create(uint16_t queue_size, uint16_t max_queues, bool keep_fresh);
參數(shù) 描述
queue_size 緩存區(qū)大小(單位字節(jié))
max_queues 最大隊列個數(shù)
keep_fresh 是否為保持最新模式,true:保持最新;false:默認(存滿不能再存)
返回值 創(chuàng)建的隊列對象(NULL為創(chuàng)建失?。?/td>

隊列創(chuàng)建示例:

int main(int argc, char *argv[])
{
    /* 動態(tài)方式創(chuàng)建一個循環(huán)隊"queue",緩沖區(qū)大小50字節(jié),不保持最新 */
    struct tk_queue *queue = tk_queue_create(50, 1, false);
    if( queue == NULL){
        printf("隊列創(chuàng)建失敗!\n");
    }
    /* ... */
    /* You can add your code under here. */
    return 0;
}
3.2.2 動態(tài)刪除隊列

注意:當配置TOOLKIT_USING_QUEUE后,才能使用此函數(shù)。此函數(shù)需要用到free。必須為動態(tài)方式創(chuàng)建的隊列對象。

bool tk_queue_delete(struct tk_queue *queue);
參數(shù) 描述
queue 要刪除的隊列對象
返回值 true:刪除成功;false:刪除失敗
3.2.3 靜態(tài)初始化隊列
bool tk_queue_init(struct tk_queue *queue, void *queuepool, uint16_t pool_size, uint16_t queue_size, bool keep_fresh);
參數(shù) 描述
queue 要初始化的隊列對象
*queuepool 隊列緩存區(qū)
pool_size 緩存區(qū)大小(單位字節(jié))
queue_size 隊列元素大小(單位字節(jié))
keep_fresh 是否為保持最新模式,true:保持最新;false:默認(存滿不能再存)
返回值 true:初始化成功;false:初始化失敗

隊列創(chuàng)建示例:

int main(int argc, char *argv[])
{
    /* 定義一個循環(huán)隊列 */
    struct tk_queue queue;
    /* 定義循環(huán)隊列緩沖區(qū) */
    uint8_t queue_pool[100];
    /* 靜態(tài)方式創(chuàng)建一個循環(huán)隊列"queue",緩存區(qū)為queue_pool,大小為queue_pool的大小,模式為保持最新 */
    if( tk_queue_init(&queue, queue_pool, sizeof(queue_pool), 
                      sizeof(queue_pool[0]), true) == false){
        printf("隊列創(chuàng)建失敗!\n");
    }
    /* ... */
    /* You can add your code under here. */
}

3.2.4 靜態(tài)脫離隊列

注意: 會使緩存區(qū)脫離與隊列的關聯(lián)。必須為靜態(tài)方式創(chuàng)建的隊列對象。

bool tk_queue_detach(struct tk_queue *queue);
參數(shù) 描述
queue 要脫離的隊列對象
返回值 true:脫離成功;false:脫離失敗
3.2.5 清空隊列
bool tk_queue_clean(struct tk_queue *queue);
參數(shù) 描述
queue 要清空的隊列對象
返回值 true:清除成功;false:清除失敗
3.2.6 判斷隊列是否為空
bool tk_queue_empty(struct tk_queue *queue);
參數(shù) 描述
queue 要查詢的隊列對象
返回值 true:空;false:不為空
3.2.7 判斷隊列是否已滿
bool tk_queue_full(struct tk_queue *queue);
參數(shù) 描述
queue 要查詢的隊列對象
返回值 true:滿;false:不為滿
3.2.8 從隊列中讀取一個元素(不從隊列中刪除)
bool tk_queue_peep(struct tk_queue *queue, void *pval);
參數(shù) 描述
queue 隊列對象
*pval 讀取值地址
返回值 true:讀取成功;false:讀取失敗
3.2.9 移除一個元素
bool tk_queue_remove(struct tk_queue *queue);
參數(shù) 描述
queue 要移除元素的對象
返回值 true:移除成功;false:移除失敗
3.2.10 向隊列壓入(入隊)1個元素數(shù)據(jù)
bool tk_queue_push(struct tk_queue *queue, void *val);
參數(shù) 描述
queue 要壓入的隊列對象
*val 壓入值
返回值 true:成功;false:失敗
3.2.11 從隊列彈出(出隊)1個元素數(shù)據(jù)
bool tk_queue_pop(struct tk_queue *queue, void *pval);
參數(shù) 描述
queue 要彈出的隊列對象
*pval 彈出值
返回值 true:成功;false:失敗
3.2.12 查詢隊列當前數(shù)據(jù)長度
uint16_t tk_queue_curr_len(struct tk_queue *queue);
參數(shù) 描述
queue 要查詢的隊列對象
返回值 隊列數(shù)據(jù)當前長度
3.2.13 向隊列壓入(入隊)多個元素數(shù)據(jù)
uint16_t tk_queue_push_multi(struct tk_queue *queue, void *pval, uint16_t len);
參數(shù) 描述
queue 要壓入的隊列對象
*pval 壓入數(shù)據(jù)首地址
len 壓入元素個數(shù)
返回值 實際壓入個數(shù)
3.2.14 從隊列彈出(出隊)多個元素數(shù)據(jù)
uint16_t tk_queue_pop_multi(struct tk_queue *queue, void *pval, uint16_t len);
參數(shù) 描述
queue 要彈出的隊列對象
*pval 存放彈出數(shù)據(jù)的首地址
len 希望彈出的數(shù)據(jù)個數(shù)
返回值 實際彈出個數(shù)

3.3 Timer 軟件定時器API函數(shù)


以下為詳細API說明及簡要示例程序,綜合demo可查看tk_timer_samples.c示例。

3.3.1 軟件定時器功能初始化

注意:此函數(shù)在使用定時器功能最初調(diào)用,目的是創(chuàng)建定時器列表頭結點,和配置tick獲取回調(diào)函數(shù)。

bool tk_timer_func_init(uint32_t (*get_tick_func)(void));
參數(shù) 描述
get_tick_func 獲取系統(tǒng)tick回調(diào)函數(shù)
返回值 true:初始化成功;false:初始化失敗
3.3.2 動態(tài)創(chuàng)建定時器

注意:當配置TOOLKIT_USING_TIMER后,才能使用此函數(shù)。此函數(shù)需要用到malloc。

struct tk_timer *tk_timer_create(void(*timeout_callback)(struct tk_timer *timer));
參數(shù) 描述
timeout_callback 定時器超時回調(diào)函數(shù),不使用可配置為NULL
返回值 創(chuàng)建的定時器對象(NULL為創(chuàng)建失敗)

定時器創(chuàng)建示例:

/* 定義獲取系統(tǒng)tick回調(diào)函數(shù) */
uint32_t get_sys_tick(void)
{
    return tick;
}

/* 定時器超時回調(diào)函數(shù) */
void timer_timeout_callback(struct tk_timer *timer)
{
    printf("timeout_callback: timer timeout:%ld\n", get_sys_tick());
}

int main(int argc, char *argv[])
{
    /* 初始化軟件定時器功能,并配置tick獲取回調(diào)函數(shù)*/
    tk_timer_func_init(get_sys_tick);
    
    /* 定義定時器指針 */
    tk_timer_t timer = NULL;
    /* 動態(tài)方式創(chuàng)建timer,并配置定時器超時回調(diào)函數(shù) */
    timer = tk_timer_create((tk_timer_timeout_callback *)timer_timeout_callback);
    if (timer == NULL)
    {
        printf("定時器創(chuàng)建失敗!\n");
        return 0;
    }
    /* ... */
    /* You can add your code under here. */
    return 0;
}

3.3.3 動態(tài)刪除定時器

當配置TOOLKIT_USING_TIMER后,才能使用此函數(shù)。此函數(shù)需要用到free。必須為動態(tài)方式創(chuàng)建的定時器對象。

bool tk_timer_delete(struct tk_timer *timer);
參數(shù) 描述
timer 要刪除的定時器對象
返回值 true:刪除成功;false:刪除失敗
3.3.4 靜態(tài)初始化定時器
bool tk_timer_init(struct tk_timer *timer, void (*timeout_callback)(struct tk_timer *timer));
參數(shù) 描述
timer 要初始化的定時器對象
timeout_callback 定時器超時回調(diào)函數(shù),不使用可配置為NULL
返回值 true:創(chuàng)建成功;false:創(chuàng)建失敗

隊列創(chuàng)建示例:

/* 定義獲取系統(tǒng)tick回調(diào)函數(shù) */
uint32_t get_sys_tick(void)
{
    return tick;
}

/* 定時器超時回調(diào)函數(shù) */
void timer_timeout_callback(struct tk_timer *timer)
{
    printf("timeout_callback: timer timeout:%ld\n", get_sys_tick());
}

int main(int argc, char *argv[])
{
    /* 定義定時器timer */
    struct tk_timer timer;
    bool result = tk_timer_init( &timer,(tk_timer_timeout_callback *)timer_timeout_callback);
    if (result == NULL)
    {
        printf("定時器創(chuàng)建失敗!\n");
        return 0;
    }
    /* ... */
    /* You can add your code under here. */
    return 0;
}
3.3.5 靜態(tài)脫離定時器

注意: 會將timer從定時器鏈表中移除。必須為靜態(tài)方式創(chuàng)建的定時器對象。

bool tk_timer_detach(struct tk_timer *timer);
參數(shù) 描述
timer 要脫離的定時器對象
返回值 true:脫離成功;false:脫離失敗
3.3.6 定時器啟動
bool tk_timer_start(struct tk_timer *timer, tk_timer_mode mode, uint32_t delay_tick);
參數(shù) 描述
timer 要啟動的定時器對象
mode 工作模式,單次: TIMER_MODE_SINGLE;循環(huán): TIMER_MODE_LOOP
delay_tick 定時器時長(單位tick)
返回值 true:啟動成功;false:啟動失敗
3.3.7 定時器停止
bool tk_timer_stop(struct tk_timer *timer);
參數(shù) 描述
timer 要停止的定時器對象
返回值 true:停止成功;false:停止失敗
3.3.8 定時器繼續(xù)
bool tk_timer_continue(struct tk_timer *timer);
參數(shù) 描述
timer 要繼續(xù)的定時器對象
返回值 true:繼續(xù)成功;false:繼續(xù)失敗
3.3.9 定時器重啟

注意:重啟時長為最后一次啟動定時器時配置的時長。

bool tk_timer_restart(struct tk_timer *timer);
參數(shù) 描述
timer 要重啟的定時器對象
返回值 true:重啟成功;false:重啟失敗
3.3.10 獲取定時器模式
tk_timer_mode tk_timer_get_mode(struct tk_timer *timer);
參數(shù) 描述
timer 要獲取的定時器對象
返回值 定時器模式
定時器模式 描述
TIMER_MODE_SINGLE 單次模式
TIMER_MODE_LOOP 循環(huán)模式
3.3.11 獲取定時器狀態(tài)
tk_timer_state tk_timer_get_state(struct tk_timer *timer);
參數(shù) 描述
timer 要獲取的定時器對象
返回值 定時器狀態(tài)
定時器模式 描述
TIMER_STATE_RUNNING 運行狀態(tài)
TIMER_STATE_STOP 停止狀態(tài)
TIMER_STATE_TIMEOUT 超時狀態(tài)
3.3.12 定時器處理
bool tk_timer_loop_handler(void);
參數(shù) 描述
返回值 true:正常;false:異常,在調(diào)用此函數(shù)前,未初始化定時器功能“tk_timer_func_init

注意:tk_timer_loop_handler函數(shù)要不斷的循環(huán)調(diào)用。

3.3.13 超時回調(diào)函數(shù)

函數(shù)原型

typedef void (*timeout_callback)(struct tk_timer *timer);

說明:超時回調(diào)函數(shù)可定義多個,即一個定時器對應一個回調(diào)函數(shù),也可多個定時器對應一個回調(diào)函數(shù)。

  • 一對一

    /* 定義兩個回調(diào)函數(shù),對應定時器timer1和timer2 */
    void timer1_timeout_callback(struct tk_timer *timer){
    	printf("定時器1超時!\n");
    }
    void timer2_timeout_callback(struct tk_timer *timer){
    	printf("定時器2超時!\n");
    }
    /* 創(chuàng)建兩個定時器,配置單獨超時回調(diào)函數(shù) */
    timer1 = tk_timer_create((timeout_callback *)timer1_timeout_callback);
    timer2 = tk_timer_create((timeout_callback *)timer2_timeout_callback);
    
  • 多對一

    /* 定時器timer1和timer2共用一個回調(diào)函數(shù),在回調(diào)函數(shù)做區(qū)分 */
    void timer_timeout_callback(struct tk_timer *timer){
    	if (timer == timer1)
    		printf("定時器1超時!\n");
        else if (timer == timer2)
            printf("定時器2超時!\n");
    }
    /* 創(chuàng)建兩個定時器,使用相同的超時回調(diào)函數(shù) */
    timer1 = tk_timer_create((timeout_callback *)timer_timeout_callback);
    timer2 = tk_timer_create((timeout_callback *)timer_timeout_callback);
    

3.4 Event 事件集API函數(shù)


以下為詳細API說明及簡要示例程序,綜合demo可查看tk_event_samples.c示例。

3.4.1 動態(tài)創(chuàng)建一個事件

注意:當配置TOOLKIT_USING_EVENT后,才能使用此函數(shù)。此函數(shù)需要用到malloc

struct tk_event *tk_event_create(void);
參數(shù) 描述
返回值 創(chuàng)建的事件對象(NULL為創(chuàng)建失敗)
3.4.2 動態(tài)刪除一個事件

當配置TOOLKIT_USING_TIMER后,才能使用此函數(shù)。此函數(shù)需要用到free。必須為動態(tài)方式創(chuàng)建的事件對象。文章來源地址http://www.zghlxwxcb.cn/news/detail-437636.html

bool tk_event_delete(struct tk_event *event);
參數(shù) 描述
event 要刪除的事件對象
返回值 true:刪除成功;false:刪除失敗
3.4.3 靜態(tài)初始化一個事件
bool tk_event_init(struct tk_event *event);
參數(shù) 描述
event 要初始化的事件對象
返回值 true:創(chuàng)建成功;false:創(chuàng)建失敗
3.4.4 發(fā)送事件標志
bool tk_event_send(struct tk_event *event, uint32_t event_set);
參數(shù) 描述
event 發(fā)送目標事件對象
event_set 事件標志,每個標志占1Bit,發(fā)送多個標志可“|”
返回值 true:發(fā)送成功;false:發(fā)送失敗
3.4.5 接收事件
bool tk_event_recv(struct tk_event *event, uint32_t event_set, uint8_t option, uint32_t *recved);
參數(shù) 描述
event 接收目標事件對象
event_set 感興趣的標志,每個標志占1Bit,多個標志可“|”
option 操作,標志與:TK_EVENT_OPTION_AND; 標志或:TK_EVENT_OPTION_OR; 清除標志:TK_EVENT_OPTION_CLEAR
返回值 true:發(fā)送成功;false:發(fā)送失敗

到了這里,關于自定義循環(huán)隊列、軟件定時器、事件集,實用嵌入式代碼庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【javaEE】阻塞隊列、定時器、線程池

    【javaEE】阻塞隊列、定時器、線程池

    目錄 ??一、阻塞隊列 1.概念 2.生產(chǎn)者消費者模型 3.阻塞隊列的實現(xiàn) ??二、定時器 1.引出定時器 2.定時器的實現(xiàn) ??三、線程池 1.引出線程池 2.ThreadPoolExecutor 構造方法 3.標準數(shù)據(jù)庫的4種拒絕策略【經(jīng)典面試題】【重點掌握】 4.線程池的實現(xiàn) ? 1.概念 ?對于隊列,首先我們想

    2023年04月21日
    瀏覽(20)
  • QT(9.3)定時器,繪制事件

    QT(9.3)定時器,繪制事件

    自定義一個鬧鐘 pro文件: 頭文件: 自定義函數(shù): ? 主函數(shù): 運行結果:

    2024年02月10日
    瀏覽(17)
  • ESP32---定時器+消息隊列的使用

    ESP32---定時器+消息隊列的使用

    ?創(chuàng)建消息隊列 初始化定時器和中斷 創(chuàng)建任務 在任務中執(zhí)行事件 ?前面是默認配置,設置定時器的鬧鐘(多久進一次中斷),使能定時器,注冊中斷函數(shù),開啟定時器 ?在這里發(fā)送消息隊列 是個結構體 ? 任務里面就接受到消息 就讓初始化的結構體中秒加1 如果秒大于了100 就log一

    2024年02月11日
    瀏覽(18)
  • 多線程案例 | 單例模式、阻塞隊列、定時器、線程池

    多線程案例 | 單例模式、阻塞隊列、定時器、線程池

    單例模式 單例模式是 設計模式 的一種 什么是設計模式? 設計模式好比象棋中的 “棋譜”,紅方當頭炮,黑方馬來跳,針對紅方的一些走法,黑方應招的時候有一些固定的套路,按照套路來走局勢就不會吃虧,也就發(fā)明了一組\\\"棋譜\\\",稱為設計模式 軟件開發(fā)中也有很多常見

    2024年02月15日
    瀏覽(25)
  • 【JavaEE初階】多線程(四)阻塞隊列 定時器 線程池

    【JavaEE初階】多線程(四)阻塞隊列 定時器 線程池

    概念 阻塞隊列是一種特殊的隊列. 也遵守 “ 先進先出 ” 的原則. 阻塞隊列能是一種線程安全的數(shù)據(jù)結構, 并且具有以下特性: 當隊列滿的時候, 繼續(xù)入隊列就會阻塞, 直到有其他線程從隊列中取走元素. 當隊列空的時候, 繼續(xù)出隊列也會阻塞,直到有其他線程往隊列中插入元素

    2023年04月26日
    瀏覽(19)
  • 【Java】多線程案例(單例模式,阻塞隊列,定時器,線程池)

    【Java】多線程案例(單例模式,阻塞隊列,定時器,線程池)

    ?? Author: 老九 ?? 個人博客:老九的CSDN博客 ?? 個人名言:不可控之事 樂觀面對 ?? 系列專欄: 單例模式是設計模式之一。代碼當中的某個類,只能有一個實例,不能有多個。單例模式分為:餓漢模式和懶漢模式 餓漢模式表示很著急,就想吃完飯剩下很多碗,然后一

    2024年02月06日
    瀏覽(51)
  • 對定時器中影子寄存器以及更新操作和更新事件理解

    對定時器中影子寄存器以及更新操作和更新事件理解

    本人是stm32初學者,近期在看定時器參考文檔時遇到些阻礙,再參考了眾多CSDN博主的文章后,得到了一些個人理解,將其發(fā)布出來,本文也對一些參考的文章進行了不少復制粘貼同時也在這些文章必要位置加入了個人看法,文章鏈接附在最后 由于本人是初學者,本文一定存在

    2024年02月05日
    瀏覽(21)
  • FreeRTOS(6)----軟件定時器

    FreeRTOS(6)----軟件定時器

    軟件定時器允許設置一段時間, 當設定的時間到達之后就會執(zhí)行指定的功能函數(shù) ,被定時器調(diào)用的這個函數(shù)叫做定時器的回調(diào)函數(shù)。 回調(diào)函數(shù)的兩次執(zhí)行間隔 叫做定時器的定時周期。 回調(diào)函數(shù)是在定時器服務任務中執(zhí)行的,因為定時器服務任務是由內(nèi)核產(chǎn)生,無法由用戶

    2024年02月05日
    瀏覽(30)
  • STM32軟件定時器

    STM32軟件定時器

    目錄 什么是定時器? 軟件定時器優(yōu)缺點 軟件定時器原理 軟件定時器相關配置 單次定時器和周期定時器 軟件定時器相關 API 函數(shù) 1. 創(chuàng)建軟件定時器 2. 開啟軟件定時器 3. 停止軟件定時器 4. 復位軟件定時器 5. 更改軟件定時器定時時間 實操 cubeMX配置 代碼實現(xiàn)? 簡單可以理解為

    2024年02月11日
    瀏覽(24)
  • Java 多線程系列Ⅳ(單例模式+阻塞式隊列+定時器+線程池)

    Java 多線程系列Ⅳ(單例模式+阻塞式隊列+定時器+線程池)

    設計模式就是軟件開發(fā)中的“棋譜”,軟件開發(fā)中也有很多常見的 “問題場景”。針對這些問題場景,大佬們總結出了一些固定的套路。按照這些套路來實現(xiàn)代碼可能不會很好,但至少不會很差。當前階段我們需要掌握兩種設計模式: (1)單例模式 (2)工廠模式 概念/特征

    2024年02月09日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包