[HPM杂谈]你想要了解的先楫hpm_sdk开发都在这里系列 (三)

一、前言


在昨天(2024年3月29号),先楫发布了新的hpm_sdk包以及hpm_env的window环境开发包,也就是V1.5.0版本。这两个包在以往的系列文章中已经做了介绍,如果想了解可以进行翻阅。《你想要了解的先楫hpm_sdk开发都在这里系列


本文主要介绍hpm_sdk和hpm_env在V1.5.0版本下的更新。


由于sdk更新的内容较多,也使得本文内容较多,建议更多可以查看更新文件CHANGELOG.md

二、sdk_env更新


在sdk_env的CHANGELOG.md可以看到,除了更新sdk为1.5之外,也更新了windows端的gcc toolchain版本到13.2,更新了HPM6800EVK这款开发板的用户手册到1.1。


其他更多的更新在于start_gui可视化生成工具,也是本文阐述的重点。

image.png

(一)localize sdk for app (sdk生成本地化)


该使用场景是: 当用户希望可以有一份和当前应用匹配的独立sdk,可以对sdk进行本地化。本地化的sdk以及应用可以整体发送到另外一个工作机器编译。


简单来说,localize sdk也就是在第一篇中说过未来支持的工程文件本地化,跟stm32cubemx生成工程类似。

[822MEDWB@3VPNX@ILLMH}C.png


sdk本地化生成有两种方式,一种使用start_gui,一种是使用命令行。

1、使用start_gui生成本地化, 提供了localize sdk for app按钮


比如hpm6750evk2生成lvgl相关工程,先点击Generate按钮,再点击Localize SDK for App按钮。

YV3V.png


生成之后提示生成的本地化文件路径,就在对应生成的工程目录下

YCKAF9UKCI.png


缺省状态下sdk会被本地化到当前应用CMakeLists.txt同一级目录,以 localized_sdk_for_BOARDNAME 命名。本地化之后,当前应用可以被移动到其他位置(或者整体发送给另一台工作机器),移动之后的之前cmake构建过程中生成的所有ide工程文件可以直接打开编译。但是由于cmake生成的用户gcc的构建文件都是用绝对路径,gcc的编译需要重新构建(删除构建目录下CMakeCache.txt和CMakeFiles目录)。

image.png


试着将该目录拷贝到另外一台电脑上,打开生成的ses工程或者iar工程。

a9332d4b1a749975c8c680c63b488d3.png


进行编译,编译成功。说明可以通过sdk本地化进行工程复制,方便自己传统方式的工程管理和拷贝。

15220697f8fb9fae491c4b5e2c04f69.png


但需要以下使用限制:


1)、使用opengdb调试,需要自己更改自己的Openocd可执行文件路径,默认生成的是在本地化生成的路径上。

1711782130811.png


2)、对于windows平台,本地化sdk需要和当前应用在同一盘符下。


3)、本地化的sdk位置不能改变,同时本地化的sdk和当前应用的相对路径关系也不能改变。


有以下注意事项:


1)、本地化过程中会将当前应用的CMakeLists.txt先备份为CMakeLists.txt.localized.bak,然后做使用本地化后sdk相关的改动


2)、如果中间需要再生成,可以使用unlocalize sdk for App进行反本地化,再重新locallize。

image.png


会提示覆盖相关文件,确定则反本地化操作。

image.png


之后即可重新本地化。


3、反本地化有以下依赖,任何条件不满足,反本地化过程将会终止:


      1. 存在CMakeLists.txt.localized.bak


      2. 不存在CMakeLists.txt.unlocalized.bak


    - 反本地化过程会把在本地化过程中修改的当前应用CMakeLists.txt先进行备份,在用 CMakeLists.txt.localized.bak恢复。备份为CMakeLists.txt.unlocalized.bak,此备份文件的目的是避免用户在本地化之后的改动被意外覆盖.

2、命令行sdk本地化


1、需要先使用cmake正常构建SDK


使用hpm6750evk2生成helloworld工程。进入sample/hello_world,新建个build文件夹,然后进入build进行构建


$ cd samples/hello_world/


$ mkdir build


$ cmake -GNinja -DBOARD=hpm6750evk2 -DCMAKE_BUILD_TYPE=flash_xip ..


构建成功:

image.png


2、使用 ninja localize_sdk/ unlocalize_sdk命令生成本地化。


$ ninja localize_sdk


$ ninja unlocalize_sdk


本地化成功:

image.png

(二)、compile with gcc(gcc编译sdk)


如果不想装任何IDE,或者需要快速编译生成可执行文件进行烧录,start_gui提供了GCC Compile按钮进行在线编译。

image.png

(三)launch gdb server(更换GDB的cfg文件)


如果需要更换probe/soc/board的cfg文件,start_gui提供了launch gdb server 按钮,支持在线更改,也支持自定义的Board.

image.png


以上是主要的sdk_env更新,本文可能存在遗漏,更全的功能可自行查看sdk_env。

三、hpm_sdk更新


hpm_sdk更新比较多,CHANGELOG.md上更新长达三页,本文也阐述不过来,具体更新可看hpm_sdk下的CHANGELOG.md文件。


本文主要从几个点上说下更新点。

image.png


1、IDE支持上,在1.5.0支持了IAR,版本为3.20.1。对于习惯IAR开发的话是一个特别的好消息。

image.png

image.png

image.png

image.png


2、cmake指令更新


主要支持了以下:支持nds_gcc options、IAR生成、为工具添加指定linker文件、支持通配符源文件加入、SDK本地化。

image.png


这里重点介绍下上述的两个added更新


1)、"add symbols to specify linker for tools."


这个也就是当不想使用sdk自带的ses或者IAR或者gcc的linker文件时候,可以通过set linker file指令设置指定的linker file文件路径。


对于GCC来说使用的是 CUSTOM_GCC_LINKER_FILE


对于SES来说使用的 CUSTOM_SES_LINKER_FILE


对于IAR来说使用的是 CUSTOM_IAR_LINKER_FILE


下面通过一个helloworld来验证,使用ses。


① 把icf的Linker文件放在helloworld上。

image.png


② 在cmakelists.txt文件中加入以下语句。


set(CUSTOM_SES_LINKER_FILE  ${CMAKE_CURRENT_SOURCE_DIR}/flash_xip_rcsn.icf)

image.png


③使用命令行构建可知,ses linker file已经被指定。

image.png


④通过start_gui生成的工程,也说明已经被指定

image.png


2)、"add sdk*src_glob." 支持通配符文件加入


在以往的版本中,要加入某个文件夹的所有文件都得使用sdk_app_src逐个加入,在1.5.0版本中支持了文件夹内所有文件的加入,对应的指令有sdk_src_glob 、sdk_app_src_glob 、sdk_iar_src_glob、sdk_ses_src_glob。也就是在原来的src基础上加上了_glob后缀。


还是hello_world例子,在camkelists.txt中把sdk_app_src更换为sdk_app_src_glob

image.png


2、加入新的中间件和组件。

image.png

四、总结


1、本文阐述SDK V1.5.0的一部分更新内容,其余的更新内容建议通过查看CHANGELOG.md。


2、从更新点上看,change和add的内容更新最多,说明先楫sdk开始在丰富功能的路上逐步发力,比如组件和中间件丰富、例子。以及工具使用便利傻瓜式的方向走。