适用于嵌入式设备的良好串行通信协议/堆栈? [关闭]

2024-03-22

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

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

速度并不是什么大问题,我们愿意放弃一些速度以满足其他一些需求。然而,我们希望最大限度地减少所需资源的数量。

我正要开始实现一个带有 ACK 的滑动窗口协议,并且没有选择性重复,但我想也许有人可以帮我解决这个麻烦。有谁知道我可以利用的现有项目?或者也许是更好的策略?

UPDATE
我认真考虑过 TCP/IP 实现,但确实希望有更轻量级的东西。 TCP/IP 的许多功能对于我想要做的事情来说是多余的。我愿意(不情愿地)接受,也许我想要的功能并不包含在较轻的协议中。

UPDATE 2
感谢您对 CAN 的提示。我过去看过它,将来可能会使用它。不过,我真的希望库能够处理确认、缓冲、重试等。我想我更多地寻找网络/传输层而不是数据链路/物理层。

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

  • 精简的 TCP/IP 堆栈。可能从类似的事情开始lwIP http://savannah.nongnu.org/projects/lwip/ or uIP http://www.sics.se/~adam/uip/index.php/Main_Page.
  • 基于 CAN 的实现,它可能会严重依赖 CAN 总线,因此它在其他物理层上没有用处。就像是CAN节 http://www.canfestival.org/可以一路提供帮助。
  • HDLC 或 SDLC 实现(例如this one http://sourceforge.net/projects/opensourcehdlc/)。这可能就是我们要走的路线。

如果您遇到此问题,请随时发布更多答案。


你有没有考虑过HDLC http://en.wikipedia.org/wiki/HDLC or SDLC http://en.wikipedia.org/wiki/Synchronous_Data_Link_Control?

还有LAP/D http://en.wikipedia.org/wiki/Link_Access_Procedures,_D_channel(链路访问协议,D 通道)。

尤利斯·布莱克的《数据链路协议 https://rads.stackoverflow.com/amzn/click/com/013204918X“总是在我的书架附近 - 您也可能会在那里找到一些有用的材料(甚至仔细阅读目录并研究不同的协议)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

适用于嵌入式设备的良好串行通信协议/堆栈? [关闭] 的相关文章

  • Windows 10 Mobile (10.0.14393) 地理围栏后台任务 (LocationTrigger)

    自从10 0 14393 周年纪念更新 LocationTrigger似乎不起作用 我有 Windows Phone 8 1 应用程序 也适用于 UWP 应用程序 输出到的便携式库Windows Runtime Component图书馆 w
  • 通过增加索引之和来生成排序组合的有效方法

    对于启发式算法 我需要一个接一个地评估特定集合的组合 直到达到停止标准 由于它们很多 目前我正在使用以下内存高效迭代器块生成它们 受到 python 的启发 itertools combinations http docs python o
  • 内联函数/方法

    声明 内联函数必须在调用之前定义 这个说法正确吗 EDIT 该问题最初是德语 内联功能穆森 弗 伊赫雷姆 奥夫鲁夫定义 sein 也许它对任何人都有帮助 是的 它是正确的 但只是部分正确 它可能正确地重新构建如下 内联函数必须在每个翻译单位
  • Subversion 和 Visual Studio 项目的最佳实践

    我最近开始在 Visual Studio 中处理各种 C 项目 作为大型系统计划的一部分 该系统将用于替换我们当前的系统 该系统是由用 C 和 Perl 编写的各种程序和脚本拼凑而成的 我现在正在进行的项目已经达到了颠覆的临界点 我想知道什
  • System.IO.IOException:由于意外>数据包格式,握手失败?

    有谁知道这意味着什么 System Net WebException 底层连接已关闭 发送时发生意外错误 gt System IO IOException 由于意外 握手失败 数据包格式 在 System Net Security SslS
  • 为什么Apache MPM prefork.c 使用互斥体来保护accept()?

    我坐下来读书Apache 的 MPM prefork c http code metager de source xref apache httpd server mpm prefork prefork c这段代码使用了一个名为accept
  • 为什么大多数平台上没有“aligned_realloc”?

    MSVC有自己的非标准函数 aligned malloc aligned realloc and aligned free C 17和C11引入了 std aligned alloc 其结果可以是de分配有free or realloc B
  • C++中delete和delete[]的区别[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的删除与删除 运算符 https stackoverflow com questions 2425728 delete vs delete operators in c 我写了一个包含两个指针的
  • 从 C 结构生成 C# 结构

    我有几十个 C 结构 我需要在 C 中使用它们 典型的 C 结构如下所示 typedef struct UM EVENT ULONG32 Id ULONG32 Orgin ULONG32 OperationType ULONG32 Size
  • 无法解析远程名称 - webclient

    我面临这个错误 The remote name could not be resolved russgates85 001 site1 smarterasp net 当我请求使用 Web 客户端读取 html 内容时 出现错误 下面是我的代
  • TcpClient 在异步读取期间断开连接

    我有几个关于完成 tcp 连接的问题 客户端使用 Tcp 连接到我的服务器 在接受客户端后listener BeginAcceptTcpClient ConnectionEstabilishedCallback null 我开始阅读netw
  • 从 Code::Blocks 运行程序时出现空白控制台窗口 [重复]

    这个问题在这里已经有答案了 当我尝试在 Code Blocks 中构建并运行新程序时 控制台窗口弹出空白 我必须单击退出按钮才能停止它 它对我尝试过的任何新项目 包括 Hello world 都执行此操作 奇怪的是 它对于我拥有的任何旧项目
  • 2D morton 码编码/解码 64 位

    如何将给定 x y 的莫顿代码 z 顺序 编码 解码为 32 位无符号整数 生成 64 位莫顿代码 反之亦然 我确实有 xy2d 和 d2xy 但仅适用于 16 位宽的坐标 产生 32 位莫顿数 在网上查了很多 但没有找到 请帮忙 如果您可
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • C++ 错误 - “成员初始值设定项表达式列表被视为复合表达式”

    我收到一个我不熟悉的 C 编译器错误 可能是一个非常愚蠢的错误 但我不能完全指出它 Error test cpp 27 error member initializer expression list treated as compound
  • C++11 动态线程池

    最近 我一直在尝试寻找一个用于线程并发任务的库 理想情况下 是一个在线程上调用函数的简单接口 任何时候都有 n 个线程 有些线程比其他线程完成得更快 并且到达的时间不同 首先我尝试了 Rx 它在 C 中非常棒 我还研究了 Blocks 和
  • 使用 HTMLAgilityPack 从节点的子节点中选择所有

    我有以下代码用于获取 html 页面 将网址设置为绝对 然后将链接设置为 rel nofollow 并在新窗口 选项卡中打开 我的问题是关于将属性添加到 a s string url http www mysite com string s
  • 类中不允许使用不完整类型,但类模板中允许使用不完整类型

    以下为无效代码 struct foo struct bar bar x error field x has incomplete type struct bar int value 42 int main return foo x valu
  • 在 Xamarin 中获取 OutOfMemoryException

    java lang OutOfMemoryError 考虑增加 JavaMaximumHeapSize Java 执行时内存不足 java exe 我的 Visualstudio Xamarin 项目出现内存不足异常 请帮助我如何解决此问题
  • 带有私有设置器的 EFCore Base 实体模型属性 - 迁移奇怪的行为

    实体模型继承的类内的私有设置器似乎会导致 EFCore 迁移出现奇怪的问题 考虑以下示例 其中有多个类 Bar and Baz 继承自Foo 跑步时Add Migration多次命令 添加 删除private修饰符 生成的模式在多个方面都是

随机推荐