mirror of
https://gitee.com/Lamdonn/varch.git
synced 2026-04-30 19:09:14 +08:00
2.6 KiB
2.6 KiB
ICOM 模块文档
概述
ICOM (Internal Communication) 是一个简单的C语言内部通信模块,用于在嵌入式系统中实现高效的双向数据通信。它提供了基于共享内存的通信机制,支持多通道数据传输和状态管理。
核心特性
- 双向通信:支持独立的发送和接收通道
- 状态管理:提供初始化、空闲、忙碌、错误四种通道状态
- 数据长度控制:支持动态数据长度设置和校验
- 在线检测:自动监测通信对端在线状态
- 缓存控制:支持缓存无效化和回写操作
- 多通道支持:可配置多个发送和接收通道
架构设计
通信协议格式
| 偏移量 | 字段 | 大小 | 描述 |
|---|---|---|---|
| 0 | Flag | 4 | 通道状态标志 |
| 4 | Tcnt | 4 | 发送通道计数 |
| 8 | Rcnt | 4 | 接收通道计数 |
| 12 | Dlen | 4 | 数据长度 |
| 16 | Data | N | 实际数据 |
状态机设计
- INIT : 初始化状态
- BUSY : 忙碌状态(数据传输中)
- IDLE : 空闲状态(可传输)
- ERROR : 错误状态
API接口详解
初始化函数
int icom_init(ICOM *icom);
初始化ICOM模块,配置发送和接收通道。
任务处理函数
int icom_task(ICOM *icom);
处理ICOM模块的周期性任务,包括在线状态检测和数据接收处理。
数据发送函数
int icom_transmit(ICOM *icom, uint16_t channel, uint8_t *data, uint32_t length);
通过指定通道发送数据。
数据接收函数
int icom_receive(ICOM *icom, uint16_t channel, uint8_t *data, uint32_t *length);
处理ICOM模块的周期性任务,包括在线状态检测和数据接收处理。从指定通道接收数据。
在线状态检查
int icom_txchannel_online(ICOM *icom, uint16_t channel, uint8_t *online);
int icom_rxchannel_online(ICOM *icom, uint16_t channel, uint8_t *online);
检查发送/接收通道的在线状态。
使用指南
- 初始化ICOM结构体并配置通道
- 调用icom_init()进行初始化
- 周期性调用icom_task()
- 使用icom_transmit()发送数据
- 使用icom_receive()接收数据
高级功能
- 手动接收模式:可以不使用回调函数,手动检查接收状态
- 缓存控制:通过
inv和wbinv回调函数实现缓存控制 - 私有数据:每个通道维护4个私有数据字,用于扩展功能
应用场景
- 处理器间通信(IPC)
- 多核间数据交换
- 模块化系统组件通信
- 需要共享内存通信的嵌入式系统