varch/doc/icom.md

86 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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)
* 多核间数据交换
* 模块化系统组件通信
* 需要共享内存通信的嵌入式系统