mirror of
https://gitee.com/Lamdonn/varch.git
synced 2026-04-30 19:09:14 +08:00
86 lines
2.6 KiB
Markdown
86 lines
2.6 KiB
Markdown
# 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)
|
||
* 多核间数据交换
|
||
* 模块化系统组件通信
|
||
* 需要共享内存通信的嵌入式系统 |