rt-thread icon indicating copy to clipboard operation
rt-thread copied to clipboard

[drv]a new serial driver - serialX

Open thewon86 opened this issue 3 years ago • 17 comments

拉取/合并请求描述:(PR description)

[ 经过一段时间的使用,serialX 有非常优异的表现。 几个串口驱动版本的对比测试请移步论坛 https://club.rt-thread.org/ask/article/3676.html ]

以下的内容不应该在提交PR时的message修改,修改下述message,PR会被直接关闭。请在提交PR后,浏览器查看PR并对以下检查项逐项check,没问题后逐条在页面上打钩。 The following content must not be changed in the submitted PR message. Otherwise, the PR will be closed immediately. After submitted PR, please use a web browser to visit PR, and check items one by one, and ticked them if no problem.

当前拉取/合并请求的状态 Intent for your PR

必须选择一项 Choose one (Mandatory):

  • [ ] 本拉取/合并请求是一个草稿版本 This PR is for a code-review and is intended to get feedback
  • [x] 本拉取/合并请求是一个成熟版本 This PR is mature, and ready to be integrated into the repo

代码质量 Code Quality:

我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:

  • [x] 已经仔细查看过代码改动的对比 Already check the difference between PR and old code
  • [x] 代码风格正确,包括缩进空格,命名及其他风格 Style guide is adhered to, including spacing, naming and other styles
  • [x] 没有垃圾代码,代码尽量精简,不包含#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up
  • [x] 所有变更均有原因及合理的,并且不会影响到其他软件组件代码或BSP All modifications are justified and not affect other components or BSP
  • [x] 对难懂代码均提供对应的注释 I've commented appropriately where code is tricky
  • [x] 本拉取/合并请求代码是高质量的 Code in this PR is of high quality
  • [x] 本拉取/合并使用formatting等源码格式化工具确保格式符合RT-Thread代码规范 This PR complies with RT-Thread code specification

thewon86 avatar Apr 10 '22 08:04 thewon86

https://gitee.com/thewon/serialX

mysterywolf avatar Apr 10 '22 10:04 mysterywolf

大佬,有没有可能和V2版本融合起来啊,目前V2版本历史包袱还没那么重,应该比较容易调整的。如果再加一个版本的串口框架进来,如果我是用户,我都不知道该用哪个了😂

Guozhanxin avatar Apr 11 '22 09:04 Guozhanxin

大佬,有没有可能和V2版本融合起来啊,目前V2版本历史包袱还没那么重,应该比较容易调整的。如果再加一个版本的串口框架进来,如果我是用户,我都不知道该用哪个了😂

交给使用者去选择吧。usb 协议栈那么多,总不能只留一个其它都不支持了吧,modbus 库那么多也不能只让用一个吧。

thewon86 avatar Apr 14 '22 05:04 thewon86

选择太多的话,做成软件包比较合适。

aozima avatar Apr 14 '22 06:04 aozima

选择太多的话,做成软件包比较合适。

别做软件包了吧,这个是关键性核心功能,如果谁都不妥协的话,就先这样放着吧,先百家争鸣。经过一段时间的收敛,再最终汇总成一个新版本的串口框架。16年了,RT-Thread串口框架还是有问题,没有收敛下来,串口框架是个大问题呀。

mysterywolf avatar Apr 14 '22 06:04 mysterywolf

选择太多的话,做成软件包比较合适。

别做软件包了吧,这个是关键性核心功能,如果谁都不妥协的话,就先这样放着吧,先百家争鸣。经过一段时间的收敛,再最终汇总成一个新版本的串口框架。16年了,RT-Thread串口框架还是有问题,没有收敛下来,串口框架是个大问题呀。

支持在内置的V2上继续改进,直到能解决所有已知问题。

aozima avatar Apr 14 '22 06:04 aozima

选择太多的话,做成软件包比较合适。

别做软件包了吧,这个是关键性核心功能,如果谁都不妥协的话,就先这样放着吧,先百家争鸣。经过一段时间的收敛,再最终汇总成一个新版本的串口框架。16年了,RT-Thread串口框架还是有问题,没有收敛下来,串口框架是个大问题呀。

作为 RT-Thread 上游软件更多要考虑长期的兼容性和可维护性,发散、灵活、自由的组件选择交给软件包。

另外,现在串口 V2 还有什么问题?

armink avatar Apr 14 '22 08:04 armink

选择太多的话,做成软件包比较合适。

别做软件包了吧,这个是关键性核心功能,如果谁都不妥协的话,就先这样放着吧,先百家争鸣。经过一段时间的收敛,再最终汇总成一个新版本的串口框架。16年了,RT-Thread串口框架还是有问题,没有收敛下来,串口框架是个大问题呀。

作为 RT-Thread 上游软件更多要考虑长期的兼容性和可维护性,发散、灵活、自由的组件选择交给软件包。

另外,现在串口 V2 还有什么问题?

  1. 阻塞 非阻塞概念不明确。
  2. 做不到 0 等待 write
  3. 有一个匪夷所思的限制要求:“rt_device_read(dev, -1, buf, len);” 要求这个 len 必须 <= 驱动内的缓存大小。
  4. 非 poll 模式不支持 stream 。控制台只能使用 poll 输出。降低甚至影响某些调试过程业务时序。最严重的就是对外产生超时。
  5. 驱动和框架之间接口定义已经变了模糊,推广到其它芯片变得困难。(说实话,如果没有 DMA 接口也不会这么复杂)

thewon86 avatar Apr 15 '22 00:04 thewon86

选择太多的话,做成软件包比较合适。

别做软件包了吧,这个是关键性核心功能,如果谁都不妥协的话,就先这样放着吧,先百家争鸣。经过一段时间的收敛,再最终汇总成一个新版本的串口框架。16年了,RT-Thread串口框架还是有问题,没有收敛下来,串口框架是个大问题呀。

作为 RT-Thread 上游软件更多要考虑长期的兼容性和可维护性,发散、灵活、自由的组件选择交给软件包。 另外,现在串口 V2 还有什么问题?

  1. 阻塞 非阻塞概念不明确。

这个具体指的是什么?举个例子?

  1. 做不到 0 等待 write

这个具体指的是什么,你期望做成什么样子?举个例子?

  1. 有一个匪夷所思的限制要求:“rt_device_read(dev, -1, buf, len);” 要求这个 len 必须 <= 驱动内的缓存大小。

@Guozhanxin 这个请确认一下

  1. 非 poll 模式不支持 stream 。控制台只能使用 poll 输出。降低甚至影响某些调试过程业务时序。最严重的就是对外产生超时。

这个可以加

  1. 驱动和框架之间接口定义已经变了模糊,推广到其它芯片变得困难。(说实话,如果没有 DMA 接口也不会这么复杂)

可否举个例子?

armink avatar Apr 15 '22 01:04 armink

@armink 看论坛文章,有更详细的说明。

thewon86 avatar Apr 15 '22 03:04 thewon86

不建议分裂,这样做整体都乱掉了

BernardXiong avatar Apr 15 '22 09:04 BernardXiong

如果框架本身没有什么重大问题,仅仅是因为结构上的问题的话,可以在下次社区会议上讨论一下,商量出一个解决方案来。直接关掉人家的pr太打击人了。可以投-1票,但是别直接关PR.

mysterywolf avatar Apr 15 '22 21:04 mysterywolf

如果框架本身没有什么重大问题,仅仅是因为结构上的问题的话,可以在下次社区会议上讨论一下,商量出一个解决方案来。直接关掉人家的pr太打击人了。可以投-1票,但是别直接关PR.

不会通过的,上面已经写得很清楚,之前几位都是一致性的投反对票

BernardXiong avatar Apr 16 '22 08:04 BernardXiong

请再考虑一下这份PR, 首先,上面投的反对票存疑,因为这些反对不是站在技术角度上针对该框架哪里有什么缺陷或者bug而投的反对票,整个讨论下来,反对的原因只有一个,一个非技术的原因,就是serial_v2框架比serialx诞生的早。基于这种理由而投所谓反对票是站不住脚的。

经过几个月的观察,在本PR关闭后,作者出出 @thewon86 依然在社区和论坛上致力于维护这个框架,而且反馈也很好,应该予以考虑合并进去。serial_v2是官方写的,根据目前的维护经验来说,官方维护存在一个后续维护问题。炸弹哥写的这个框架,请问后续发现这个框架有问题的时候,炸弹哥项目这么多,还能抽出时间来维护吗?从炸弹哥写完这个框架之后,这个框架就一直在没有被维护过。

反观Serialx框架,一直在作者自己的仓库中不断的维护。 https://gitee.com/thewon/serialX 因此基于谁先出生谁后出生这种反对逻辑我认为是无效的。 关于serial_v2和serialx至于使用谁的问题,出出已经给出了一部分对比文章,用户完全可以根据自己的需求来选择,没有必要强制用户一定要使用serial_v2. https://club.rt-thread.org/ask/article/bfd92159ba11aef6.html https://club.rt-thread.org/ask/article/0ee3da5b6a9c347d.html https://club.rt-thread.org/ask/article/bf21ccfb437e1c5d.html https://club.rt-thread.org/ask/article/2460fcd7db4821ae.html

mysterywolf avatar Aug 04 '22 23:08 mysterywolf

之前提到过,既然是这样,是否可以融入到v2中呢?

这个是发展的原则性问题,一些点上需要收敛,如果都是各种版本,还都合并到主干中,那么主干变成了大杂烩吗。

如果觉得v2不好,也可以是v3,当出现v3的时候,依然一样的需要考虑到所有的情况,所有BSP的情况。

BernardXiong avatar Aug 06 '22 11:08 BernardXiong

最近刚好在项目中用到了serial_v2,也发现了一些问题,正在梳理看怎么改能适用于更多的项目并有利于后面的维护。

我的理解,V2目前还在初级阶段,只能在很小一部分BSP和其应用中测试,不说覆盖所有的场景,连大部分场景都不够。 所以需要继续改进。

所以我认为:serial_v2不一定只能是当前仓库中这个版本,而是下一个更好的版本。 如果能有更合适的,可以在其更加完善后,能作为通用框架,删除当前代码取而代之。 而不建议再增加一个了。

aozima avatar Aug 06 '22 14:08 aozima

开会的时候再讨论一下吧,反正这个PR不会在4.1.1中合并的。

mysterywolf avatar Aug 06 '22 14:08 mysterywolf

由于社区对待这个PR是否进主线存在分歧,但是社区上很多小伙伴都愿意使用serialX,基于此,这个PR我先合并到serialX-dev分支中进行孵化。此外,作者出出一直在持续优化和完善serialX框架并适配了多款BSP,甚至超过了serial2的适配bsp数量。在社区论坛也输出了多篇高质量serialX讲解文章。

image image

mysterywolf avatar Feb 21 '23 04:02 mysterywolf