# 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接口详解 ### 初始化函数 ```c int icom_init(ICOM *icom); ``` 初始化ICOM模块,配置发送和接收通道。 ### 任务处理函数 ```c int icom_task(ICOM *icom); ``` 处理ICOM模块的周期性任务,包括在线状态检测和数据接收处理。 ### 数据发送函数 ```c int icom_transmit(ICOM *icom, uint16_t channel, uint8_t *data, uint32_t length); ``` 通过指定通道发送数据。 ### 数据接收函数 ```c int icom_receive(ICOM *icom, uint16_t channel, uint8_t *data, uint32_t *length); ``` 处理ICOM模块的周期性任务,包括在线状态检测和数据接收处理。从指定通道接收数据。 ### 在线状态检查 ```c int icom_txchannel_online(ICOM *icom, uint16_t channel, uint8_t *online); int icom_rxchannel_online(ICOM *icom, uint16_t channel, uint8_t *online); ``` 检查发送/接收通道的在线状态。 ## 使用指南 1. 初始化ICOM结构体并配置通道 2. 调用icom_init()进行初始化 3. 周期性调用icom_task() 4. 使用icom_transmit()发送数据 5. 使用icom_receive()接收数据 ## 高级功能 * 手动接收模式:可以不使用回调函数,手动检查接收状态 * 缓存控制:通过 `inv` 和 `wbinv` 回调函数实现缓存控制 * 私有数据:每个通道维护4个私有数据字,用于扩展功能 ## 应用场景 * 处理器间通信(IPC) * 多核间数据交换 * 模块化系统组件通信 * 需要共享内存通信的嵌入式系统