AG32 下的工程重组

1 min read CPLD

(本文档适用于 SDK1.5.0 以及之后的版本)

现在的开发环境下,

用户工程所在路径:\AgRV_pio\platforms\AgRV\examples

SDK 驱动所在路径:\AgRV_pio\packages\framework-agrv_sdk

board 代码所在路径:\AgRV_pio\packages\AgRV\boards\agrv2k_xxx

这种分散结构的设计,目的是功能分离:把用户不会改动的 SDK 分离出去,不常改动的 board

分离出去,开发者只需要关注自己工程下代码即可。

但这种结构对习惯于 iar/keil 的开发者来说,会带来两种不便:

1. 不方便在 vscode 下直接查看驱动和 board 代码;

2. 代码管理时,不方便整个工程打包。

尤其是 SDK 出现大的版本升级(驱动有改动的情况下),只备份用户代码,后续在新 SDK

版本上运行时,需要重新测试。

为此,这里提供一种整合方式(不再使用上述的分散结构,而是让 SDK 跟着应用程序一起

走),供开发者参考。

目标:把工程的 SDK 代码和 board 代码都整合到应用工程下。

步骤概述:

1. 将 sdk 部分 copy 到工程下;

2. 将 board 下的代码 copy 到工程下;

3. 修改 platformio.ini 来使用新的代码进行编译。

步骤详述:

(以 example 工程为例)

1. 将 sdk 的部分 copy 到工程下:

在 example 工程下新建一个名为 frameworks 的文件夹,将\AgRV_pio\packages\下的

framework-agrv_sdk 目录 copy 过去。如下图:2. 将 board 下的代码 copy 到工程下:

在 example 工程下新建名为 boards 的文件夹,然后将\AgRV_pio\platforms\AgRV\boards\

下的文件 copy 过去(如用 407,就 copy 文件夹 agrv2k_407 和 407.json)。

以上步骤一和步骤二执行后,在 vscode 中可以看到目录结构如下:

3. 修改 platformio.ini 来使用新的代码进行编译:

首先,新增 inline_framework_dir = ./frameworks 来告诉编译器,寻找 framework 时优

先从这里寻找。(这里的 SDK 相当于一个 framework)

添加后如图:注意:新增行 inline_framework_dir 放到原 framework 行下边即可,新增行需要顶格写。

然后,修改对 board 文件夹的编译配置:

到这里,整合完毕。

整合后,工程中的后续操作(编译、下载)跟原来分散结构都是一样的。

验证方法:

修改移过来的 sdk 内的代码(可以故意改错),编译工程,看不会报错。

如果修改失败,是不会编译到这里代码的。

如果在自己工程上合并失败:

1. 首先检查路径名是否正常;—-大概率是路径问题。

2. 再用最简单的 example 工程来尝试,对比和自己工程的差异;

另外,其实这里的 inline_framework_dir 方式,不止可以整合 SDK 到工程里,其他的

framework(如 lwip,freeRTOS 等)也同样可以这样整合进来。

inline_framework_dir 的意义,就是告诉编译器,编译这些关联的 framework 时,优先从

这里指定的路径下去找。如果找不到,才再到安装的路径下去找。所以,只要挪到这个

路径下的 framework,都会被优先使用。也就达到了把 framework 整合到自己工程的目

的。

这篇文档有帮助吗?