小编Gab*_*abe的帖子

嵌入式设备的良好串行通信协议/堆栈?

在为各种项目编写了几种不同的自定义串行协议之后,我开始对每次重新发明轮子感到沮丧.我不断继续为每个项目开发定制解决方案,而是一直在寻找更通用的解决方案.我想知道是否有人知道满足以下要求的串行协议(或更好的实现):

  • 支持多种设备.我们希望能够支持RS485总线.
  • 保证交货.某种确认机制,以及一些简单的错误检测(CRC16可能很好).
  • 不是主/从.理想情况下,从设备可以异步发送数据.这主要是出于审美原因,轮询每个奴隶的概念对我来说感觉不对.
  • OS独立性.理想情况下,它根本不依赖于抢占式多任务环境.如果我能得到其他东西,我愿意承认这一点.
  • ANSI C.我们需要能够为几种不同的体系结构编译它.

速度不是太大的问题,我们愿意放弃一些速度,以满足其他一些需求.但是,我们希望尽量减少所需资源的数量.

我即将开始实施带有搭载ACK的滑动窗口协议,而且没有选择性重复,但是想到也许有人可以省去我的麻烦.有谁知道我可以利用的现有项目?或者也许是更好的策略?

更新
我认真考虑过TCP/IP实现,但我真的希望能有更轻量级的东西.TCP/IP的许多功能对于我正在尝试的内容来说都是过度的.我愿意(不情愿地)接受我想要的功能可能不包含在较轻的协议中.

更新2
感谢您关于CAN的提示.我过去看过它,将来可能会用它.我真的很喜欢这个库来处理确认,缓冲,重试等.我想我更需要网络/传输层而不是数据链路/物理层.

更新3
所以听起来这个领域的最新技术是:

  • 精简的TCP/IP堆栈.可能从lwIPuIP开始.
  • 基于CAN的实现,它可能很大程度上依赖于CAN总线,因此在其他物理层上没有用处.像CAN Festival这样的东西可以帮助你.
  • HDLC或SDLC实现(如此).这可能就是我们要走的路线.

如果您遇到这个问题,请随时发布更多答案.

c embedded serial-port protocols firmware

38
推荐指数
3
解决办法
1万
查看次数

固件工程师可以向软件工程师学习什么?

从我对固件工程工具,实践等历史的了解来看,它一直落后于软件工程领域几年.例如,据我所知,在固件世界中,关于C++是否真的值得用于我们的应用程序仍然存在相当多的争论,并且一些C++编译器明显缺失(微芯片?!?).我想在很大程度上这是由于固件和软件之间的要求不同.再次,从历史来看,在经过适当审查的工具和技术进入固件世界之前,似乎只是时间问题.

现代软件工程师经常使用哪些方法,工具,最佳实践等,固件工程师是否也可以利用它们来改进他们的工艺?

具体来说,我正在考虑以下几个轴(但不要让它们限制你):

  • 提高代码清洁度/可维护性
  • 减少缺陷引入并改善检测
  • 改进文档
  • 需求管理
  • 提高可重用性

我也很乐意看到嵌入式商店回答或评论答案,以提供有关理论可行性或更好的个人经验的反馈.

更新
我特别感兴趣的是稍微跳过曲线.所以相对较新的东西已经过相当好的审查(适用于大多数人),比如C++,TDD等等.你一直在使用什么,喜欢什么?

更新2
到目前为止,我在答案中获得了很多优秀的通用编程建议,这很好,但我真的在寻找更多非传统方法,这些方法已经证明对人们来说是成功的.我正在试图挑逗敏捷实践者,TDDers以及那些尝试过东西的人,看到它在黑桃中得到回报或者失败可怕.作为一名软件工程师,您在过去几年中采用了哪种工具或实践产生了非常积极或消极的影响?

embedded firmware

24
推荐指数
4
解决办法
7168
查看次数

标签 统计

embedded ×2

firmware ×2

c ×1

protocols ×1

serial-port ×1