最近在看一些開源項目,大佬的思路還是很值得去學習,今天就簡單介紹一下單鏈表的應用,配合回調函數可以玩出新花樣,廢話不多說直接看代碼!
| 頭文件
#include "stdio.h"
#include "stdint.h"
typedef struct sensor
{
uint8_t flag;
void (*callback)(void);
struct sensor* next;
}sensor_t;
extern sensor_t sensor1;
extern sensor_t sensor2;
extern sensor_t sensor3;
void sensor1_callback(void);
void sensor2_callback(void);
void sensor3_callback(void);
void sensor_init(sensor_t* handle, void(*callback)(void));
void sensor_start(sensor_t* handle);
void sensor_handle(void);
| 源碼
// 鏈表頭指針
static sensor_t* head_handle = NULL;
// 創建對象
sensor_t sensor1;
sensor_t sensor2;
sensor_t sensor3;
// 回調函數
void sensor1_callback(void)
{
printf("sensor1!\\r\\n");
}
void sensor2_callback(void)
{
printf("sensor2!\\r\\n");
}
void sensor3_callback(void)
{
printf("sensor3!\\r\\n");
}
// 傳感器初始化
void sensor_init(sensor_t* handle, void(*callback)(void))
{
handle->callback = callback;
handle->flag = 0x00;
sensor_start(handle);
}
// 傳感器開始(往鏈表添加節點)
void sensor_start(sensor_t* handle)
{
sensor_t* target = head_handle;
if(head_handle == NULL)
{
/* 鏈表為空 */
head_handle = handle;
handle->next = NULL;
}
else
{
/* 鏈表中存在節點,遍歷找最后一個節點 */
while(target->next != NULL)
{
/* 去掉重復節點 */
if(target == handle){
break;
}
target = target->next;
}
target->next = handle;
handle->next = NULL;
}
}
// 傳感器處理(遍歷鏈表)
void sensor_handle(void)
{
sensor_t* target = head_handle;
while(target != NULL)
{
target->callback();
target = target->next;
}
}
| 運用
int main()
{
sensor_init(&sensor1,sensor1_callback);
sensor_init(&sensor2,sensor2_callback);
sensor_init(&sensor3,sensor3_callback);
sensor_handle();
while (1)
{
/* code */
}
}
這個寫法是理論上只會受限于內存大小,理想狀態下可以無限創建對象,通過綁定回調函數,能在一定程度上解決調用耦合的問題!
--END--
收錄于合集 **#**c語言
2個
上一篇C語言|void 指針
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
代碼
+關注
關注
30文章
4747瀏覽量
68349 -
回調函數
+關注
關注
0文章
87瀏覽量
11543 -
單鏈表
+關注
關注
0文章
13瀏覽量
6915
發布評論請先 登錄
相關推薦
C語言-鏈表(單向鏈表、雙向鏈表)
在前面章節已經學習了數組的使用,數組的空間是連續空間,數組的大小恒定的,在很多動態數據存儲的應用場景下,使用不方便;而這篇文章介紹的鏈表結構,支持動態增加節點,釋放節點,比較適合存儲動態數據的應用場景,而且鏈表的空間是存儲在堆上面的,可以動態分配,釋放
C語言實現靜態鏈表的建立
在這么卷的時代,我覺得硬件工程師還是 要掌握基本的C語言編寫能力,鏈表在學生階段是一個比較難的知識點,可能有些同學上完一個大學都不會鏈表的編寫,但是在未來工作中,
發表于 01-13 15:08
?705次閱讀
C語言單鏈表的應用
最近在看一些開源項目,大佬的思路還是很值得去學習,今天就簡單介紹一下單鏈表的應用,配合回調函數可以玩出新花樣,廢話不多說直接看代碼!
發表于 02-17 09:22
?428次閱讀
C語言算法題:反轉一個單向鏈表
鏈表是編程學習的一個難點。其實,在C語言編程以及單片機裸機開發中,鏈表運用并不多。但是如果想提升嵌入式技能水平或收入水平,可以考慮深入嵌入式系統層面(如參與操作系統設計、深入學習新的操
發表于 06-21 11:07
?779次閱讀
OpenHarmony中軟件模塊的單鏈表實現
為了性能考慮,嵌入式系統一般使用C語言進行開發,由于C語言標準庫沒有封裝鏈表,所以嵌入式系統一般自己設計和實現
發表于 08-30 09:25
?332次閱讀
評論