This commit is contained in:
xiaojiazhu 2023-08-28 08:48:45 -07:00
parent b9e2e92df9
commit 0be56111db
3 changed files with 100 additions and 55 deletions

View File

@ -10,6 +10,14 @@ if(${TARGET_PLATFORM} MATCHES ${DEFINE_LINUX})
include(build/cmake/toolchain/linux.toolchain.cmake) include(build/cmake/toolchain/linux.toolchain.cmake)
endif() endif()
# 使clang-tidy
# find_program(CLANG_TIDY_EXE NAMES clang-tidy PATHS ${PROJECT_ROOT_PATH}/tools/clang-tidy)
# if(CLANG_TIDY_EXE)
# message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}")
# set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE}" "-header-filter=no.h -system-headers=no.h -checks=modernize-use-override")
# else()
# message(STATUS "clang-tidy not found.")
# endif()
#gdb debug #gdb debug
if(${TARGET_PLATFORM} MATCHES ${DEFINE_LINUX}) if(${TARGET_PLATFORM} MATCHES ${DEFINE_LINUX})

View File

@ -0,0 +1,15 @@
# 1. README
## 1.1. 编译
   架构设计上支持去平台编译和运行。
### 1.1.1. Ubuntu系统
在项目根目录下执行命令:
```
make clean // 如果之前有跨平台编译过需要先make clean
make cmake // 构建源码生成Makefile文件
cd cmake-shell-linux/ // 在中间文件目录进行编译,把所有中间文件创建在此目录
make // 编译全部输出构建文件
```

View File

@ -106,18 +106,40 @@ hal
2. 应用代码只有在main线程初始化时实例化实例模块即可 2. 应用代码只有在main线程初始化时实例化实例模块即可
3. 多态单例模块由两个库组成,一个是抽象接口库,一个是实例代码库,支持静态多态和动态多态; 3. 多态单例模块由两个库组成,一个是抽象接口库,一个是实例代码库,支持静态多态和动态多态;
### 1.4.2. 双核业务设计
### 1.4.2. 根据软件模块作用域分层    基于芯片大小核架构的启动设计。
#### 1.4.2.1. 应用层application #### 1.4.2.1. 红外触发启动
##### 1.4.2.1.1. 应用层概述    红外触发启动作为产品正常工作时最经常最重要的启动状态。启动后快速抓拍/录像,快速关机。
**启动时序图**
```mermaid
sequenceDiagram
participant MCU
participant 小核
participant 大核
MCU ->> +小核:上电
小核 ->> 小核:抓拍 / 录像
小核 ->> 小核:保存到sd卡
小核 -->> -MCU:关机
```
##### 1.4.2.1.1. 定时触发启动
### 1.4.3. 根据软件模块作用域分层
#### 1.4.3.1. 应用层application
##### 1.4.3.1.1. 应用层概述
   应用层负责处理产品级的复杂业务关系是产品功能的直接体现应用层模块全部使用C++接口的多态单例模式设计,各模块之间可以互相调用接口,应用层各库可以随意任意调用中间件或者工具类接口。    应用层负责处理产品级的复杂业务关系是产品功能的直接体现应用层模块全部使用C++接口的多态单例模式设计,各模块之间可以互相调用接口,应用层各库可以随意任意调用中间件或者工具类接口。
##### 1.4.2.1.2. 网络服务模块 ##### 1.4.3.1.2. 网络服务模块
###### 1.4.2.1.2.1. 网络服务概述 ###### 1.4.3.1.2.1. 网络服务概述
   根据产品联网属性,网络服务模块分为不联网 / 联网B端/ 联网自研三个多态属性。联网时IPC的图片 / 视频资源通过网络服务器进行管理。    根据产品联网属性,网络服务模块分为不联网 / 联网B端/ 联网自研三个多态属性。联网时IPC的图片 / 视频资源通过网络服务器进行管理。
@ -125,15 +147,15 @@ hal
2. 联网B端媒体资源由三方服务器管理 2. 联网B端媒体资源由三方服务器管理
3. 联网(自研):媒体资源由自研服务器管理; 3. 联网(自研):媒体资源由自研服务器管理;
###### 1.4.2.1.2.2. 网络服务多态设计模式 ###### 1.4.3.1.2.2. 网络服务多态设计模式
   通过构建配置文件选择需要实例化的网络服务模块代码。    通过构建配置文件选择需要实例化的网络服务模块代码。
##### 1.4.2.1.3. 相机状态管理 ##### 1.4.3.1.3. 相机状态管理
   相机主业务逻辑使用状态机机制进行管理。    相机主业务逻辑使用状态机机制进行管理。
###### 1.4.2.1.3.1. 任务状态 ###### 1.4.3.1.3.1. 任务状态
   任务状态是指相机启动需要执行的任务,可能是拍照 / 视频,可能是其它任务。    任务状态是指相机启动需要执行的任务,可能是拍照 / 视频,可能是其它任务。
@ -142,25 +164,25 @@ hal
2. 定时启动拍照 / 录像; 2. 定时启动拍照 / 录像;
3. 测试启动; 3. 测试启动;
#### 1.4.2.2. 中间件middleware #### 1.4.3.2. 中间件middleware
##### 1.4.2.2.1. 中间件概述 ##### 1.4.3.2.1. 中间件概述
   一些相对中性的业务功能库这些库可以提供给不同的产品需求使用在应用层不同的调用方式可实现不同的产品功能。中间件只能被应用层调用或者向下调用适配层或者调用工具库中间件各模块之间不能互相调用。中间件库接口可以使用C或者C++接口。    一些相对中性的业务功能库这些库可以提供给不同的产品需求使用在应用层不同的调用方式可实现不同的产品功能。中间件只能被应用层调用或者向下调用适配层或者调用工具库中间件各模块之间不能互相调用。中间件库接口可以使用C或者C++接口。
##### 1.4.2.2.2. 外设管理模块 ##### 1.4.3.2.2. 外设管理模块
   应用层唯一的硬件外设接口库。包含灯 / 按键 / GPIO / SD卡等。    应用层唯一的硬件外设接口库。包含灯 / 按键 / GPIO / SD卡等。
##### 1.4.2.2.3. 相机管理模块 ##### 1.4.3.2.3. 相机管理模块
   应用层唯一的摄像头接口库。    应用层唯一的摄像头接口库。
##### 1.4.2.2.4. MCU管理模块 ##### 1.4.3.2.4. MCU管理模块
   MCU通信接口库一般使用串口进行通信需要考虑多态其它接口例如I2C考虑多态协议数据结构。MCU负责管理外设的电源控制 / 充当硬狗等。    MCU通信接口库一般使用串口进行通信需要考虑多态其它接口例如I2C考虑多态协议数据结构。MCU负责管理外设的电源控制 / 充当硬狗等。
###### 1.4.2.2.4.1. MCU管理模块设计模式 ###### 1.4.3.2.4.1. MCU管理模块设计模式
   使用C++接口的多态单例模式。    使用C++接口的多态单例模式。
@ -171,11 +193,11 @@ hal
3. 通信协议不暴露,内部处理基于协议的数据解析 / 组包; 3. 通信协议不暴露,内部处理基于协议的数据解析 / 组包;
4. 通信协议支持多态拓展,通信协议独立成库; 4. 通信协议支持多态拓展,通信协议独立成库;
##### 1.4.2.2.5. IPC配置库 ##### 1.4.3.2.5. IPC配置库
   负责管理IPC产品相关的配置数据。    负责管理IPC产品相关的配置数据。
###### 1.4.2.2.5.1. IPC配置库设计模式 ###### 1.4.3.2.5.1. IPC配置库设计模式
   使用多态单例设计模式对外提供C语言接口内部不局限使用C或者C++。    使用多态单例设计模式对外提供C语言接口内部不局限使用C或者C++。
@ -188,7 +210,7 @@ hal
5. 使用枚举方式管理IPC配置数据定义当使用纯16进制保存数据时可不链接utils工具里面的配置库直接保存16进制数据到文件系统即可 5. 使用枚举方式管理IPC配置数据定义当使用纯16进制保存数据时可不链接utils工具里面的配置库直接保存16进制数据到文件系统即可
6. 应用程序全局唯一可以操作IPC配置文件的库保证配置文件正确读写 6. 应用程序全局唯一可以操作IPC配置文件的库保证配置文件正确读写
###### 1.4.2.2.5.2. IPC配置库类图 ###### 1.4.3.2.5.2. IPC配置库类图
```mermaid ```mermaid
classDiagram classDiagram
i_ipc_config <.. ipc_config:实现 i_ipc_config <.. ipc_config:实现
@ -198,7 +220,7 @@ classDiagram
config_manager --> libconfig开源库:依赖 config_manager --> libconfig开源库:依赖
``` ```
###### 1.4.2.2.5.3. 关键业务时序图 ###### 1.4.3.2.5.3. 关键业务时序图
&emsp;&emsp; **时序图会忽略抽象接口直接使用实例接口表示。** &emsp;&emsp; **时序图会忽略抽象接口直接使用实例接口表示。**
@ -282,49 +304,49 @@ ipc_config -->> -User:return
``` ```
##### 1.4.2.2.6. 高级配置库 ##### 1.4.3.2.6. 高级配置库
&emsp;&emsp; 对配置库的二级封装,提供更便捷的功能服务,例如:可以监控文件的修改事件 / 可以直接捕获某个配置文件或者数据的操作对象。 &emsp;&emsp; 对配置库的二级封装,提供更便捷的功能服务,例如:可以监控文件的修改事件 / 可以直接捕获某个配置文件或者数据的操作对象。
###### 1.4.2.2.6.1. 高级配置库设计 ###### 1.4.3.2.6.1. 高级配置库设计
&emsp;&emsp; 对外暴露C++接口,使用多态单例设计模式。 &emsp;&emsp; 对外暴露C++接口,使用多态单例设计模式。
##### 1.4.2.2.7. 状态机管理 ##### 1.4.3.2.7. 状态机管理
&emsp;&emsp; 提供实现状态机管理机制C++接口,使用鸿蒙状态机开源源码进行改造封装。 &emsp;&emsp; 提供实现状态机管理机制C++接口,使用鸿蒙状态机开源源码进行改造封装。
###### 1.4.2.2.7.1. 状态机管理设计模式 ###### 1.4.3.2.7.1. 状态机管理设计模式
&emsp;&emsp; 使用多态单例设计模式,暂定使用鸿蒙状态机开源代码改造实现,后续可替换其它源码或者自研代码。 &emsp;&emsp; 使用多态单例设计模式,暂定使用鸿蒙状态机开源代码改造实现,后续可替换其它源码或者自研代码。
##### 1.4.2.2.8. 文件数据库 ##### 1.4.3.2.8. 文件数据库
&emsp;&emsp; 文件数据库负责管理设备的媒体资源(图片 / 视频等)。 &emsp;&emsp; 文件数据库负责管理设备的媒体资源(图片 / 视频等)。
###### 1.4.2.2.8.1. 文件数据设计模式 ###### 1.4.3.2.8.1. 文件数据设计模式
&emsp;&emsp; 使用混合多态单例模式开发。 &emsp;&emsp; 使用混合多态单例模式开发。
###### 1.4.2.2.8.2. 开源库选型 ###### 1.4.3.2.8.2. 开源库选型
&emsp;&emsp; sqlite3开源库编译成工具类库提供给文件数据库使用。 &emsp;&emsp; sqlite3开源库编译成工具类库提供给文件数据库使用。
###### 1.4.2.2.8.3. 基本功能和业务需求 ###### 1.4.3.2.8.3. 基本功能和业务需求
1. 对媒体资源文件的增删改查处理; 1. 对媒体资源文件的增删改查处理;
2. 记录媒体资源文件的生成时间,任务(是否发送); 2. 记录媒体资源文件的生成时间,任务(是否发送);
3. 业务根据需要,通过数据库判断哪些文件已经发送完成,哪些文件发送失败,哪些文件待发送; 3. 业务根据需要,通过数据库判断哪些文件已经发送完成,哪些文件发送失败,哪些文件待发送;
#### 1.4.2.3. 硬件适配层hal #### 1.4.3.3. 硬件适配层hal
&emsp;&emsp; 负责适配不同的硬件平台。 &emsp;&emsp; 负责适配不同的硬件平台。
##### 1.4.2.3.1. 硬件适配层设计模式 ##### 1.4.3.3.1. 硬件适配层设计模式
&emsp;&emsp; 基于C语言接口的多态单例模式编译时静态多态链接对应的芯片平台适配代码实现芯片接口的标准功能定义。 &emsp;&emsp; 基于C语言接口的多态单例模式编译时静态多态链接对应的芯片平台适配代码实现芯片接口的标准功能定义。
##### 1.4.2.3.2. 媒体适配方案: ##### 1.4.3.3.2. 媒体适配方案:
&emsp;&emsp; IPC应用在适配芯片平台的多媒体接口时使用多进程的方式实现。满足IPC应用可以快起无需等待媒体相关的初始化的需求。 &emsp;&emsp; IPC应用在适配芯片平台的多媒体接口时使用多进程的方式实现。满足IPC应用可以快起无需等待媒体相关的初始化的需求。
@ -340,7 +362,7 @@ ipc_config -->> -User:return
1. 客户端可自动重连; 1. 客户端可自动重连;
2. 服务端可多次关闭和开启满足gtest资源回收需求 2. 服务端可多次关闭和开启满足gtest资源回收需求
##### 1.4.2.3.3. 适配层多进程类图 ##### 1.4.3.3.3. 适配层多进程类图
```mermaid ```mermaid
classDiagram classDiagram
@ -351,7 +373,7 @@ classDiagram
media进程 --> 芯片媒体API:依赖 media进程 --> 芯片媒体API:依赖
``` ```
##### 1.4.2.3.4. 跨进程业务时序图 ##### 1.4.3.3.4. 跨进程业务时序图
* 本地socket链接 * 本地socket链接
@ -383,20 +405,20 @@ v_media_handle -->> -hal:return
* 存在问题: * 存在问题:
使用C语言开发时如何解决智能指针问题 使用C语言开发时如何解决智能指针问题
#### 1.4.2.4. 工具库utils #### 1.4.3.4. 工具库utils
##### 1.4.2.4.1. 工具库概述 ##### 1.4.3.4.1. 工具库概述
&emsp;&emsp; 工具库是功能单一的不依赖任何三方库的独立库日志库和返回码管理库除外必须提供C语言接口内部实现不限于C或者C++。工具类库可以被任意的其它模块调用特别指hal/component/application三大层级。 &emsp;&emsp; 工具库是功能单一的不依赖任何三方库的独立库日志库和返回码管理库除外必须提供C语言接口内部实现不限于C或者C++。工具类库可以被任意的其它模块调用特别指hal/component/application三大层级。
##### 1.4.2.4.2. 日志库 ##### 1.4.3.4.2. 日志库
###### 1.4.2.4.2.1. 日志库概述 ###### 1.4.3.4.2.1. 日志库概述
&emsp;&emsp; 提供程序的日志管理功能,含日志的实时打印/保存/跟踪(实时上传云端)。 &emsp;&emsp; 提供程序的日志管理功能,含日志的实时打印/保存/跟踪(实时上传云端)。
###### 1.4.2.4.2.2. 日志库设计模式 ###### 1.4.3.4.2.2. 日志库设计模式
&emsp;&emsp; C语言接口的多态单例模式可动态/静态加载多态实例。 &emsp;&emsp; C语言接口的多态单例模式可动态/静态加载多态实例。
###### 1.4.2.4.2.3. 日志库启动 ###### 1.4.3.4.2.3. 日志库启动
&emsp;&emsp; 日志库是否启用一般来讲是dubug版本启用日志功能release版本禁用日志功能考虑到release版本的维护问题标准启动时main线程在启动时使用dlopen系列函数去加载日志库多态特殊版本仍可在main线程加载日志库后二次实例化日志库多态来实现不同的日志功能。 &emsp;&emsp; 日志库是否启用一般来讲是dubug版本启用日志功能release版本禁用日志功能考虑到release版本的维护问题标准启动时main线程在启动时使用dlopen系列函数去加载日志库多态特殊版本仍可在main线程加载日志库后二次实例化日志库多态来实现不同的日志功能。
1. 标准流程main线程加载sd卡动态库如有即可动态实现日志功能正常出货sd卡不带日志库此时没有日志功能 1. 标准流程main线程加载sd卡动态库如有即可动态实现日志功能正常出货sd卡不带日志库此时没有日志功能
@ -404,11 +426,11 @@ v_media_handle -->> -hal:return
3. sd卡的日志动态根据实际售后维护可以是实时打印log/保存本地log/云log的多态实例库 3. sd卡的日志动态根据实际售后维护可以是实时打印log/保存本地log/云log的多态实例库
4. 多态日志功能可以忽略debug和release版本的区别只发布一个版本即可 4. 多态日志功能可以忽略debug和release版本的区别只发布一个版本即可
##### 1.4.2.4.3. 状态码管理库 ##### 1.4.3.4.3. 状态码管理库
&emsp;&emsp; 提供整个应用程序的返回码管理功能例如打印返回码的字符串含义。提供C语言接口纯C语言开发的模块形成项目内部唯一返回码标准。 &emsp;&emsp; 提供整个应用程序的返回码管理功能例如打印返回码的字符串含义。提供C语言接口纯C语言开发的模块形成项目内部唯一返回码标准。
###### 1.4.2.4.3.1. 状态码功能 ###### 1.4.3.4.3.1. 状态码功能
1. 创建返回码操作“句柄”; 1. 创建返回码操作“句柄”;
2. 打印返回码/获取返回码(字符串); 2. 打印返回码/获取返回码(字符串);
@ -416,7 +438,7 @@ v_media_handle -->> -hal:return
4. 不同模块之间可透传状态码,避免错误码的转换麻烦; 4. 不同模块之间可透传状态码,避免错误码的转换麻烦;
5. 状态码的定义是跟着模块走的,独立模块的状态码定义在模块内部,不链接时不占用程序空间; 5. 状态码的定义是跟着模块走的,独立模块的状态码定义在模块内部,不链接时不占用程序空间;
###### 1.4.2.4.3.2. 基础状态码定义 ###### 1.4.3.4.3.2. 基础状态码定义
&emsp;&emsp; 基础状态码是全局的基础状态码,枚举值全局唯一,其它独立模块必须继承基础状态码累加枚举值,但是,独立模块之间的枚举值可重复,状态码在使用时,日志只关注状态码的字符串,不关心状态码枚举值,代码逻辑使用枚举值。 &emsp;&emsp; 基础状态码是全局的基础状态码,枚举值全局唯一,其它独立模块必须继承基础状态码累加枚举值,但是,独立模块之间的枚举值可重复,状态码在使用时,日志只关注状态码的字符串,不关心状态码枚举值,代码逻辑使用枚举值。
@ -439,7 +461,7 @@ enum STATUS_CODE
| STATUS_CODE_END | STATUS_CODE_END | 结束,无意义 | | STATUS_CODE_END | STATUS_CODE_END | 结束,无意义 |
| 其它 | | 其它状态码在各自模块定义 | | 其它 | | 其它状态码在各自模块定义 |
###### 1.4.2.4.3.3. 已知漏洞 ###### 1.4.3.4.3.3. 已知漏洞
&emsp;&emsp; 状态码在代码层面是存在重复的可能性的,代码逻辑在使用状态码枚举值时,可能会出现逻辑错误。 &emsp;&emsp; 状态码在代码层面是存在重复的可能性的,代码逻辑在使用状态码枚举值时,可能会出现逻辑错误。
@ -450,19 +472,19 @@ Example:
static inline bool StatusCodeEqual(const StatusCode code, const char *value) static inline bool StatusCodeEqual(const StatusCode code, const char *value)
``` ```
##### 1.4.2.4.4. 系统标准接口库 ##### 1.4.3.4.4. 系统标准接口库
&emsp;&emsp; 对系统标准接口的套壳封装,主要是为了对系统标准打桩满足测试需求。 &emsp;&emsp; 对系统标准接口的套壳封装,主要是为了对系统标准打桩满足测试需求。
&emsp;&emsp; 使用普通的C语言接口封装即可通过使用gcc编译参数在Linux x86系统中满足打桩需求在交叉编译担心工具链兼容问题测试程序中无法对系统标准接口进行打桩。 &emsp;&emsp; 使用普通的C语言接口封装即可通过使用gcc编译参数在Linux x86系统中满足打桩需求在交叉编译担心工具链兼容问题测试程序中无法对系统标准接口进行打桩。
##### 1.4.2.4.5. 通用配置库 ##### 1.4.3.4.5. 通用配置库
###### 1.4.2.4.5.1. 通用配置库概述 ###### 1.4.3.4.5.1. 通用配置库概述
&emsp;&emsp; 配置库负责管理软件配置参数,对配置数据进行设置 / 获取 / 存储 / 备份 / 升级等功能;通用配置库不限制使用场景,是一个通用的配置文件管理库。 &emsp;&emsp; 配置库负责管理软件配置参数,对配置数据进行设置 / 获取 / 存储 / 备份 / 升级等功能;通用配置库不限制使用场景,是一个通用的配置文件管理库。
###### 1.4.2.4.5.2. 配置库设计模式 ###### 1.4.3.4.5.2. 配置库设计模式
&emsp;&emsp; 对外提供C语言接口内部不局限使用C或者C++。整个软件唯一可以直接操作文件系统配置文件的库。配置库可以理解为简单的三方库的接口直接封装,使用多态单例设计模式实现静态或者动态切换三方库的使用。 &emsp;&emsp; 对外提供C语言接口内部不局限使用C或者C++。整个软件唯一可以直接操作文件系统配置文件的库。配置库可以理解为简单的三方库的接口直接封装,使用多态单例设计模式实现静态或者动态切换三方库的使用。
@ -472,13 +494,13 @@ static inline bool StatusCodeEqual(const StatusCode code, const char *value)
2. 可注册回调函数,监听文件的操作事件; 2. 可注册回调函数,监听文件的操作事件;
3. 使用字符串名字key + 值的方式管理配置文件,作为通用的配置文件管理库; 3. 使用字符串名字key + 值的方式管理配置文件,作为通用的配置文件管理库;
###### 1.4.2.4.5.3. 开源库 ###### 1.4.3.4.5.3. 开源库
两种方案: 两种方案:
1. 使用libconfig作为文件操作的开源库实现文件和数据的读 / 写。 1. 使用libconfig作为文件操作的开源库实现文件和数据的读 / 写。
2. 使用sqlite3作为文件操作的开源库作为数据库文件处理。 2. 使用sqlite3作为文件操作的开源库作为数据库文件处理。
###### 1.4.2.4.5.4. 通用配置库类图 ###### 1.4.3.4.5.4. 通用配置库类图
&emsp;&emsp; 多态单例设计模式main线程静态链接多态库。 &emsp;&emsp; 多态单例设计模式main线程静态链接多态库。
```mermaid ```mermaid
classDiagram classDiagram
@ -488,38 +510,38 @@ classDiagram
sqlite_manager --> sqlite3数据库:依赖 sqlite_manager --> sqlite3数据库:依赖
``` ```
###### 1.4.2.4.5.5. 备份机制 ###### 1.4.3.4.5.5. 备份机制
&emsp;&emsp; 备份数据用于数据异常时可还原旧数据。 &emsp;&emsp; 备份数据用于数据异常时可还原旧数据。
方案选择: 方案选择:
1. 出厂默认配置文件为只读文件,在数据破坏时还原; 1. 出厂默认配置文件为只读文件,在数据破坏时还原;
###### 1.4.2.4.5.6. 升级机制 ###### 1.4.3.4.5.6. 升级机制
&emsp;&emsp; 程序升级后配置数据发生增 / 删时如何兼容和还原。 &emsp;&emsp; 程序升级后配置数据发生增 / 删时如何兼容和还原。
##### 1.4.2.4.6. 串口功能模块 ##### 1.4.3.4.6. 串口功能模块
&emsp;&emsp; 串口的打开 / 关闭 / 数据读 / 数据写 功能。 &emsp;&emsp; 串口的打开 / 关闭 / 数据读 / 数据写 功能。
###### 1.4.2.4.6.1. 串口开源库 ###### 1.4.3.4.6.1. 串口开源库
使用下述开源库对串口数据进行收发。 使用下述开源库对串口数据进行收发。
``` ```
https://gitee.com/RT-Thread-Mirror/TinyFrame https://gitee.com/RT-Thread-Mirror/TinyFrame
``` ```
##### 1.4.2.4.7. MCU协议库 ##### 1.4.3.4.7. MCU协议库
&emsp;&emsp; 负责MCU通信协议的组包 / 拆包 / 事件转换。 &emsp;&emsp; 负责MCU通信协议的组包 / 拆包 / 事件转换。
###### 1.4.2.4.7.1. MCU协议库设计模式 ###### 1.4.3.4.7.1. MCU协议库设计模式
&emsp;&emsp; 基于C语言的多态单例设计模式。 &emsp;&emsp; 基于C语言的多态单例设计模式。
###### 1.4.2.4.7.2. 协议数据结构 ###### 1.4.3.4.7.2. 协议数据结构
##### 1.4.2.4.8. 多进程协议库 ##### 1.4.3.4.8. 多进程协议库
&emsp;&emsp; 负责IPC应用和媒体进程之间的协议组包 / 拆包,在协议和业务之间进行转换接口的封装。 &emsp;&emsp; 负责IPC应用和媒体进程之间的协议组包 / 拆包,在协议和业务之间进行转换接口的封装。