什么是 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。协议框架如下图。
目前,e已经在系统上实现。包括无系统机、FreeRTOS、ZEPHYR、Mbed OS、THREADX、Linux、Win。但是,不是RPC系统,不是rt-thread!
在此之前,我们先来看看如何将 eRPC 移植到 rt-thread 系统。
下载源码
打开eRPC仓库。或者从master分支拉取最新代码;或者下载发布包(我用的这个),并解压到工作目录。
目录浏览结构
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的风。
原作者:出出啊