# cc_communication **Repository Path**: jason0131czy/cc_communication ## Basic Information - **Project Name**: cc_communication - **Description**: 通信协议学习库 基于自己的CC-SDK进行开发 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-12 - **Last Updated**: 2024-03-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目编译 1. git bash or 其他bash命令行 1. **根目录下source build/bash/set_env.sh**(必须) 2. build all 全部编译 3. build master 编译主机 4. build slave编译从机 5. build clean清除编译 6. build clean_slave清除主机编译 7. build clean_master清除从机编译 2. Win批处理 1. 根目录下 .\build\win\set_env.bat 2. 其他操作同上(Win暂没做6-7) # 项目需求 1. 实现一个**双核通信**下的**高复用性SDK(包含路由机制)** 2. 基于之前的CC-SDK继续开发,**保留core层**,重构所有的设备硬件层和消息层。 3. 要求**脱离keil自己实现vscode进行编译和烧写** - 使用工具链+stlink的模式,如果可以的话后面进一步修改成docker的编译。 > 例如APP1在主处理器,APP2在从处理器,APP1只需要调用发送函数,然后选择发送给APP2端口,这时候就会发现APP2不是该处理器的线程,自动路由到从处理器的网关层,再从从处理器的网关层发送到APP2) 核间通信可采用SPI,CAN,IIC等任意通信协议,这也是本项目的高复用的需求。 ```c struct cc_route_form{ uint8_t main_route; uint16_t sub_route[CC_CONFIG_MAX_SUB_ROUTE]; } struct cc_gatway{ char *name; uint8_t cc_port; void *user_data; int (*send)(struct cc_gatway*, uint8_t, uint8_t*, size_t); //操作接口句柄,目标端口,数据,数据大小 int (*recv)(struct cc_gatway*, uint8_t*, size_t, uint32_t);// 操作接口句柄,目标数据,数据大小,接收超时时间ms int (*reset)(struct cc_gatway*); int (*init)(struct cc_gatway*, uint8_t); int (*deinit)(struct cc_gatway*); struct cc_route_form route_form[3]; //假设有三个核 cc_cond wait; cc_mutex lock;//暂未分读写锁 }; ``` 路由的实现手段是 例如路由表是 { ​ {MASTER, {APP1,APP2,APP3}}, ​ {SLAVE, {APP4, APP5, APP6}}, ​ {ESP32, {APP7, APP8, APP9}}, } 此时APP1发消息到APP9的话,则会遍历查找路由表,首先查找是不是自己的,也就是MASTER,然后发现不是,就会查找是不是SLAVE的,也不是,最后会到ESP32,发现ESP32的子路由中有APP9,那么就会发送到ESP32的物理端口上,然后ESP32的网关就会收到,则会继续get下一跳遍历,发现自己底下有APP9,那么代表这条消息就是要发到自己内部线程的,然后消息就会进一步发送过去