项目简介
本项目是基于Zephyr RTOS和rpmsg_lite库的远程进程间通信(RPMsg)示例。RPMsg - Lite是轻量级远程处理器消息传递协议实现,专为异构多核系统中的多核通信设计。相较于OpenAMP框架中的RPMsg实现,它在代码大小、API简化性和模块化方面有显著提升,尤其适合资源有限的Cortex - M0+系统。
项目的主要特性和功能
- 轻量级实现,优化了代码大小和内存占用,适用于资源有限的嵌入式系统。
- 支持静态内存分配,避免动态内存分配带来的不确定性和额外开销。
- 支持异构多核系统中的多核通信,提供阻塞发送和回调接收的API。
- 提供可选的队列和命名服务组件,支持阻塞接收和动态端点管理。
- 支持零拷贝发送和接收机制,减少数据传输时的内存拷贝开销。
- 支持多种RTOS环境(如FreeRTOS、ThreadX等)和裸机环境。
安装使用步骤
假设用户已经下载了本项目的源码文件:
1. 配置环境:将/rpmsg_lite/lib/include
目录添加到项目的包含路径中。
2. 包含头文件:在应用程序中包含rpmsg_lite.h
头文件,若需使用队列或命名服务功能,还需包含rpmsg_queue.h
和rpmsg_ns.h
。
3. 初始化RPMsg - Lite:主核调用rpmsg_lite_master_init()
,从核调用rpmsg_lite_remote_init()
。
4. 创建通信端点:使用rpmsg_lite_create_ept()
函数创建通信端点。若需阻塞接收,先调用rpmsg_queue_create()
创建队列。
5. 发送和接收消息:使用rpmsg_lite_send()
发送消息,使用rpmsg_queue_receive()
或回调函数接收消息。
6. 零拷贝机制:使用rpmsg_lite_alloc_tx_buffer()
和rpmsg_lite_send_nocopy()
实现零拷贝发送;使用rpmsg_queue_recv_nocopy()
和rpmsg_queue_nocopy_free()
实现零拷贝接收。
7. 销毁对象:程序结束时,使用rpmsg_queue_destroy()
、rpmsg_lite_destroy_ept()
和rpmsg_lite_deinit()
销毁创建的队列、端点和RPMsg - Lite栈。
示例代码
NXP MCUXpressoSDK中提供了多核通信的示例代码,路径为:
<MCUXpressoSDK_install_dir>/boards/<board_name>/multicore_examples
mcuxsdk/examples/<board_name>/multicore_examples
配置选项
RPMsg - Lite提供多种编译时配置选项,可通过rpmsg_config.h
文件自定义配置,主要选项有:
- RL_BUFFER_PAYLOAD_SIZE
:缓冲区负载大小。
- RL_BUFFER_COUNT
:缓冲区数量。
- RL_USE_STATIC_API
:启用静态API。
- RL_API_HAS_ZEROCOPY
:启用零拷贝API。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】