最近在看一些開源項目,大佬的思路還是很值得去學習,今天就簡單介紹一下單鏈表的應用,配合回調(diào)函數(shù)可以玩出新花樣,廢話不多說直接看代碼!
| 頭文件
#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;
// 創(chuàng)建對象
sensor_t sensor1;
sensor_t sensor2;
sensor_t sensor3;
// 回調(diào)函數(shù)
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);
}
// 傳感器開始(往鏈表添加節(jié)點)
void sensor_start(sensor_t* handle)
{
sensor_t* target = head_handle;
if(head_handle == NULL)
{
/* 鏈表為空 */
head_handle = handle;
handle->next = NULL;
}
else
{
/* 鏈表中存在節(jié)點,遍歷找最后一個節(jié)點 */
while(target->next != NULL)
{
/* 去掉重復節(jié)點 */
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 */
}
}
這個寫法是理論上只會受限于內(nèi)存大小,理想狀態(tài)下可以無限創(chuàng)建對象,通過綁定回調(diào)函數(shù),能在一定程度上解決調(diào)用耦合的問題!
--END--
收錄于合集 **#**c語言
2個
上一篇C語言|void 指針
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
代碼
+關(guān)注
關(guān)注
30文章
4882瀏覽量
70046 -
回調(diào)函數(shù)
+關(guān)注
關(guān)注
0文章
88瀏覽量
11792 -
單鏈表
+關(guān)注
關(guān)注
0文章
13瀏覽量
6976
發(fā)布評論請先 登錄
相關(guān)推薦
熱點推薦
C語言-鏈表(單向鏈表、雙向鏈表)
在前面章節(jié)已經(jīng)學習了數(shù)組的使用,數(shù)組的空間是連續(xù)空間,數(shù)組的大小恒定的,在很多動態(tài)數(shù)據(jù)存儲的應用場景下,使用不方便;而這篇文章介紹的鏈表結(jié)構(gòu),支持動態(tài)增加節(jié)點,釋放節(jié)點,比較適合存儲動態(tài)數(shù)據(jù)的應用場景,而且鏈表的空間是存儲在堆上面的,可以動態(tài)分配,釋放
C語言實現(xiàn)靜態(tài)鏈表的建立
在這么卷的時代,我覺得硬件工程師還是 要掌握基本的C語言編寫能力,鏈表在學生階段是一個比較難的知識點,可能有些同學上完一個大學都不會鏈表的編寫,但是在未來工作中,
發(fā)表于 01-13 15:08
?881次閱讀

C語言單鏈表的應用
最近在看一些開源項目,大佬的思路還是很值得去學習,今天就簡單介紹一下單鏈表的應用,配合回調(diào)函數(shù)可以玩出新花樣,廢話不多說直接看代碼!
發(fā)表于 02-17 09:22
?498次閱讀
C語言算法題:反轉(zhuǎn)一個單向鏈表
鏈表是編程學習的一個難點。其實,在C語言編程以及單片機裸機開發(fā)中,鏈表運用并不多。但是如果想提升嵌入式技能水平或收入水平,可以考慮深入嵌入式系統(tǒng)層面(如參與操作系統(tǒng)設計、深入學習新的操
發(fā)表于 06-21 11:07
?1241次閱讀

C語言玩轉(zhuǎn)鏈表
C語言是必學的一個課程,不管你是單片機還是嵌入式物聯(lián)網(wǎng),都是基礎,所以還是要好好學習的今天推薦的資料是關(guān)于C語言鏈表的資料我自己看了一下主要
發(fā)表于 11-13 13:50
C語言實現(xiàn)單鏈表舉例
所謂鏈表,就是用一組任意的存儲單元存儲線性表元素的一種數(shù)據(jù)結(jié)構(gòu)。鏈表又分為單鏈表、雙向鏈表和循環(huán)鏈表
發(fā)表于 07-11 16:40
?87次下載

C語言_鏈表總結(jié)
本篇文章介紹C語言鏈表相關(guān)知識點,涉及鏈表的創(chuàng)建、單向鏈表、循環(huán)鏈表、雙向
OpenHarmony中軟件模塊的單鏈表實現(xiàn)
為了性能考慮,嵌入式系統(tǒng)一般使用C語言進行開發(fā),由于C語言標準庫沒有封裝鏈表,所以嵌入式系統(tǒng)一般自己設計和實現(xiàn)
發(fā)表于 08-30 09:25
?437次閱讀
評論