物理通信的通用名称 "Pipe" 概念?
Name Of Generic "Pipe" Concept for Physical Communication?
我目前有一个关于如何(在某种程度上)抽象出嵌入式系统的常见数据传输机制(例如 CAN、UART、SPI、I2C、以太网等)的想法。理想情况下,我希望拥有类似于管道的概念,但接口并不真正关心数据流过的物理 medium/protocol。如果我说 "transfer this data through the pipe",它就会起作用。显然,在这个管道对象的构造中必须有一些特定于协议的细节,但除此之外应该无关紧要。
我想做的事情是否有行业认可的名称?
这个概念是个好主意吗?我觉得它对我的目的有用,但我不知道它在嵌入式工程世界的宏伟计划中是否毫无意义。
管道通常用于 IPC(进程间通信)或将输出重定向到文件或...对于所有这些存在的远程技术,'remote' 意味着 通过网络或通过接口或总线,如RS232、SPI,...远程IPC的名称是远程过程调用(RPC),参见https://os.mbed.com/cookbook/Interfacing-Using-RPC and https://github.com/EmbeddedRPC/erpc。与所有 IPC 一样,安全性是一个主要问题,尤其是在网络上。
即写入远程文件(超过 TCP/IP)可以像 https://askubuntu.com/questions/917200/how-to-redirect-command-output-from-remote-machine-to-local-file-via-ssh
中那样完成
您可以将 SSH 登录包装到一个函数中,这个函数可以缩短命令(宏也可以用于包装函数 Wrap function call with macro)
还有各种相互通信协议的实现,即 USB 以太网 (https://en.wikipedia.org/wiki/Ethernet_over_USB)
Is there an industry accepted name for what I'm trying to do?
硬件抽象层 (HAL) 最接近。请记住,上述总线是未定义更高层协议的硬件标准。在更高级别,这可能称为 "sockets",尽管通常专门指 IP。
Is this concept even a good idea?
可能不会,除非您有特定要求。
例如,如果您希望用 CAN 替换旧的 RS-485 网络但保留旧硬件,这将是一个好主意。在该特定项目中尽可能多地兼容软件是有意义的。
否则,从一般的角度来看,这些总线中的每一个都被挑选出来以满足完全不同的要求。当您需要坚固可靠时可以使用 CAN,当您需要向后兼容时使用 UART,当您需要快速、同步、接近金属的板载通信时使用 SPI,当您需要远距离快速通信时使用以太网等等。硬件要求一辆公共汽车可能会排除另一辆。
例如,如果我想让我的 MCU 与 "dumb" LCD 通信,只有 SPI 才有意义。我可能必须将额外的 I/O 引脚与 SPI 信号一起切换。我可能想使用 DMA。等等。在这种情况下,如果我必须使用可移植到 CAN、以太网等的抽象通信 API 对我来说没有任何好处。那只是膨胀 - 此代码永远不会 运行那些公交车!
为每种总线类型开发一个 HAL 更有意义,这样您就有了一个可在微控制器之间移植的 SPI HAL。这很常见而且实际上很有用。
我目前有一个关于如何(在某种程度上)抽象出嵌入式系统的常见数据传输机制(例如 CAN、UART、SPI、I2C、以太网等)的想法。理想情况下,我希望拥有类似于管道的概念,但接口并不真正关心数据流过的物理 medium/protocol。如果我说 "transfer this data through the pipe",它就会起作用。显然,在这个管道对象的构造中必须有一些特定于协议的细节,但除此之外应该无关紧要。
我想做的事情是否有行业认可的名称?
这个概念是个好主意吗?我觉得它对我的目的有用,但我不知道它在嵌入式工程世界的宏伟计划中是否毫无意义。
管道通常用于 IPC(进程间通信)或将输出重定向到文件或...对于所有这些存在的远程技术,'remote' 意味着 通过网络或通过接口或总线,如RS232、SPI,...远程IPC的名称是远程过程调用(RPC),参见https://os.mbed.com/cookbook/Interfacing-Using-RPC and https://github.com/EmbeddedRPC/erpc。与所有 IPC 一样,安全性是一个主要问题,尤其是在网络上。
即写入远程文件(超过 TCP/IP)可以像 https://askubuntu.com/questions/917200/how-to-redirect-command-output-from-remote-machine-to-local-file-via-ssh
中那样完成您可以将 SSH 登录包装到一个函数中,这个函数可以缩短命令(宏也可以用于包装函数 Wrap function call with macro)
还有各种相互通信协议的实现,即 USB 以太网 (https://en.wikipedia.org/wiki/Ethernet_over_USB)
Is there an industry accepted name for what I'm trying to do?
硬件抽象层 (HAL) 最接近。请记住,上述总线是未定义更高层协议的硬件标准。在更高级别,这可能称为 "sockets",尽管通常专门指 IP。
Is this concept even a good idea?
可能不会,除非您有特定要求。
例如,如果您希望用 CAN 替换旧的 RS-485 网络但保留旧硬件,这将是一个好主意。在该特定项目中尽可能多地兼容软件是有意义的。
否则,从一般的角度来看,这些总线中的每一个都被挑选出来以满足完全不同的要求。当您需要坚固可靠时可以使用 CAN,当您需要向后兼容时使用 UART,当您需要快速、同步、接近金属的板载通信时使用 SPI,当您需要远距离快速通信时使用以太网等等。硬件要求一辆公共汽车可能会排除另一辆。
例如,如果我想让我的 MCU 与 "dumb" LCD 通信,只有 SPI 才有意义。我可能必须将额外的 I/O 引脚与 SPI 信号一起切换。我可能想使用 DMA。等等。在这种情况下,如果我必须使用可移植到 CAN、以太网等的抽象通信 API 对我来说没有任何好处。那只是膨胀 - 此代码永远不会 运行那些公交车!
为每种总线类型开发一个 HAL 更有意义,这样您就有了一个可在微控制器之间移植的 SPI HAL。这很常见而且实际上很有用。