网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月08日漏签0天
嵌入式吧 关注:105,237贴子:485,268
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 首页 上一页 1 2 3
  • 79回复贴,共3页
  • ,跳到 页  
<<返回嵌入式吧
>0< 加载中...

回复:知识科普篇

  • 只看楼主
  • 收藏

  • 回复
  • 晚风的水雾
  • 启动代码
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
大神


  • 鹿芒l-
  • 集成电路
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
支持


2026-07-08 21:21:58
广告
不感兴趣
开通SVIP免广告
  • 洗了蒜了i
  • 导线
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
哥,现在学嵌入式还行吗,二本大数据今年下半年要毕业了,JAVA和嵌入式都学了点,还在犹豫到底学哪个方向,有想法去报班,虽然知道都卷但是是屎也得咽啊


  • 陆戮浜庡績258
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
凉了没凉凉了没凉,程序架构篇-工厂模式:什么场景下该用工厂模式?不是所有地方都需要设计模式,过度设计和和没有设计一样有害,以下几种场景,工厂模式特别适合场景1:多种外设驱动共存项目需要支持多种同类外设(传感器,显示屏,存储芯片等),且可能随版本迭代不断新增型号,上面的传感器就是典型的情况场景2:通信协议适配同一个产品可能需要通过不同的通信方式传输数据:上层的数据上报模块不关心走的是串口还是网络,通过工厂函数获取对应的通信实例即可


  • 陆戮浜庡績258
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

用函数指针结构体模拟 C++ 抽象基类,定义所有传感器必须遵守的统一操作规范,是整套架构的核心契约:任何传感器(DS18B20/NTC/PT100)都必须实现init、read两个函数,并挂载到该结构体的函数指针上。解耦关键:应用层只包含这个头文件,不需要引入 DS18B20/NTC 等任何具体驱动头文件


  • 陆戮浜庡績258
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

全局常量结构体:把 DS18B20自定义的init/read函数地址赋值给抽象接口的函数指针,完成具体实现和抽象接口的绑定;
const修饰:防止程序运行中意外篡改函数指针地址,驱动接口安全;


  • 陆戮浜庡績258
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

作用:根据传感器编号,查表返回对应传感器驱动实例指针,替代臃肿的 switch-case 选型
SENSOR_TYPE_MAX:枚举最后一项,数值等于传感器总数,用来做数组越界保护,新增传感器自动 + 1,不用手动改数字
const sensor_ops_t *:数组每个元素是抽象接口结构体指针,存储对应传感器xxx_ops的地址;


  • 陆戮浜庡績258
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

扩展优势(对比 switch-case)
新增传感器:①新建 xxx_sensor.c 实现驱动 + xxx_ops;②枚举加一项;③注册表数组加一行;工厂函数sensor_create代码零改动;
switch 写法:新增传感器必须新增 case 分支,代码越堆越臃肿;


2026-07-08 21:15:58
广告
不感兴趣
开通SVIP免广告
  • 陆戮浜庡績258
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

sensor_create(SENSOR_DS18B20):应用只需要指定传感器类型,工厂返回对应驱动指针;如果换成 NTC,只需要改参数为 SENSOR_NTC,下面 init/read 代码完全不用改,这就是接口抽象的价值。
空指针判断:工厂返回 NULL 代表硬件不支持该传感器,程序报错退出。
sensor->init():C 语言实现多态,同一个函数调用,指针是 DS18B20 就执行。 ds18b20_init,指针是 NTC 就执行 ntc_init;上层代码不用改任何初始化逻辑。
sensor->read():同理多态读取,统一返回 float 温度,业务层不用区分不同传感器的采集算法。


  • 陆戮浜庡績258
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
整套架构设计总结
分层逻辑:
应用层(main) → 工厂层(查表分发) → 抽象接口(统一规范) → 底层硬件驱动(各传感器私有实现)
三大优点
解耦:业务代码和底层驱动隔离,换传感器只改工厂入参,业务逻辑不动;
易扩展:新增传感器只写驱动 + 枚举 + 注册表,核心工厂函数无修改;
便于移植:同一款传感器换主控芯片,只修改对应 xxx_init/xxx_read 硬件代码,上层完全兼容


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 首页 上一页 1 2 3
  • 79回复贴,共3页
  • ,跳到 页  
<<返回嵌入式吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示