嵌入式技术论坛
直播中

訾存贵

7年用户 920经验值
私信 关注
[经验]

在RT-Thread系统上移植eRPC并添加lwip的步骤

前言

有了前边添加 win(MINGW) 平台下 tcp transport 的经验,现在添加 lwip 的就容易很多了。
lwip 的接口和 linux 下的相似度极高,可以这么认为,除了名字不一样,其它的特性都一样。
所以,添加 lwip 支持就轻车熟路,手拿把掐了。

扩展过程

“erpc_tcp_transport.h” 添加 RTTHREAD 环境适配
#if defined(linux) || defined(CYGWIN) || defined(RTTHREAD)
#elif defined(MINGW32)
#include <winsock2.h>
#endif
修改 m_socket 成员变量类型
#if defined(linux) || defined(CYGWIN) || defined(RTTHREAD)
int m_socket; /*!< Socket number. */

#elif defined(MINGW32)
SOCKET m_socket; /*!< Socket number. */
#endif
“erpc_tcp_transport.cpp” 添加 lwip 头文件引用
#if defined(RTTHREAD)
#include "lwip/netifapi.h"
#include "lwip/sockets.h"
#include "lwip/tcpip.h"
#include "lwip/netdb.h"
socket api

在所有使用到的 socket api 前追加 “lwip_” 前缀。例如:
getaddrinfo 变成 lwip_getaddrinfo,socket 变成 lwip_socket 等诸如此类。

其它

还有 snprintf 变成 rt_snprintf,memset 变成 rt_memset 等

验证

有没有发现,我们可以在设备上跑 eRPC了。

到目前为止,我们已经添加了 rt-thread 的 porting。添加了 win 系统的 winsock2 tcp transport 支持。已经具备了在 rt-thread 系统移植 eRPC 并验证的所有基础条件。

在 rt-thread 移植 eRPC 系列(三) 之 Porting 笔者放了两个演示效果图,也正是因为有 rt-thread 移植 eRPC 系列(三) 之 Porting rt-thread 移植 eRPC 之 Transport (winsock2) 以及本篇三篇文章的基础工作才实现的。

结束语

因为有前一篇的工作,本次增加 lwip 支持的说明就一带而过了。

rt-thread 是支持 POSIX 的,如果直接使用 POSIX 接口,可能改动更小,但是为啥笔者特意用 lwip ?很简单,奥卡姆剃刀。引入 POSIX 是在可实现的基础上增加新的实体,但并未引入新的特性。所以,本着降低系统维度的原则,先不使用 POSIX。这样一来,不止 rt-thread 标准版可以使用,nano 版也可以使用。

声明:rt-thread 有 posix 接口,开启 posix 之后就可以和用 linux 一样的 api。但是,笔者在使用过程中发现创建的 tcp server 只能连接上,但是给它发数据它什么都没收到。于是,暂时搁置了。退而求其次,使用 lwip api。不过,话说回来,lwip 可以实现的有什么必要的理由再添加几层马甲才能使用?

后面的工作预告:虽然使用 lwip 可以在更大范围的系统上使用 eRPC ,但是并不是每个芯片都有 MAC ,并不是每一个板子上都有网卡,普遍地,串口还是支持蛮多的。所以,串口的 transport 还是有必要说两句的。

第二个就是,基于 eRPC 实现的 lvgl 在线设计器,敬请期待。

原作者:出出啊

更多回帖

发帖
×
20
完善资料,
赚取积分