嵌入式技术论坛
直播中

申根换

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

如何将eRPC移植到rt-thread系统上

什么是 eRPC?

eRPC (Embedded RPC) 是用于多芯片嵌入式系统和异构多核 SoC 的开源远程过程调用 (RPC) 系统。

eRPC 是XP 制作的一种嵌入式使用的C RPC框架,但也方便使用单机版内核部分接口实现,提供了c。可以轻松移植到是C++框架。

远程过程(RPC),甚至是本地调用函数,调用本地进程不通过远程系统调用。 )可以是一个客户端连接中存在连接库或CPU的,通过网络通信,多核的核。不

可靠的RPC系统并传输目标3。这样的RPC、可以实现通信(UART、USB、SPI、IIC、RSI、TCP/IP2)可以实现移植到任何系统的TCP/IP 2。协议框架如下图。

1.jpg

目前,e已经在系统上实现。包括无系统机、FreeRTOS、ZEPHYR、Mbed OS、THREADX、Linux、Win。但是,不是RPC系统,不是rt-thread!

在此之前,我们先来看看如何将 eRPC 移植到 rt-thread 系统。

下载源码

打开eRPC仓库。或者从master分支拉取最新代码;或者下载发布包(我用的这个),并解压到工作目录。

目录浏览结构

1.jpg

erpc_python 接口 api,我们不用 python 所以先提供了它。

erpcgen 目录下是 erpcgen 工具源码,用来编译生成 erpcgen 工具程序的。

这里面,主要有趣的是 erpc_c 我们文件夹的内容。

配置

eRPC 的配置文件,用户可以直接编辑这个文件,或者备份一个到其他地方再编辑。

基础设施

eRPC 协议编解码解码部分代码。

港口

不同环境的移植层代码文件。

设置

这里是c语言APIs,包括客户端和服务端初始化、反初始化等。可以在c代码中使用。

运输

包含不同类型的条款的分层定义。

编译erpcgen

可以从Mac上直接下载Win下用的Linux程序编译程序,开箱即用工具需要安装很多,有兴趣自己编译的这个步骤可以进行编译:

如果是 Win 系统,安装 Cygwin 环境。

安装bison、flex、boost(libboost-dev, libboost-filesystem-dev, libboost-system-dev)、make、python、gcc等。

打开终端,进入 erpcgen 目录。

执行make build=release,生成打包程序。

执行make build=release install,安装。

的安装路径是“/usr/local/bin” 如果想换安装路径,需要添加PREFIX默认参数,make build=release install PREFIX=/usr/local/erpc/bin。

为啥总加着“build=release”呢?因为默认“build=debug”,编译调试版本。

编译 eRPC 库

使用工具软件库的时候,不同库喜欢先把它编译成文件,然后在自己的项目中使用。编译RPC库和编译erpcgen的简单步骤大同小异。

打开终端,进入 erpc_c 目录。

执行,编译生成发布版eRPCmake build=release库。

执行,安装发布版eRPCmake build=release install库。

默认安装路径是“/usr/local/lib”,头文件安装路径是“/usr/local/include”。

编译生成的中间文件和目标文件在“../Release”,(“build=debug”时,生成的文件在“../Debug”)。eRPC的make clean命令有bug,如果需要收集编译结果,直接删除这两个文件夹。

在 Qt Creator 里编译 eRPC 库

首先,在 erpc_c 目录下新建文本文件,重命名保存成 erpc.pri 。文件内容如下:

INCLUDEPATH += $$

PWD/infra

PWD/port

PWD/setup

PWD/transports
LIBS += -lws2_32
SOURCES +=

PWD/infra/erpc_arbitrated_client_manager.cpp

PWD/infra/erpc_basic_codec.cpp

PWD/infra/erpc_client_manager.cpp

PWD/infra/erpc_crc16.cpp

PWD/infra/erpc_framed_transport.cpp

PWD/infra/erpc_message_buffer.cpp

PWD/infra/erpc_message_loggers.cpp

PWD/infra/erpc_pre_post_action.cpp

PWD/infra/erpc_server.cpp

PWD/infra/erpc_simple_server.cpp

PWD/infra/erpc_transport_arbitrator.cpp

PWD/port/erpc_port_stdlib.cpp

PWD/port/erpc_serial.cpp

PWD/port/erpc_threading_pthreads.cpp

PWD/setup/erpc_arbitrated_client_setup.cpp

PWD/setup/erpc_client_setup.cpp

PWD/setup/erpc_server_setup.cpp

PWD/setup/erpc_setup_mbf_dynamic.cpp

PWD/setup/erpc_setup_mbf_static.cpp

PWD/setup/erpc_setup_serial.cpp

PWD/setup/erpc_setup_tcp.cpp

PWD/transports/erpc_inter_thread_buffer_transport.cpp

PWD/transports/erpc_serial_transport.cpp

PWD/transports/erpc_tcp_transport.cpp
HEADERS +=

PWD/infra/erpc_arbitrated_client_manager.h

PWD/infra/erpc_basic_codec.h

PWD/infra/erpc_client_manager.h

PWD/infra/erpc_client_server_common.h

PWD/infra/erpc_codec.h

PWD/infra/erpc_common.h

PWD/infra/erpc_crc16.h

PWD/infra/erpc_framed_transport.h

PWD/infra/erpc_manually_constructed.h

PWD/infra/erpc_message_buffer.h

PWD/infra/erpc_message_loggers.h

PWD/infra/erpc_pre_post_action.h

PWD/infra/erpc_server.h

PWD/infra/erpc_simple_server.h

PWD/infra/erpc_static_queue.h

PWD/infra/erpc_transport.h

PWD/infra/erpc_transport_arbitrator.h

PWD/infra/erpc_version.h

PWD/port/erpc_config_internal.h

PWD/port/erpc_port.h

PWD/port/erpc_serial.h

PWD/port/erpc_threading.h

PWD/setup/erpc_arbitrated_client_setup.h

PWD/setup/erpc_client_setup.h

PWD/setup/erpc_mbf_setup.h

PWD/setup/erpc_server_setup.h

PWD/setup/erpc_transport_setup.h

PWD/transports/erpc_inter_thread_buffer_transport.h

PWD/transports/erpc_serial_transport.h

PWD/transports/erpc_tcp_transport.h
在 Qt Creator 里改进质量项目,编辑 pro 文件

CONFIG += c++11
TARGET = erpc
TEMPLATE = lib
include(G:/misc/rpc/erpc-1.9.1/erpc_c/erpc.pri)
HEADERS +=
erpc_config.h
其中的路径包括根据“erpc.pri”实际所在修改路径。制作项目,生成erpc.dll。

结束

万事,东风具备。下一篇我们写小demo,一采薅e降两个RPC的风。

原作者:出出啊

更多回帖

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