硬汉嵌入式论坛

 找回密码
 立即注册
查看: 186|回复: 6
收起左侧

建议增加一个 "开源github"板块

[复制链接]

22

主题

192

回帖

258

积分

高级会员

H7 TOOL 大法好!

积分
258
发表于 昨天 12:55 | 显示全部楼层 |阅读模式
大家在开发产品 或者 学习过程中, 有时候 会接触一些开源项目, 比如 modbus , Flash存储等, 经过我们产品验证的 才是真真实实的好用的开源项目, 增加这个板块, 后续可以方便大家 相互借鉴探讨, 时代变了, 我自己反正是不怎么 愿意 "手搓"造轮子了, 我先推荐两个开源项目:
1. modbus 我推荐:stbanana/modbusX: modbus protocol support    , 可以给单片机的每个串口 / 或者USB 端口 分配modbus 角色(主机or从机),用一个 寄存器映射表来管理,彼此之间都不干扰,非常好用;

2. flash存储 我推荐:FlashDB armink/FlashDB: An ultra-lightweight database that supports key-value and time series data | 一款支持 KV 数据和时序数据的超轻量级数据库  这位大神 还有好多 好用的库
回复

使用道具 举报

22

主题

192

回帖

258

积分

高级会员

H7 TOOL 大法好!

积分
258
 楼主| 发表于 昨天 13:01 | 显示全部楼层
本帖最后由 312456990 于 2026-1-8 13:02 编辑


用开源项目来实现产品开发 或者 学习有以下好处:
1. 自己写的 函数封装未必好移植,连自己原作者都不好移植到其他项目中的代码, 维护性很差, 反之用开源代码, 移植的思路是一样的, 以后在其他单片机中 拿来就可以用, 只要第一次投入学习成本, 后面基本上都是 很快就移植;
2. 学习大佬的代码 如饮美酒, 设计哲学 非常独到, 增长自己的能力与见识, 这才是站在巨人的肩膀上
3. 好维护, 我说真的, 给同事交接的代码, 容易阅读 容易维护 是职业最起码的操守, 我以前遇到一个同事, 临走时, 把所有注释全部删除, 然后跑路, 我觉得人活一辈子, 不要走到一个地方, 就被一个地方所厌恶, "爱人者,爱返 , 福往者,福来"  不要让自己活成故事里面的 反面角色
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120427
QQ
发表于 昨天 13:09 | 显示全部楼层
谢谢建议,开源github根据功能划分,我基本都分享到各个板块了。
回复

使用道具 举报

27

主题

269

回帖

350

积分

高级会员

积分
350
QQ
发表于 昨天 13:57 | 显示全部楼层
回复

使用道具 举报

7

主题

43

回帖

64

积分

初级会员

积分
64
发表于 昨天 16:47 | 显示全部楼层
yono 发表于 2026-1-8 13:57
那还不快点给我其他库点星!我也要当网红

stbanana/ReturnCodesC: A series of common C/C++ function r ...

大佬牛逼的,modbusX仔细看了一下实现逻辑,这种查表和事件回调的方式确实适合Modbus设备开发,尤其是从机。
我有几点不成熟的建议:
1、由于查表是基于地址的,导致线圈,离散输入量,保持寄存器和输入寄存器都需要拥有唯一的地址,不能出现地址重复的情况。虽然实际应用过程中也很少出现这种情况。或许定义表时可以增加一个属性”寄存器类型“,但是这样即使可以有重复地址又破坏了二分法查表的意义。

2、虽然大佬在Readme文档末尾说明对线圈和离散输入量支持不是很好,我反而觉得这种很好,现在芯片也不差那7个bit的资源。

3、最后超时机制,不知大佬是否实现了Modbus中根据波特率不同的35us超时机制。不过这也不重要。提这点是因为我发现很多不知名厂家的Modbus接口的传感器数据发送,一帧完整的数据,中间会间隔一点时间被隔成两帧了。可能是有发送过程被中断了。然后往往我主机都是采用的UART+DMA+IDLE方式(减少中断次数)去接收数据帧的。导致都是一些错误的帧。如果使用大佬的主机会不存在这个问题。

倒不是对大佬的心血指指点点,只是觉得一楼大佬说的很对,不想重复造轮子,奈何自己的水平有限,写不出大佬这么牛逼的组件。所以我的项目基本上是百家衣一样,easylogger,SFUD,Lettershell,FlashDB,MultiButton,LVGL,Cjson等等。

最后希望开源项目可以越来越好。实是敬佩,star奉上。
回复

使用道具 举报

27

主题

269

回帖

350

积分

高级会员

积分
350
QQ
发表于 昨天 17:09 | 显示全部楼层
lyj41801 发表于 2026-1-8 16:47
大佬牛逼的,modbusX仔细看了一下实现逻辑,这种查表和事件回调的方式确实适合Modbus设备开发,尤其是从 ...

阿巴阿巴,咕咕嘎嘎


1.不同类型寄存器使用相同地址这个问题有人邮件问过我,刚刚把沟通过程同步到 issues 了。如何使用相同地址的寄存器 · Issue #21 · stbanana/modbusX

2.emm,不支持单bit确实是一个缺陷,其实已经有了框架和构思了,只是一直没有实施,比如是一个32位数据中的某个bit,表条目定义属性时使用 MBX_REG_TYPE_BIT_U32_BASE+n 就好,+0代表第0位,+3代表第3位。switch时会进default:分支提取出这个地址代表多少位变量,是第几位bit,这样就可以正确解析了。

3.实现了 T15 和 T35,这是必须的,要不然波特率过低时无法正确连帧,但是并不精确,因为没有硬件定时器,完全靠tick函数的调用周期计时,粒度上会差一点,但是其实应用上没关系,最多多延迟一个tick。
回复

使用道具 举报

4

主题

443

回帖

455

积分

高级会员

积分
455
发表于 昨天 20:32 | 显示全部楼层
eric2013 发表于 2026-1-8 13:09
谢谢建议,开源github根据功能划分,我基本都分享到各个板块了。

集中一块比较方便学习没事可以刷刷大佬们的代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-1-9 17:39 , Processed in 0.047512 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表