Erpc
Embedded RPC
Install / Use
/learn @EmbeddedRPC/ErpcREADME
MCUXpresso SDK : mcuxsdk-middleware-erpc
Overview
This repository is for MCUXpresso SDK eRPC middleware delivery and it contains eRPC component officially provided in NXP MCUXpresso SDK. This repository is part of the MCUXpresso SDK overall delivery which is composed of several sub-repositories/projects. Navigate to the top/parent repository mcuxsdk for the complete delivery of MCUXpresso SDK to be able to build and run eRPC examples that are based on mcux-sdk-middleware-erpc component.
Documentation
Overall details can be reviewed here: MCUXpresso SDK Online Documentation
Visit eRPC - Documentation to review details on the contents in this sub-repo.
Setup
Instructions on how to install the MCUXpresso SDK provided from GitHub via west manifest Getting Started with SDK - Detailed Installation Instructions
Contribution
We welcome and encourage the community to submit patches directly to the eRPC project placed on github. Contributing can be managed via pull-requests. Before a pull-request is created the code should be tested and properly formatted.
eRPC
About
eRPC (Embedded RPC) is an open source Remote Procedure Call (RPC) system for multichip embedded systems and heterogeneous multicore SoCs.
Unlike other modern RPC systems, such as the excellent Apache Thrift, eRPC distinguishes itself by being designed for tightly coupled systems, using plain C for remote functions, and having a small code size (<5kB). It is not intended for high performance distributed systems over a network.
eRPC does not force upon you any particular API style. It allows you to export existing C functions, without having to change their prototypes. (There are limits, of course.) And although the internal infrastructure is written in C++, most users will be able to use only the simple C setup APIs shown in the examples below.
A code generator tool called erpcgen is included. It accepts input IDL files, having an .erpc extension, that have definitions of your data types and remote interfaces, and generates the shim code that handles serialization and invocation. erpcgen can generate either C/C++ or Python code.
Example .erpc file:
// Define a data type.
enum LEDName { kRed, kGreen, kBlue }
// An interface is a logical grouping of functions.
interface IO {
// Simple function declaration with an empty reply.
set_led(LEDName whichLed, bool onOrOff) -> void
}
Client side usage:
void example_client(void) {
erpc_transport_t transport;
erpc_mbf_t message_buffer_factory;
erpc_client_t client_manager;
/* Init eRPC client infrastructure */
transport = erpc_transport_cmsis_uart_init(Driver_USART0);
message_buffer_factory = erpc_mbf_dynamic_init();
client_manager = erpc_client_init(transport, message_buffer_factory);
/* init eRPC client IO service */
initIO_client(client_manager);
// Now we can call the remote function to turn on the green LED.
set_led(kGreen, true);
/* deinit objects */
deinitIO_client();
erpc_client_deinit(client_manager);
erpc_mbf_dynamic_deinit(message_buffer_factory);
erpc_transport_tcp_deinit(transport);
}
void example_client(void) {
erpc_transport_t transport;
erpc_mbf_t message_buffer_factory;
erpc_client_t client_manager;
/* Init eRPC client infrastructure */
transport = erpc_transport_cmsis_uart_init(Driver_USART0);
message_buffer_factory = erpc_mbf_dynamic_init();
client_manager = erpc_client_init(transport, message_buffer_factory);
/* scope for client service */
{
/* init eRPC client IO service */
IO_client client(client_manager);
// Now we can call the remote function to turn on the green LED.
client.set_led(kGreen, true);
}
/* deinit objects */
erpc_client_deinit(client_manager);
erpc_mbf_dynamic_deinit(message_buffer_factory);
erpc_transport_tcp_deinit(transport);
}
Server side usage:
// Implement the remote function.
void set_led(LEDName whichLed, bool onOrOff) {
// implementation goes here
}
void example_server(void) {
erpc_transport_t transport;
erpc_mbf_t message_buffer_factory;
erpc_server_t server;
erpc_service_t service = create_IO_service();
/* Init eRPC server infrastructure */
transport = erpc_transport_cmsis_uart_init(Driver_USART0);
message_buffer_factory = erpc_mbf_dynamic_init();
server = erpc_server_init(transport, message_buffer_factory);
/* add custom service implementation to the server */
erpc_add_service_to_server(server, service);
// Run the server.
erpc_server_run();
/* deinit objects */
de
Related Skills
node-connect
344.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
99.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
344.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
344.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
