C嵌入式编程设计模式
refer to: https://github.com/ksvbka/design_pattern_for_embedded_system
IDE: vscode
编译eg:
gcc sensor.c sensor_main.c -o main
编译多个文件,建议参考目录中的 Makefile
运行eg:
./main.exe
原书有部分代码有问题,已修改;
如果此项目可以帮到你,请我喝杯咖啡:P
进度: P75
心电图 ECG 模型数据
2-1 ECGPkg.h -> 定义队列大小和 boolean 类型
2-2 TMDQueue.h -> 定时标记数据队列(TMDQueue), 包括各种数据客户通过 ECG 模块插入的数据
2-3 ECG_Module.h -> 获取选定导联时间的数据,调用 TMDQueue_insert 存储
2-4 HistogramDisplay.h
2-5 TMDQueue.c
2-6 ECG_Module.c -> 实现文件显示数据如何插入到队列中
2-7 HistogramDisplay.c -> 实现文件显示 TMDQueue_remove 函数的使用
2-8 TestBuilder.h
2-9 TestBuilder.c
2=10 main.c -> 展示了不同的类插入数据到队列中的简单应用,并且有客户从中读出信息并使用
2-11 TMDQueue_ob.h 观察者模式的头文件
2-12 TMDQueue_ob.c
2-13 NotificationHandle.h
2-14 NotificationHanlde.c
2-15 HistogramDisplay_ob.c
3-1 操作面向位的内存映射硬件
3-2 C中的位域
创建软件单元负责访问硬件的一部分、硬件压缩封装以及编码实现。使用类或结构体封装所有硬件设备访问。
- initialize: 公有方法,初始化
- configure: 公有方法,配置设备
- disable: 公有方法,关闭或禁用
- access: 公有方法,从设备返回一个特殊值
- mulate: 公有方法,向设备写入
- unmarshal: 私有方法,在返回设备数据前,执行解密解压等操作(表示->原始),客户不可访问
- marshal: 私有方法,使用其他方法获取参数后,执行加密压缩等操作(原始->表示),客户不可访问
3-3 HardwareProxyExample.h
3-4 MotorData.h
3-5 MotorProxy.h
3-6 MotorProxy.c
扩展硬件代理模式,以提供支持不同硬件接口的能力;使已存在的硬件接口能适应应用期望
Gas_Display 客户为相关医护人员显示这些数据
Gas_Mixer 客户端将这些数据用于气体输送闭合循环控制
iO2Sensor 提供两个服务 gimmeO2Conc, gimmeO2Flow
AcmeO2SensorProxy 提供两个服务 getO2Conc, getO2Flow
UltimateO2Sensor 提供两个服务 accessO2Conc, accessGasFlow
支持多种硬件设备的协调,实现系统级的行为
3-9 RobotArmManager.h
3-10 RobotArmManager.c
发布遥感数据到需要的软件元素的方法("发布-订阅模式")
3-11 GasSensor.h
3-12 GasSensor.c
3-13 DisplayClient.h
3-14 DisplayClient.c
3-15 GasData.h
3-16 GasData.c
按键,转动开关,继电器等
硬件设备接口简单重用的方法
高紧急度事件,即使在系统非常繁忙地处理其他事件时,也必须处理这些事件,如按键
拓展中断定时器为嵌入式系统提供精确时序
当数据或事件不是高度紧急,且数据采集事足够短可采用轮询模式
- 抢占式调度
- 时间片调度
- 优先级调度
在无线循环内调度线程
通过优先级调度线程
通过禁用任务转换保护资源
通过互斥信号量保护资源
通过消息排队序列化访问
协调复杂任务同步
通过同时锁定资源避免死锁
通过以特定的顺序锁定资源避免死锁
附录A UML表示法