物联网开发者的福音!一次开发,N次复用

因为要连接网络以及应用的多样化,物联网设备的复杂度和开发难度都大幅增加,开发方式也与之前嵌入式设备大不一样。

以一个典型的MCU+WiFi/NB-IoT SoC架构的IoT设备开发为例,如下图所示,开发人员需要针对特定的无线模块,开发MCU TCP/IP协议层以上的应用,包括MQTT、HTTP、Web Socket、业务类应用等等。

一旦用户更换了无线芯片或模块,因为网络协议、编程接口等不统一,上层应用都需要做大幅改动甚至需要重新开发。

图:当前物联网设备的开发模式

 

为了解决由于无线模块不兼容导致的重复开发问题,RT-Thread最近发布了一个称为SAL的中间件产品。

SAL,即Socket abstraction layer,意为套接字抽象层,处于网络硬件层与应用层之间,其前身是 RT-Thread 的 DFS_NET 组件。但DFS_NET 组件对 lwIP 有一定依赖,存在局限性,RT-Thread对其进行了近乎重构的再造。

图:SAL在RT-Thread系统开发中的逻辑层级

其主要特性如下:

  • 将多种网络协议栈接口抽象并统一

  • 提供标准 BSD Socket API

  • 统一fd(file descriptor)管理方式

“重造”后的SAL屏蔽了应用层,实现了系统级别的跨平台应用。开发者只需调用上层的API接口,即可实现一次开发、跨平台使用,极大的简化了系统开发复杂度。具体表现在:

应用层:应用层在做网络开发时,可以直接使用 SAL 提供的 BSD Socket API 接口。接口层的统一抽象,使得开发者可以快速应用 RT-Thread 提供的众多支持 BSD Socket接口的软件包,极大提升了软件的可重用性。 

SAL实现层:该层位于SAL底部,将不同的无线模块、芯片或协议栈与SAL框架对接。接入完成后,应用层几乎不需关心实际的网络接入方式,降低了应用层与底层之间的耦合。 

DFS文件系统层:SAL与 DFS 紧密结合, Socket 描述符与fd文件描述符完全对应,实现了fd的统一管理。应用层可以通过read/write、poll/select接口操作Socket套接字,兼容 POSIX 标准。 

图:带有SAL的OS系统框架

SAL使得RT-Thread可以无缝接入各种网络芯片或模块,如W5500/CH395 这类自带协议栈的以太网芯片、带 AT(Attention)指令的 WiFi 模块、GPRS 模块、NB-IoT 模块等,极大地提升了RT-Thread 在 IoT 领域对于不同网络硬件的兼容性。

换句话说,即使开发者更换无线芯片或模块,SAL不需要做出任何改变,开发者也不需要再做二次开发。不仅如此,RT-Thread支持的各种软件包(包括内核层、组件和服务层、IoT框架层等),可以很方便的“即装即用”。

对于开发人员的价值:

1、对接 AT 指令的网络模块

当使用这些 AT模块做网络开发时,不可避免地会在代码中耦合很多与模块相关的 AT通信代码。这也导致以前用标准BSD Socket开发过的组件没法被迁移过来。

有了SAL,只需要针对AT 模块的指令方式,实现 SAL的对接接口(RT-Thread已经提供了常用模块,如乐鑫ESP8266、移远M26),上层应用即可方便地进行Socket编程了。

RT-Thread 很快将会发布具有上述功能的AT 组件。

2、对接内置协议栈的网络芯片 

随着像 W5500/CH395 这类内置协议栈的芯片越来越普及,MCU就不需要跑网络协议栈,极大地降低了MCU的资源占用。可是跟AT模块一样,如何保证应用层依然能很方便的地使用标准Socket编程?这个问题SAL已经解决。SAL已经适配了适配这些芯片,方便所有使用 RT-Thread + W5500/CH395 的开发者。

3、非lwIP的 TCP/IP 协议栈

在一些特殊领域,lwIP可能并不能满足用户的开发要求,更换TCP/IP协议栈就不可避免。有了SAL框架,新的协议栈只需与其对接完毕,上层应用即可放心使用,以前的代码也可以拿来重用。

4、Socket CAN 

Socket CAN作为Linux上CAN编程的一种方式,编程顺手,简单易用。很多用户也想在RT-Thread上实现Socket CAN编程。有了SAL,只需在底层使用 RT-Thread CAN的设备上实现SAL框架对应的接口即可。

RT-Thread此次发布的SAL对IoT产业具有巨大价值,真正实现了系统(MCU+无线芯片/模块)层面的跨平台软件开发和兼容,ACS(Application Cross System)后期的应用扩展也会变得易如反掌。

 扫一扫加入RT-Thread交流群。群主qq号:2433970767

猜你喜欢

转载自blog.csdn.net/fillmoread/article/details/81165396