Files
2024-10-27 22:26:20 +08:00

83 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` 参与贡献。