doc: add README
This commit is contained in:
@@ -1,2 +1,82 @@
|
||||
# CX9261API-C
|
||||
|
||||
本项目实现了 `cx9261A_api` 的 C++ 到 C 的封装,使 C 程序能够直接链接并调用 `cx9261A_api`。
|
||||
|
||||
## C 封装的转换说明
|
||||
|
||||
在封装过程中,我们对原始 API 进行了如下调整:
|
||||
|
||||
1. **命名转换**:
|
||||
原始 API 中的所有命名空间 `CX9261A::` 被转换为 C 语言风格的前缀 `CX9261A_`,对应的数据类型也进行了同样的转换。例如:
|
||||
|
||||
- 原始 API:`CX9261A::Clock`
|
||||
- C 封装:`CX9261A_Clock`
|
||||
|
||||
2. **参数传递方式的修改**:
|
||||
- 原始 API 中使用的 `const` 结构体引用在 C 封装中统一改为 **`const` 指针传递**。
|
||||
- 例如:
|
||||
原始 API:`void configAGC(const CX9261A::AGCDIG& agc)`
|
||||
C 封装:`void CX9261A_configAGC(const CX9261A_AGCDIG* agc)`
|
||||
|
||||
3. **数据拷贝的使用**:
|
||||
为避免可能存在的 ABI 和数据布局不兼容问题,C 封装在部分接口中引入了数据的深拷贝操作。后续会进行优化以减少不必要的拷贝开销。
|
||||
|
||||
## 目录结构
|
||||
|
||||
```plaintext
|
||||
.
|
||||
├── Makefile # 构建项目的Makefile
|
||||
├── cx9261A_api/ # 原始 API 目录
|
||||
│ ├── CX9261A API.pdf # 原始 API 说明文档
|
||||
│ ├── cx9261adriver.cpp # C++ API 实现文件
|
||||
│ ├── cx9261adriver.h # C++ API 头文件
|
||||
│ ├── defs.h # C++ API 数据类型定义文件
|
||||
│ └── utils.h # C++ API 辅助工具头文件
|
||||
├── cx9261adriver_c.cpp # C 封装的实现文件
|
||||
├── cx9261adriver_c.h # C 封装的头文件
|
||||
└── ld_test.c # 测试编译链接文件
|
||||
```
|
||||
|
||||
## 编译与使用
|
||||
|
||||
### 环境要求
|
||||
|
||||
- **工具链**:建议使用 `gcc-arm-embedded` 编译器,或使用 Xilinx SDK/Vitis 提供的交叉编译工具链。
|
||||
- **目标平台**:默认添加了 Cortex R5、Cortex A9 和 Cortex A53 三个目标平台。如需加入其他目标请确保所使用的工具链与目标平台兼容,编译配置中启用了硬件浮点请做出合适的修改以兼容目标平台。
|
||||
|
||||
### 编译步骤
|
||||
|
||||
1. 在项目目录下,运行以下命令生成静态库文件:
|
||||
|
||||
```bash
|
||||
make all
|
||||
```
|
||||
|
||||
2. 编译完成后,生成的库文件会存放在 `build/<cpu>` 目录下,其中 `<cpu>` 为指定的目标 CPU 架构。不同架构的二进制文件分别存储在对应的子目录中。
|
||||
|
||||
### 链接依赖
|
||||
|
||||
将本项目的库文件链接至您的 C 项目时,需要附加以下库:
|
||||
|
||||
- **`stdc++`**:支持 C++ STL 容器(如 `vector`、`map` 等)。
|
||||
- **`m`**:包含数学相关函数。
|
||||
|
||||
## TODO
|
||||
|
||||
- **优化数据拷贝**:
|
||||
目前的封装中,为了避免潜在的 ABI 和数据布局不兼容问题,在多个接口中引入了数据的深拷贝。后续会针对这些部分进行性能优化,以减少不必要的拷贝开销。
|
||||
|
||||
## 常见问题
|
||||
|
||||
1. **如何配置目标架构?**
|
||||
- 在 `Makefile` 中修改目标架构配置,或通过命令行参数指定目标 CPU。确保使用的工具链支持所选架构。
|
||||
|
||||
2. **链接错误:`undefined reference to 'std::...'`**
|
||||
- 该错误通常由缺少 `stdc++` 库链接导致,请在编译时添加 `-lstdc++`。
|
||||
|
||||
3. **链接错误:`undefined reference to 'round'`**
|
||||
- 该错误通常由缺少 `m` 库链接导致,请在编译时添加 `-lm`。
|
||||
|
||||
## 贡献
|
||||
|
||||
如果您发现问题或有新的功能需求,欢迎通过 `issue` 或 `pull request` 参与贡献。
|
||||
|
||||
Reference in New Issue
Block a user