基于HPM_SDK_ENV开发应用程序的升级处理

基于HPM_SDK_ENV开发应用程序

HPM_SDK_ENV是先楫半导体MCU的Windows集成开发环境, 其包含HPM_SDK,工具链,依赖工具(cmake, ninja, openocd等)以及工程创建工具等文件。用户基于HPM_SDK_ENV开发自己的应用程序时需要考虑如何维护板级配置文件和应用程序文件的问题。

以下3种维护方式:

  1. 用户将自己的板级配置文件和应用程序文件全部维护在HPM_SDK_ENV之中

    不推荐。该种方式容易造成文件组织混乱,当需要升级SDK_ENV时,SDK_ENV文件与用户文件组织在一起,升级处理麻烦。

  2. 用户使用SDK_ENV中的板级配置文件,在SDK_ENV外维护应用程序文件

    此种方式适合用户直接使用SDK_ENV中的评估板,开发自己的应用程序。

  3. 用户在SDK_ENV外维护板级配置文件和应用程序文件

    推荐。该方式将用户的板级配置文件和应用程序文件独立于SDK_ENV进行维护,能够方便的进行版本管理和升级SDK_ENV。

创建应用程序和板级配置

推荐用户将应用程序和板级配置文件维护在SDK_ENV之外。

从sdk_env_v1.7.0开始,先楫半导体在SDK_ENV中提供了用户模板以供用户参考开发属于自己的应用程序和板级配置文件。模板路径:sdk_env/user_template。

请参考该模板(如何快速创建用户自定义board和app工程)创建属于应用程序和板级配置以及Linker文件

CMake构建简要介绍

HPM_SDK使用基于CMake的程序构建系统。用户维护应用程序和板级配置时,需要对应添加CMakeLists.txt文件, CMake工具通过配置文件(CMakeLists.txt)来控制程序的构建过程,并生成适用于多种工具链(GCC/Segger Embedded Studio和IAR)的工程文件。通过修改CMakeLists.txt可以实现添加新的.c和.h文件,增加编译参数等操作。

用户通过维护板级配置文件和应用程序文件以及对应的CMakeLists.txt文件,可以方便的构建出自己的程序,只需对以上文件进行版本管理,即可实现对最终程序版本的有效管理,能够降低版本管理难度。

多人协作时,使用版本管理的板级配置文件和应用程序文件以及对应的CMakeLists.txt文件,即可在本地构建出相同的工程,无须传递完整的工程文件(通常整个工程文件size较大)以及处理工程文件中的路径不一致问题,可以提高协作效率。

用户可参考HPM_SDK中cmake文件和查看HPM_SDK所支持的cmake API说明使用相关cmake指令。

用户准备好板级配置文件和应用程序文件以及对应的CMakeLists.txt文件后,可以使用sdk_env中的start_gui工具调用CMake脚本构建出工程文件。

HPM_SDK_ENV升级与处理

当用户将应用程序和板级配置维护在SDK_ENV之外,升级时可以直接使用新的SDK_ENV再次构建程序。如下,用户在user目录下维护自定义的板级配置和应用程序,原先配合sdk_env_1.6.0构建工程,升级获取sdk_env_v1.7.0后可以使用新sdk_env中的工具再次构建工程,构建出的工程即会使用新sdk_env中的源文件,实现升级。

当sdk_env升级后,可以查看hpm_sdk docs中的Change Log获取升级信息。某些情形下可能出现需要用户适当修改自己维护的板级配置和应用程序与新sdk_env配合使用的情况,以下是一些可能情况的列举:

1. 使用用户维护的板子和应用程序,用新的sdk_env构建程序应该能够直接构建并编译通过。

2. 使用用户维护的板子和新sdk_env提供的例程构建程序,可能会有需要补充或修改板级函数或宏定义等板级实现的情况。

  • 假设hpm_sdk_env_v1.6.0中提供了例程A, 升级到hpm_sdk_env_v1.7.0时A例程进行了修改,需要使用板级文件中申明的函数或宏定义B。 B是hpm_sdk_env_v1.7.0升级过程中新引入的,而用户自己维护的板级文件停留在旧的状态,缺少B的申明或实现,出现编译报错。

    解决办法: 参考SDK中的board,在用户自己维护的板级文件中添加缺少的函数或宏定义。

  • 如果构建的例程是hpm_sdk_env_v1.7.0中新增的例程,新例程调用一些板级函数,则用户同样需要在自己维护的板级文件中添加相关板级实现。

  • 如果使用用户维护的板子和SDK中的例程进行构建,出现不支持构建的情况,会可能由于SDK例程依赖特定板级的feature,而用户维护的板子不能提供相关feature,出现不能构建的情况。例如SDK中的例程hpm_sdk/samples/audio_codec/audio_loopback/app.yaml会记录该例程依赖板级feature:board_audio_codec,也就是当板子支持板级audio_codec,该例程才能被构建出来。板子支持的feature记录在板级文件夹下的yaml文件中。

3. 使用用户维护的板子和应用程序,但用户应用程序想参考新sdk_env中的例程进行功能添加和升级

例如在hpm_sdk_env_v1.6.0中,先楫提供了ECAT_IO例程,用户基于此开发了自己的例程,在hpm_sdk_env_v1.7.0中,先楫增加了FOE例程,用户希望将FOE功能添加当已有的应用程序中。

此类升级会涉及到修改用户自己维护应用程序中的cmake和应用程序的.c&.h文件。用户需参考SDK中的FOE例程的cmake修改自己应用程序的cmake,将FOE功能依赖的.c和.h添加进自己的工程,参考FOE例程,修改自己的应用程序,配置和调用FOE相关功能,最终实现FOE功能的正确添加。

4. 用户维护的linker升级

如果用户使用的是SDK中的默认linker文件,其会随着SDK_ENV的更新而被更新,SDK默认linker文件路径在hpm_sdk/soc/xxxx/xxxx/toolchains下。

如果用户维护了自己的linker文件,sdk升级过程中会存在一些linker的改动, 如增加section,修改section的存放位置,特定的sample会对此类改动有需求。 当使用自己维护的linker出现链接过程报错时,可以参考sdk中的linker进行检查和修改。

5. IDE版本的升级

在HPM_SDK_ENV升级过程中,构建出的IDE工程可能会存在参数变化等情况,需要新的IDE版本才能支持。会出现SDK_ENV升级后的工程需要IDE同步升级后才能正确编译的情况。 例如升级到hpm_sdk_env_v1.7.0时,需要使用SEGGER Embedded Studio Release 8.16a及以上版本才可正确编译。 IDE版本信息可关注SDK的Release Note,确认相关IDE的版本需求。

3
0
发表回复 0

Your email address will not be published. Required fields are marked *