最近在看一些开源项目,大佬的思路还是很值得去学习,今天就简单介绍一下单链表的应用,配合回调函数可以玩出新花样,废话不多说直接看代码!
| 头文件
#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浏览量
68348 -
回调函数
+关注
关注
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次阅读
评论