嵌入式系统的理解
如果没有官方 / 第三方提供的 SDK 或 API,从技术层面看,直接操作 PLIN-pro View 硬件的底层寄存器(或通过硬件总线协议交互)是实现数据通信的核心路径,但并非唯一路径,且门槛极高。首先是物理世界,我们任何一个电子系统的根源还是物理世界,我们需要获取物理世界的数据,无论是温度,风力,力度,强度,速度或是任何数据,这都是一切的本源。最后,就是前端,连接后端服务层,把数据显示出来,用
随记
近期通过使用的lin系统终于真正的理解了嵌入式系统的整个结构和流程,特此来记录一下。
首先是物理世界,我们任何一个电子系统的根源还是物理世界,我们需要获取物理世界的数据,无论是温度,风力,力度,强度,速度或是任何数据,这都是一切的本源。
然后物理世界和电子世界链接的桥梁就是Sensor,我们通过sensor来收集物理数据并且转换为电子参数。例如通过霍尔元件收集电机转速,通过ADC收集电压参数,通过电压参数收集电流参数。
对我前面提到的LIN系统也是如此,物理世界的数据通过某种Sensor变成待传输的电子数据。注意,sensor也可以是一个更大的概念。比如电机的转速数据给到我们lin接口的地方,可能是经过了多级的转换,这个大的转换的内容都可以叫做snesor
然后是传输。就是把数据从sensor传输到另一个地方的过程。传输可以分为传输前,传输中和传输后。
传输前,可能会对数据进行处理封装。传输中则是通过一定的协议进行传输和转换,传输后也可能同样进行处理和转换。总之,传输这一块就是包括传输封装和转换三个部分。以lin控制器为例子就是把lin格式数据,通过lin盒子转换成电脑可以接受的USB数据。
传输通常需要一个硬件模块来实现不同接口之间的转换和连接。
之后便是后端服务层:把数据进行逻辑处理,转换。最后,就是前端,连接后端服务层,把数据显示出来,用于和用户交互,前端是用户和电子系统交互的接口.
以LIN为例子
硬件层:PLIN-pro View 模块接入 LIN 总线,通过 USB 连接计算机,安装官方驱动(确保设备被系统识别)。
后端层:通过 PLIN-pro View 提供的 PLIN API(支持 C/C++、C#、Python 等),编写后端程序读取 LIN 总线数据(如帧 ID、数据字节、时间戳)。
前端层:沿用 WebSocket 接收后端推送的解析后数据,专注界面渲染(如帧数据列表、ID 过滤、实时波形)。
其中后端层可以用python c/c++,c#等等。
如果没有官方 / 第三方提供的 SDK 或 API,从技术层面看,直接操作 PLIN-pro View 硬件的底层寄存器(或通过硬件总线协议交互)是实现数据通信的核心路径,但并非唯一路径,且门槛极高。
PWM类同。包括其他的spi uart i2c 网络协议等等=lin传输层。如果电脑直接支持某种协议,那就只需要接受数据处理即可,传输就没有转换的功能,硬件也只需要传输即可,例如网线。
LIN 因属于标准化总线协议,其 API 更具通用性。因此一般pwm传输设备也不需要封装的API,直接根据接受的PWM信号长短,高低电平处理即可。
比较复杂的数据就不能用lin了
Qt 作为前端(更准确说是 Qt 开发的桌面应用)可以直接与 LIN 硬件(如 USB 转 LIN 适配器)交互,这是它相比网页前端的核心优势之一。
其能直接交互的关键原因在于:Qt 不依赖浏览器沙箱,可通过自身提供的库或调用系统底层接口,直接操作电脑的硬件通信接口。
前端层一般更推荐QT等设备来写,跟后端的耦合性更好。
前端配置的灵活性,低的可以直接使用配置文件,高的可以使用lua脚本
绝大多数需要 “大量灵活配置 + 低资源消耗” 的开发场景,都能用 Lua 处理,核心原因是它的 “轻量、易嵌入、可扩展性” 特性,能普适性解决 “硬编码不灵活” 的问题
那要想集成lua,必须要那些语言本身支持lua库才行吧。简单来说,集成的本质是让 “主语言”(如 C++、Python、Java)能调用 Lua 解释器、传递数据(如变量、函数),具体依赖以下两类工具,且几乎所有常用语言都已覆盖:
官方 / 核心绑定库:针对 C/C++(Lua 的原生开发语言),直接用 Lua 源码自带的lua.h等头文件即可集成,无需额外依赖。比如 Qt(C++ 框架)集成 Lua,就是通过 C++ 调用这些原生接口实现的。
第三方成熟库:其他语言(非 C/C++)几乎都有现成的绑定库,无需自己造轮子,例如:
Python:lua51、lupa库
Java:LuaJ、RLua库
Go:gopher-lua库
C#:NLua、UniLua库(Unity 常用)
JavaScript(Node.js):node-lua库

更多推荐
所有评论(0)