varch/doc/icom.md

2.6 KiB
Raw Permalink Blame History

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);

检查发送/接收通道的在线状态。

使用指南

  1. 初始化ICOM结构体并配置通道
  2. 调用icom_init()进行初始化
  3. 周期性调用icom_task()
  4. 使用icom_transmit()发送数据
  5. 使用icom_receive()接收数据

高级功能

  • 手动接收模式:可以不使用回调函数,手动检查接收状态
  • 缓存控制:通过 invwbinv 回调函数实现缓存控制
  • 私有数据每个通道维护4个私有数据字用于扩展功能

应用场景

  • 处理器间通信(IPC)
  • 多核间数据交换
  • 模块化系统组件通信
  • 需要共享内存通信的嵌入式系统