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 到工程下:

在工程下新建 sdk 的目录,然后将 framework-agrv_sdk 下的 misc 和 src 两个目录 copy

过去。如下图:2. 将 board 下的代码 copy 到工程下:

将 boards 下使用到的代码文件夹 copy 过去(如用 407,就 copy 文件夹 agrv2k_407),

可同样放在应用工程的 sdk 路径下。

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

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

由于 SDK 代码已经挪到工程来了,首先注掉对 sdk 的引用:然后,修改对新的文件夹的编译配置:

上图中:

build_src_filter 是设置编译.c 和.s 的路径;

src_build_flags 是设置头文件引用的路径。

由于去除 SDK 引用后,连带 ld 的设置也去掉了。

ld 文件是编译时的编译配置,工程中必须指定。在步骤一中,已经从 SDK 中 copy 到用

户工程的\sdk\misc\devices 下了,这里可直接使用。

并且需要加\sdk\misc\devices 这个路径到编译选项中去:

由于不再引用 SDK,platformio.ini 中的一些自定义配置项及默认配置项,也不再自动配

置,必须在这里手动配置了:

(注意:这部分是要加到 [setup] 栏下的)

到这里,sdk 代码、board 代码、ld 配置,就都配置到用户工程了。

整合完毕。

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

注意:

整合后,自定义项 logger_if = UART0 不再起作用,而是宏 LOGGER_UART=0 起作用了。整个过程,platformio.ini 中修改项汇总:

#framework = agrv_sdk

src_dir = ./

include_dir = ./

src_filter = “-<*> + + + +

+”

src_build_flags = -Isrc -Isdk/src -Isdk/misc -Isdk/agrv2k_407

board_build.ldscript = AgRV2K_FLASH.ld

#logger_if = UART0

design.asf = sdk/agrv2k_407/board.asf

noSDK_build_flags = -DDEFINE_MALLOC

-DDEFINE_FREE

-DSDK_DEBUG

-DFLASH_BOOT

-DLOGGER_UART=0

-DBAUD_RATE=115200

build_flags = ${setup.noSDK_build_flags} -Lsdk/misc/devices

注意:

1. 上边修改和新增的几个配置项,都是在 [setup] 栏目下的。不要放到其他的栏目下。

放到其他的栏目下,可能导致后边按栏目引用时,找不到该配置的错误。

2. 如果修改 VE 里的系统主频,需要同步修改宏 BOARD_PLL_FREQUENCY。修改方式:

在工程里 搜索 BOARD_PLL_FREQUENCY,在 system.h 里把这个修改成目标值。

3. 该 platformio.ini 里修改的项,就是直接修改。

不要保留原项再新建一个同名的项。—- 否则会带来重名现象。

4. 在网盘下有“将 SDK 合并到应用工程”的工程样例。

如果自己合并后有问题,可参考该工程样例(主要是 platformio.ini)。

这篇文档有帮助吗?