Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
原创征文
RPC远程调用
rt-thread 移植 eRPC 系列(一) 之 简介
发布于 2022-08-19 09:39:46 浏览:4038
订阅该版
[tocm] ## 什么是 eRPC? eRPC (Embedded RPC) is an open source Remote Procedure Call (RPC) system for multichip embedded systems and heterogeneous multicore SoCs. eRPC 是 NXP 制作的一种嵌入式版 RPC 框架,简洁易用。核心部分使用 C++ 语言实现,但是也提供了 c 语言接口。可以轻松移植到单片机上。 Remote Procedure Call (RPC),顾名思义,就是远程过程调用,函数调用不局限于本进程,甚至不限于本计算机。它是一种通过本地函数调用来引用远程系统软件程序的机制。远程系统(服务端)可以是任意通信媒介连接的CPU,通过网络连接,或者多核系统中的某个核。对于客户端,就像调用了一个库中的函数。不同于本地调用,RPC 可能存在着延迟或者通信通道不可靠。 eRPC 的目标也是这样的,不局限于传输媒介,可以通过各种通信媒介(UART、RS232、SPI、IIC、USB、TCP/IP...)实现,并可以轻松移植到任何系统上。eRPC 协议框架如下图。 ![Remote procedure call system (RPC)](https://oss-club.rt-thread.org/uploads/20220819/f4d89362fd996b28139882a55cc58d65d700f723.png) 目前,eRPC 已经在多种系统上实现。包括无系统裸机、FreeRTOS、ZEPHYR、Mbed OS、THREADX、Linux、Win。**但是,缺少 rt-thread !** 接下来笔者就来尝试一下移植 eRPC 到 rt-thread 系统。在这之前,我们先来熟悉一下怎么使用 eRPC。 ### 下载源码 打开 eRPC 仓库 (https://github.com/EmbeddedRPC/erpc)。 或者从 master 分支拉取最新代码;或者下载 release 包(我用的这种),并解压到工作目录。 ### 浏览目录结构 ![Remote procedure call system (RPC)](https://oss-club.rt-thread.org/uploads/20220819/2c16e98d1b78f28618f6f1b52b91d4d2aa9b91fd.png) erpc_python 提供了 python 接口 api ,我们不用 python 所以先忽略它。 erpcgen 目录下是 erpcgen 工具源码,用来编译生成 erpcgen 工具程序的。 这里面,我们主要关心 erpc_c 文件夹的内容。 ##### *config* eRPC 的配置文件,使用者可以直接编辑这个文件,或者备份一份到其它地方再编辑。 ##### *infra* eRPC 协议编解码核心部分代码。 ##### *port* 适配不同环境的 porting 层代码文件。 ##### *setup* 这里是 c 语言 APIs ,包括客户端和服务端初始化、反初始化等。可以在 c 代码中使用。 ##### *transport* 包含不同传输媒介的传输层定义。 ### 编译 erpcgen 可以从 github 上直接下载 Win Linux Mac 三种平台下的二进制程序,开箱即用。编译这个工具需要安装很多依赖,有兴趣自己编译的可以如下步骤进行编译: 1. 如果是 Win 系统,安装 Cygwin 环境。 2. 安装 bison、 flex、 boost(libboost-dev, libboost-filesystem-dev, libboost-system-dev)、 make、 python、 gcc 等等。 3. 打开终端,进入 erpcgen 目录。 4. 执行 `make build=release` ,编译生成二进制程序。 5. 执行 `make build=release install` ,安装。 默认的安装路径是 "/usr/local/bin" 如果想换安装路径,需要添加 PREFIX 参数,`make build=release install PREFIX=/usr/local/erpc/bin` 。 为啥总加着 "build=release" 呢?因为默认 "build=debug" ,编译 debug 版本。 ### 编译 eRPC 库 使用第三方软件库的时,笔者往往喜欢先把它编译成库文件,然后在自己的项目中使用。编译 eRPC 库和编译 erpcgen 工具的步骤大同小异,步骤更简单。 1. 打开终端,进入 erpc_c 目录。 2. 执行 `make build=release` ,编译生成 release 版 eRPC 库。 3. 执行 `make build=release install` ,安装 release 版 eRPC 库。 默认安装路径是 "/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 ``` 其中的 include 路径根据 "erpc.pri" 实际所在路径修改。构建项目,生成 erpc.dll。 ## 结束 万事具备,东风已降。下一篇我们写两个小 demo ,一睹 eRPC 的风采。
5
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
出出啊
恃人不如自恃,人之为己者不如己之自为也
文章
43
回答
1517
被采纳
342
关注TA
发私信
相关文章
1
请问RT-Thread有RPC方案吗?
2
rt-thread 支持eRPC吗
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
807
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部