前 言

概述

本文档主要描述HiSpark Studio工具的安装及使用,该工具主要是用于代码的编辑、编译、镜像烧写。

读者对象

本文档主要适用于基于海思芯片进行嵌入式开发的相关人员:

  • 技术支持工程师

  • 软件开发工程师

  • 硬件开发工程师

  • 嵌入式爱好者

符号约定

在本文中可能出现下列标志,它们所代表的含义如下。

符号

说明

表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。

表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。

表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。

用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。

“须知”不涉及人身伤害。

对正文中重点信息的补充说明。

“说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。

工具简介

HiSpark Studio面向智能设备开发者提供一站式集成开发环境,支持代码编辑、编译、烧录和调试等功能,支持C/C++语言,支持64位Windows10和Windows11操作系统,包含以下主要功能:

  • 支持代码查找、代码高亮、代码自动补齐、代码输入提示、代码检查等,开发者可以轻松、高效编码。

  • 支持单步调试和查看内存、变量、调用栈、寄存器、汇编等调试信息。

  • 支持自动检测各芯片/开发板依赖的工具链是否完备,并提供一键下载和安装缺失工具链。

HiSpark Studio工具主要分为以下7个功能区域,如图1所示。

① 菜单栏:提供文件、编辑、视图、调试、工程等菜单选项。

② 工具栏:提供常用功能按钮。新建工程、打开工程、清除、编译、烧录、MCU配置、变量监控等功能。

③ 侧边栏:提供打开工程区、设置、搜索和调试功能。

④ 工程区:展示侧边栏中的具体功能,如资源管理器、搜索、调试等。

⑤ 代码编辑区:提供代码的查看、编写、跳转、高亮等功能。

⑥ 输出控制台:提供操作日志的打印、调试命令的输入及命令行工具等功能。

⑦ 状态栏:显示当前文件的编码格式、行数、列数等信息。

图 1 功能分区图

HiSpark Studio工具当前支持的芯片和对应特性如表1所示。

表 1 HiSpark Studio工具支持的芯片及其特性

芯片系列

芯片名称

工程管理

芯片配置

编译运行

一键烧录

烧录配置

栈分析和镜像分析

MCU

306xH

✓

✓

✓

✓

✓

✓

3065A

✓

✓

✓

✓

✓

✓

3061M

✓

✓

✓

✓

✓

✓

3065P

✓

✓

✓

✓

✓

✓

3066M

✓

✓

✓

✓

✓

✓

3066H

✓

✓

✓

✓

✓

✓

3067M

✓

✓

✓

✓

✓

✓

Aucu

✓

✓

✓

✓

✓

✓

3071MNNICE

✓

✓

✓

✓

✓

✓

3071MNPIRE

✓

✓

✓

✓

✓

✓

芯片系列

芯片名称

工程调试

串口控制台

变量监控

AI调试

MCU

306xH

✓

✓

✓

x

3065A

✓

✓

✓

x

3061M

✓

✓

✓

x

3065P

✓

✓

✓

x

3066M

✓

✓

✓

x

3066H

✓

✓

✓

✓

3067M

✓

✓

✓

x

Aucu

✓

✓

✓

x

3071MNNICE

✓

✓

✓

x

3071MNPIRE

✓

✓

✓

x

HiSpark Studio工具版本与SDK版本的对应关系如表2所示。

表 2 HiSpark Studio工具版本与SDK版本对应表

HiSpark Studio工具版本

SDK版本

1.0.0.2

Solarec 1.0.0.6、SolarA2 1.0.1.2

1.0.0.8

Solarec 1.0.0.6、SolarA2 1.0.1.2

1.0.0.10

Solarec 1.0.0.6、SolarA2 1.0.1.2、SolarA2 1.1.0.1、SolarA2 1.1.0.2

1.0.0.11

Solarec 1.0.0.6、SolarA2 1.0.1.2、SolarA2 1.1.0.1、SolarA2 1.1.0.2

1.0.0.12

Solarec 1.0.0.6、SolarA2 1.0.1.2、SolarA2 1.1.0.1、SolarA2 1.1.0.2

25.09.1

Solarec 1.0.0.6、SolarA2 1.0.1.2、SolarA2 1.1.0.1、SolarA2 1.1.0.2

25.12.1

SolarA2 1.1.0.10、SolarA2 1.1.0.11

26.3.1

SolarA2 1.1.0.12、SolarA2 1.1.0.13

26.6.1

SolarA2 1.1.0.14

26.9.1

SolarA2 1.1.0.15

HiSpark Studio欢迎界面中提供了生态社区的多个网址,用户可直接点击访问:

开发环境搭建

概述

当前版本仅支持Windows10和Windows11系统,本章节主要介绍Windows10和Windows11上的开发环境搭建。

安装要求

  • 操作系统要求:支持64位Windows10或64位Windows11。

  • 硬盘要求:至少有900MB的硬盘空间来安装HiSpark Studio。

  • 内存要求:HiSpark Studio最低要求为1GB RAM,建议至少有4GB RAM来安装运行HiSpark Studio。

  • CPU:HiSpark Studio最低要求为1.6GHz或者更高的处理器。

  • C盘空间要求:HiSpark Studio默认会在用户的C盘文件夹中创建一个“HiSpark Studio”的缓存目录,用于存储用户的设置、插件等缓存,建议至少有1GB的C盘剩余空间。

安装HiSpark Studio

操作步骤

  1. 获取HiSpark Studio安装包。

    安装包为一个可执行文件,如图1所示。

    图 1 HiSparkStudioSetup安装包

  2. 安装程序。

    鼠标双击“HiSparkStudioSetup.exe”打开安装包,出现安装向导初始界面,如图2所示。选中“我同意此协议(A)”,并单击“下一步(N)”。

    图 2 安装HiSpark Studio向导初始界面

    安装HiSpark Studio时,弹出窗口中的版本号应与HiSpark Studio安装包版本号保持一致,图2中1.0.0.1的版本号仅为举例说明。 新版本HiSpark Studio(1.0.0.12、25.09.1、25.12.1这三个版本)安装后不会卸载旧版本,只有安装相同版本时才会卸载已安装的同版本IDE,一台PC可同时安装多个IDE。如需卸载旧版本IDE,可双击IDE安装目录下的unins000.exe手动卸载。

    一台PC中安装多个版本的IDE,通过右键任务栏中的IDE图标打开新窗口时,新窗口的版本号可能与当前已打开的IDE版本不一致。

    由于微软和程序安装的限制,任务栏中的图标右键打开的窗口,默认为“C:\ProgramData\Microsoft\Windows\Start Menu\Programs”这个“程序”菜单下第一顺位的IDE,以下图为例,系统中同时安装26.03.1和25.12.1版本的IDE,但是25.12.1版本顺序靠前,所以,即使已打开26.03.1版本的IDE,并在26.03.1版本的基础上右键任务栏的图标,显示的新窗口也为25.12.1版本。

    遇到上述情况,用户可通过各自的快捷方式或者在新开的界面中点击菜单栏中“文件”选项中的“新建窗口”功能打开所需的版本。

  3. 选择安装路径。

    单击“浏览”,选择安装路径后,单击“下一步(N)”。

    图 3 选择安装路径

    安装路径必须是英文路径。

  4. 选择附加任务,建议全部勾选,并单击“下一步(N)”。

    图 4 选择附加任务

  5. 准备安装。

    确认安装信息无误,单击“安装(I)”。

    图 5 准备安装

  6. 等待安装。

    等待安装执行。

    图 6 等待文件安装

    图 7 等待插件安装

    在安装的过程中,如果想停止安装,单击“取消”按钮。

  7. 安装完成。

    图 8 安装完成

工程管理

新建工程

操作步骤

  1. 打开HiSpark Studio工具,进入欢迎页面,单击“新建工程”,进入新建工程页面。

    图 1 HiSpark Studio欢迎页面

  2. 在图2界面配置工程参数,单击“完成”。

    图 2 新建工程窗口

    • 芯片:选择工程使用的芯片名称。具体参考“工具简介”中的表1。

    • 开发板:选择工程使用的开发板名称。当用户不需要自定义开发板时,这里选择芯片名作为开发板名。

    • 工程类型:选择创建的工程类型,分为普通工程和空工程,空工程当前只支持MCU系列芯片。

    • 工程名:输入工程名称。

    • 工程路径:选择用于存放工程文件的目录。

    • 软件包:选择工程使用的软件开发驱动包(SDK)文件夹根目录。

  3. 查看工程创建结果。

    HiSpark Studio会自动打开新创建的工程,并在欢迎界面工程列表中显示创建的工程,如图3所示。

    图 3 工程创建结果页面

3071工程需要用户手动配置arm-gnu-toolchain的编译器环境,用户可参考https://developer.arm.com/-/media/Files/downloads/gnu/14.2.rel1/binrel/arm-gnu-toolchain-14.2.rel1-mingw-w64-i686-arm-none-eabi.zip下载14.2版本的gcc并添加到环境变量中,关闭所有IDE窗口后再次创建3071工程。

导入工程

操作步骤

  1. 打开HiSpark Studio工具,进入到欢迎页面,单击“导入工程”,进入导入工程页面。

    图 1 HiSpark Studio导入工程页面

  2. 选择导入的路径,即可查找该路径下所有的工程,勾选需要导入的工程,单击“完成”。

    图 2 导入工程配置页面

  3. 导入工程完成后,会在工程区展示出工程的文件夹,并在欢迎界面的工程列表中展示所导入的工程。

    图 3 导入工程完成

多核工程的导入请参考打开多工程工作区章节。

打开工程

操作步骤

  1. 打开HiSpark Studio工具,进入到欢迎页面,单击“”,进入打开工程页面。

    图 1 单击打开工程

  2. 选择目标工程打开。

    图 2 打开工程的步骤

    ①:选择目标工程所在的路径。

    ②:选择导入类型为“Project Files(*.hiproj)”。

    ③:选择目标文件,例如“demo.hiproj”。

    ④:单击“打开(O)”。

  3. 工作台视图中展示工程下面的文件夹,且在工程列表中出现当前打开的工程,表示打开工程成功。

    图 3 打开工程成功

创建多工程工作台

HiSpark Studio支持创建MCU多工程工作台,并且支持设置活动工程,且编译、调试等功能与活动工程相匹配,也就是即一个HiSpark Studio窗口可以对多个工程分别进行编译、调试。

操作步骤

  1. 将工程文件夹添加到多工程工作区(需提前准备好MCU的工程文件夹)。

    单击工程菜单下的“将工程文件夹添加到多工程工作区...”,如图1所示。

    图 1 将工程文件夹添加到多工程工作区

    单击后弹出文件夹选择框,选择已创建好的MCU工程文件夹(可选择一个或多个),单击“添加(A)”,如图2所示。

    图 2 添加MCU工程文件夹到工作区

    添加完成后,在资源管理器视图中显示添加的多个工程文件夹,会默认将第一个工程文件夹设置为活动工程,并且工程文件会加粗且字号变大,如图3所示。

    图 3 打开多工程工作区

  2. 保存多工程文件,单击工程菜单下的“将多工程工作区另存为...”按钮,可以将多工程文件保存为.himpw文件,如图4所示。

    图 4 保存多工程工作区

  3. 设置活动工程,在资源管理器中,选择工程文件夹,单击鼠标右键,选择“设为活动工程”,将选中的工程设置为活动工程,如图5所示。

    图 5 设置活动工程

    • 首次打开多工程文件夹会默认将第一个工程文件夹设置为活动工程。

    • 设置为活动工程后,对应的工程文件夹的字号会变大且加粗,以区别于其他工程。

    • 设为活动工程后,编译、重编译、清除、烧录、调试、栈分析、镜像分析、芯片配置器以及工程配置功能均针对活动工程。

    • 多工程工作区在使用芯片配置器和工程配置功能时,需要在设置活动工程之前关闭已打开的芯片配置器和工程配置,以便功能刷新后与新活动工程匹配。

创建多核工程

HiSpark Studio支持创建MCU中3066H、3067M系列的多核工程,即3066H和3067M可一次性创建3个工程,分别为CPU0、CPU1和CPU2的工程,三个工程组成一个多工程工作区,即为创建完成的多核工程。

操作步骤

  1. 新建工程时选择如3066H系列芯片,工程类型选择“多核工程”,此时“工程名”选项会变为输入“工作区名”、“CPU0名”、“CPU1名”和“CPU2名”。选择工程路径和软件包路径后,点击“完成”即可创建多核工程。

    图 1 创建多核工程

  2. 创建完成后会在资源管理器中打开一个工作区,名称为步骤一中输入的“工作区名”,且该工作区会包含三个工程,分别为CPU0、CPU1和CPU2的工程名,且默认CPU0为活动工程,活动工程的使用可参考创建多工程工作台,工程创建后会自动打开芯片配置器生成三个工程的代码。

    图 2 多核工程生成代码

  3. 多核工程支持“全量编译”、“全量编译清除”和“全量烧写”功能,“全量编译”功能可以依次执行CPU0、CPU1和CPU2的编译,“全量编译清除”功能可以依次执行CPU0、CPU1和CPU2的编译清除,“全量烧写”功能可以依次执行CPU2、CPU1和CPU0的烧录。可以点击菜单栏中的“工程”按钮或者在资源管理器界面右键选择“全量编译”和“全量编译清除”功能。

    图 3 工程菜单下的“全量编译”、“全量编译清除”和“全量烧写”选项

    图 4 资源管理器中右键的“全量编译”、“全量编译清除”和“全量烧写”选项

打开多工程工作区

单击菜单栏中的“工程”菜单,选择“从文件打开多工程工作区...”选项,如图1所示。

图 1 从文件打开多工程工作区

在弹出的文件选择框中选择创建多核工程时生成的.himpw文件,即可打开对应的多工程工作区,如图2所示。

图 2 选择himpw文件

多工程工作区的创建与保存方法请参见“创建多工程工作台”章节。

工程配置

工程配置主要用于配置工程的基本信息、编译、调试、烧录等工程配置项,单击“”按钮可以打开工程配置界面,如图1所示。

图 1 单击工程配置按钮

基本信息配置

单击工程配置界面左侧“基本信息”页签进入基本信息配置界面,如图1所示。该界面包含工程芯片系列、开发板型号、软件包路径,可以修改工程所对应的软件包路径。

图 1 基本信息配置界面

编译器配置

单击工程配置界面左侧“编译器”页签进入编译器配置界面,如图1、图2、图3、图4所示,该界面可配置工程使用的编译工具链、编译类型、编译选项、编译指令、编译结果文件路径以及静态库等配置。

图 1 编译器配置界面-1

图 2 编译器配置界面-2

图 3 编译器配置界面-3

图 4 编译器配置界面-4

  • 编译链:编译所使用的工具链。

  • 手动选择工具链:若不想使用工具自带的工具链,可以手动选择本地已安装的其他版本工具链(路径不能包含中文和空格)。

  • 指定链接器使用工具链中的C库:指定链接器使用工具链中的C库。

  • 指定编译器使用工具链中的C库:指定编译器使用工具链中的C库。

  • 编译类型:分debug和release。

    • debug会生成调试符号表打包到镜像中,方便调试。

    • release不会生成调试符号表,减少镜像大小,用于生产。

  • 浮点常数类型:分float和double。

    • float可以提高程序的运行速度,但是可能会导致精度损失,因为单精度浮点数只能表示有限的数字范围和精度。

    • double可以提升浮点运算的计算精度,但是会占用更大的内存空间,也会增加耗时。

  • 生成CRC:用于控制编译时是否会在“target.bin”和“target.hex”末尾插入CRC算法计算的结果。

  • 生成校验和(使用CRC32算法):不在可执行文件中插入CRC算法计算结果,而是将结果保存在同级目录下的“checksum_list.txt”中,并在编译过程中打印出来。

  • 生成符号表文件(target.symbol):可在编译后通过“out/bin”目录下的“target.elf”文件生成“target.symbol”符号表文件,文件位于“out/bin”目录下。

  • 生成allinone.bin:只会出现在306xH系列的MCU上,用于控制编译时是否会生成“allinone.bin”。

  • 生成target.hex:用于控制编译时是否会生成“target.hex”。

  • 为Live Watch解析elf文件:用于控制编译时是否会解析elf中的全局变量,解析的结果会在调试功能的Live Watch中使用。

  • 开启编译问题分析功能:用于控制编译是否开启编译问题分析功能。

  • 为工程分析生成analyzerJson:用于控制编译时是否会静态分析工程,分析的结果会用于栈分析和镜像分析。

  • 镜像填充。

    • no:无填充。

    • 0:多余空间填0。

    • 1:多余空间填1。

  • 编译优化等级:编译优化选项。

    • O0:不做优化,源码与二进制代码对应性最好,适合调试场景。

    • Os:优化空间占用,适合Flash空间小的生产发布场景。

    • O1~3:优化运行性能,O1、O2、O3优化等级依次增强,适合需提升运行性能的生产发布场景。

  • 开启栈保护功能(会增加内存、闪存的占用)。

  • 告警当错误处理。

  • 隐式函数声明当错误处理。

  • 显示告警信息。

    • 对未使用的函数不告警:忽略声明但未使用的静态函数发出的警告。

    • 对未使用的标签不告警:忽略声明但未使用的标签发出的警告。

    • 对未使用的参数不告警:忽略声明但未使用的参数发出的警告。

    • 对未使用的变量不告警:忽略声明但未使用的变量发出的警告。

    • 对函数缺少原型声明不告警:忽略函数使用前未声明产生的警告。

  • 是否生成静态库:若选中,所选文件会编译生成静态库文件;若不选中,则不会在编译时生成静态库文件。

    • 静态库名

      输入静态库的名字,如“demo”,编译之后会在“out\libs”目录下生成“lib_demo_.a”。

    • 静态库源文件

      选择想要编译成静态库的文件或者文件夹。

    • 静态库依赖头文件

      选择编译静态库需要依赖的头文件,支持文件和文件夹。

  • 外部静态库路径。

    配置参与编译的外部静态库文件(不在本工程目录下)。

  • 外部静态库依赖。

    配置参与编译的外部静态库依赖头文件(不在本工程目录下)。

  • 全局宏定义。

    配置在整个工程中都有效的宏定义。

  • 编译前执行。

    自定义1~2条指令,被勾选的指令将在编译前执行。命令中可以使用内置变量:$P(当前工程路径)。

  • 编译后执行。

    自定义1~2条指令,被勾选的指令将在编译后执行。命令中可以使用内置变量:$P(当前工程路径)。

    修改配置之后会自动保存并生效。文本输入框中的修改会在失焦时自动保存并生效。 3071芯片不支持O3编译优化等级。

调试器配置

单击工程配置界面左侧“调试器”页签进入调试器配置界面,如图1所示,该界面支持配置工程调试客户端、调试工具以及调试工具对应的参数。

图 1 调试器配置界面

  • Elf文件:指定待调试Elf文件路径,用于镜像分析、栈分析、变量监控和调试。

  • 调试客户端:选择调试客户端,默认是gdb。

  • 调试工具:选择调试器。

    • HiSpark-Trace:选择HiSpark-Trace调试器。

    • HiSpark-Link:选择HiSpark-Link调试器。

    • HiSparkLinkPro:选择HiSparkLinkPro调试器。

    • JLink:选择JLink调试器。

      当调试器选择JLink时会要求配置JLinkGDBServerCL路径,该路径位于jlink驱动的安装路径下。

      图 2 JLinkGDBServerCL默认路径

  • JLinkScript路径:配置JLink启动脚本,用于连接HiSpark Studio工具和芯片内核。

  • 调试接口:选择调试器的连接模式jtag或swd,默认配置成swd。

  • 调试速率:配置调试器速率,单位:MHz或kHz。

  • 加载超时(秒):调试选择launch模式,会先将镜像加载到MCU中,选择一个加载时间,如果加载超时会自动退出调试。

  • 使用HiSpark-Link时需要安装HiSpark-Link驱动,详情请参见《HiSpark调试器系列 使用指南》。

  • 使用JLink时需要先安装JLink驱动。

  • 修改配置之后会自动保存并生效。

  • MCU系列工程支持HiSpark-Trace、HiSpark-Link和JLink调试方式。

  • 3071只支持HiSparkLinkPro调试器。

烧录器配置

单击工程配置界面左侧“程序加载”页签进入程序加载配置界面,如图1所示,该界面支持配置烧录传输方式以及传输方式对应的参数。

图 1 程序加载配置界面

  • 传输方式:选择数据传输方式。选择不同的传输方式会出现不同的参数配置项。

    • swd:选择通过swd接口传输。如图2所示。

      • 调试板:选择调试器。默认选择“HiSpark-Trace”,可选“HiSpark-Link”、“HiSparkLinkPro”和“HiSpark-Trace”。

      • 频率:配置调试器速率,单位:MHz或kHz。

      图 2 选择swd配置界面

    • jtag:选择通过jtag接口传输。如图3所示。

      • 调试板:选择调试器。默认选择“HiSpark-Trace”,可选“HiSpark-Link”和“HiSpark-Trace”。

      • 频率:配置调试器速率,单位:MHz或kHz。

      图 3 选择jtag配置界面

    • serial:选择通过串口传输。如图4所示。

      • 端口

      • 波特率

      图 4 选择serial配置界面

    • usb:选择通过USB设备完成烧写升级。如图5所示。

      • Usb设备列表

        图 5 选择usb配置界面

      • 切换usb模式时,会修改默认烧写文件,且仅支持程序加载,不支持烧录配置。

        图 6 切换Usb模式不支持烧录配置

    • i2c:选择通过i2c接口传输。如图7所示。(当前i2c烧写模式仅3071芯片支持)

      • 调试板:选择调试器。仅支持选择“HiSparkLinkPro”。

      • 频率:配置调试器速率,单位:MHz或kHz。

        图 7 传输方式切换为i2c

      • 切换成i2c模式时,支持.hex格式和.bin格式的烧写文件,且默认为.hex格式。选取.hex类型的烧写文件时,仅支持程序加载,选取.bin类型的烧写文件时,支持程序加载和烧录配置。

        图 8 i2c模式下支持.hex和.bin文件烧写

  • 烧写文件:指定需要烧写的文件。

    MCU系列的工程“Bin文件”中为.bin文件,FBB系列的工程为.fwpkg文件。 SWD模式烧写时,3071芯片仅支持HiSparkLinkPro板,其它芯片支持HiSpark-Link和HiSpark-Trace板可选。 切换烧写模式时会自动更新当前模式下适配的默认频率(存在时)、默认烧写文件等内容。 3071选择i2c传输方式时,频率配置单位为kHz。

  • 烧录后复位:烧录完成后,会进行单板软复位。

  • 烧录后校验:烧录后,会将烧录文件进行回读对比,校验文件的完整性。

  • 使用HiSpark-Link时需要安装HiSpark-Link驱动,具体请参见《HiSpark调试器系列 使用指南》。

  • MCU系列芯片当前共支持swd、jtag、serial和i2c四种烧录方式;FBB系列芯片除BS20、BS20C、BS21、BS21A、BS21E、BS22、BS25和BS26支持serial和usb两种烧录方式外,其余芯片仅支持serial烧录。

  • 修改配置之后会自动保存并生效。

chipconfig配置

本章节主要介绍如何使用ChipConfig插件进行IP配置和代码生成。

功能介绍

芯片配置器提供图形化的PIN脚视图、组件视图,支持用户快速完成芯片的PIN脚设置和驱动模块参数设置并自动生成配置代码。

功能入口

打开工程后,单击工具栏中的“”选项,如图1所示。

图 1 芯片配置器入口

芯片配置器主界面

图 1 芯片配置器主界面

① 模块列表菜单区:提供了芯片所有可配置模块的列表,可以按字母排序也可按类别排序进行模块名查找。

② 模块视图区:提供了模块的Pin View管脚视图、Code Preview代码预览视图、Component View 组件视图,以图形化的方式实现模块的快速配置。

③ 模块参数区:提供了模块可配置的参数列表和pins列表。

不是所有驱动模块都存在图形化视图。芯片配置器支持的芯片系列参考表1。

模块列表菜单区详细介绍

图 1 模块列表菜单区

① 生成代码按钮。

② 模块列表菜单区驱动模块名称搜索框。

③ 模块列表排序方式,“类别” 代表按模块类别分类排序,“A->Z”代表模块名称按字母排序。

④ 模块未使能状态。

⑤ 模块已使能状态。

⑥ 驱动模块配置正确。

模块视图区详细介绍

模块视图操作菜单栏

图 1 模块视图操作菜单栏

  • :视图缩小操作按钮。

  • :当前视图缩放比例。

  • :视图放大操作按钮。

  • :重置放大比例到百分百。

  • :展开/折叠模块参数区。

视图切换操作栏

图 1 视图切换操作栏

  • :管脚视图。

  • :代码视图。

  • :图形化视图。

管脚视图介绍

图 1 管脚视图介绍

①:鼠标放在管脚上出现的悬浮提示信息,展示当前管脚可配置选项,打勾为配置值,单击“Reset State”可取消当前配置值,“Go to Details”进入该管脚复用的配置界面。

②:灰底白字代表管脚尚未配置。

③:绿色代表管脚已被配置。

④:灰底灰字代表管脚不可配置。

⑤:管脚当前配置值。

⑥:当前模块可配置的功能管脚。

管脚视图支持通过拖拽的方式查看被遮挡的管脚配置值。

Code Preview代码预览视图介绍

可以通过代码视图界面预览芯片配置器生成的所有代码。

图 1 Code Preview代码预览视图介绍

①:代码预览源文件切换。

②:自动生成的代码在电脑中的存储路径。

③:最新的代码修改提示,红色代表删除,绿色代表新增。

④ 代码展示区。

Component View图形化视图介绍

Component View提供驱动模块参数的图形化配置方式,方便用户理解和快速配置。

Component View中的参数与右侧的参数列表相对应。

图 1 Component View图形化视图介绍

图形化视图右侧的参数列表中的参数分为:

  • Parameters:详细参数配置。

  • Pins:管脚配置。

Component View配置内容跟随模块的变化而变化。

驱动模块配置举例(I2C)

使能I2C驱动模块

图 1 I2C驱动模块配置界面

①:展开模块列表菜单区。

②:模块开关。

配置驱动模块PIN脚

图 1 I2C驱动模块PIN脚配置

① 在Pin View视图中点击可以配置驱动模块的管脚(例如48号管脚)。

② 选中的“I2C0_SDA”。

图 2 更换I2C使能PIN脚

配置驱动模块参数

在Parameters模块参数区中,完成I2C驱动模块参数配置。

图 1 I2C驱动模块参数配置

预览I2C驱动模块配置代码

在Code Preview视图中预览自动生成的代码。

图 1 I2C驱动模块代码预览

生成驱动模块的代码

图 1 生成驱动模块代码

① 单击“Generate Code”生成代码。

② 弹出生成代码成功提示框,表示成功生成驱动模块代码。

样例配置举例(仅支持MCU系列芯片)

操作步骤

  1. 打开样例列表。

    在模块列表菜单区中选择“SAMPLE”。

    图 1 SAMPLE列表

  2. 搜索并选择“Motorcontrolsystem”。

    支持搜索“Sample”,在搜索框输入“Motor”,表格会过滤出所有类型中带有“Motor”的Sample用例,然后在表格视图中选择“Motorcontrolsystem Sample”。

    图 2 搜索并选择Motorcontrolsystem Sample

  3. 生成Sample代码。

    弹窗提示如下图所示,选择“确认”。

    图 3 弹出提示对话框

  4. 查看Sample的驱动模块配置。

    在模块列表菜单区可以看到Motorcontrolsystem Sample自动配置了所依赖的驱动模块。

    图 4 选择Motorcontrolsystem Sample结果

  5. 查看Sample自动生成的代码。

    在模块视图区选择代码视图查看生成的代码。

    图 5 代码预览界面

Clock配置(仅支持MCU系列芯片)

展开“系统核心”,单击“CLOCK”进入时钟控制器页面。

图 1 CLOCK时钟控制器界面

① 工具栏::调整缩放比例;:重置图片初始位置和大小;:恢复时钟设置到上一次生成代码时的状态。

② :可以修改的时钟值。

③ :固定的时钟值,不能被主动修改。

④ :选择输入的时钟源。

⑤ PLL时钟源,其中、、表示分频的系数,其余表示计算的时钟结果。

⑥ 警告:红色数字表示配置的时钟频率超过了MCU运行的范围,需要用户主动修改。

当Clock页面有警告存在时,用户无法生成代码。单击生成代码会出现如下图提示:

提示原因:红色数字表示该频率超出正常范围,需要用户主动将其修改至正常范围内。

LDS配置(仅支持MCU系列芯片)

展开“系统核心”,单击“LDS”进入LDS配置页面。

图 1 LDS配置界面

①:LDS菜单项。

②:LDS组件视图,展示当前MCU的内存分区视图。包括分区数量、分区命名、分区大小、起始地址、结束地址,总空间大小和剩余空间大小。用户可以修改分区的空间大小,生成“flash.lds”文件。

③:LDS配置信息。

  • RAM Reserve Data

    定义:固化变量地址。

    用法:使用RESERVED_DATA声明变量,例如,RESERVED_DATA unsigned int g_test1。

    图 2 使能RAM Reserve Data

  • RAM Code

    定义:将代码放到RAM中运行,让系统有更好的实时性。

    用法:选择需要放入RAM中的“.c文件”。

    图 3 使能RAM Code

  • RAM Code Path

    定义:选择需要放入RAM中的.c文件。需要勾选RAM Code之后才出现RAM Code Path。

    用法:勾选当前工程目录中的.c文件。

    图 4 选择需要放入RAM中的.c文件

APT主从配置(仅支持MCU系列芯片)

展开“定时器/事件”,单击“APT0”进入APT0配置页面。

图 1 APT主从配置界面

①:APT1开关。

②:设定为主配置项。

使能APT1,选择“Synchronous Mode”为Master,将APT1设定为主。

图 2 APT0设定为从

①:APT0开关。

②:设定为从配置项。

③:从APT1配置项。

使能APT0,选择“Synchronous Mode”为Slave(设定为从),选择“Synchronous Source Configuration”为APT1。APT0的某些配置项将复用APT1的配置项。

配置主从关系后,在代码预览视图中可以查看对应生成的代码。

图 3 主从配置代码-1

图 4 主从配置代码-2

配置主从关系后,复用项与主APT配置相同,不允许用户修改,仅显示。不被复用项,允许用户修改,可与主APT配置项不同。

复用配置项如图5、图6和图7所示。

图 5 复用配置项-1

图 6 复用配置项-2

图 7 复用配置项-3

不被复用配置项如图8、图9和图10所示。

图 8 不被复用配置项-1

图 9 不被复用配置项-2

图 10 不被复用配置项-3

中间件配置(仅支持MCU系列芯片)

中间件配置的作用是确定中间件代码是以静态库的形式还是以源码的形式放到工程中。默认是以静态库的形式。

需要配置时,展开“配置信息”,单击“MIDDLEWARE”进入配置界面。

图 1 Middleware中间件配置界面

进入“MIDDLEWARE 配置信息”界面,勾选列表中的选项后,点击“生成代码”按钮,工程目录中middleware文件夹下就会生成对应的中间件源码文件,如图2所示。

图 2 勾选电机控制库中间件

默认不勾选“是否拷贝源码”选项时,点击“生成代码按钮”,工程目录中middleware文件夹下就会生成对应的中间件静态库文件,如图3所示。

图 3 默认生成中间件的静态库文件

多核配置(仅支持3066H和3067M系列芯片)

多核工程支持以模块为维度,将生成的代码配置到用户所选的核工程中,具体视图如图1所示。当前模块提供三种配置模式:“仅支持单一核(不可修改)”、“核间互斥”以及“核间共享”。

图 1 多核模块分配视图

其中,仅支持单一核且不可修改的模块,如WWDG,界面无法被选用,仅作勾选展示,如图2。

图 2 单一核且不可修改

核间互斥的模块,如UART,仅支持勾选其中一个核,且至少勾选一个核,如图3。

图 3 核间互斥

核间共享的模块,如ADC,支持同时勾选多个核,如图4。

图 4 核间共享

其中,ADC模块不仅在多核模块分配视图中支持用户选择CPU,其配置界面也可以通过添加“CPU Config”选择框来实现。当用户在“CPU Config”中进行选择时,多核分配视图中对应ADC模块的CPU配置也会同步更新。同时,用户也可以在多核模块分配视图中单独配置ADC模块,两者之间为单向联动关系。如图5。

图 5 ADC的CPU配置联动

编译运行

编译按钮介绍

图 1 编译按钮

图1按钮依次是:清除、编译、重编译和停止编译按钮。

  • :单击触发工程清理,删除编译中间生成的文件。

  • :单击触发工程编译。

  • :单击触发先清理再编译。

  • :单击触发停止编译。

编译结果

单击“”按钮开始编译,编译成功后终端窗口输出如图1所示,且工程目录中生成out目录如图2所示。

MCU系列芯片编译成功后,工程目录中生成out目录。

图 1 编译成功

图 2 编译生成out目录

单击按钮开始清除编译生成的文件,成功后终端窗口输出如图3所示。工程清理会清除工程目录下的out文件夹。

图 3 清除工程编译成功

编译生成静态库

适用场景:希望将工程中的部分源文件打包生成静态库文件。

操作步骤

  1. 进入工程配置页面,找到“是否生成静态库”配置项。

    图 1 静态库配置

    使能“是否生成静态库”选项。如果不想生成静态库,可以通过这个选项再次关闭。

  2. 输入希望生成的静态库名,例如输入“demo”,最后生成静态库时会添加“lib”头和“.a”尾,生成“libdemo.a”。

    图 2 输入静态库名字

  3. 从当前工程文件中选择静态库的源文件所在的文件夹或文件,支持多选,工具会自动筛选出.c文件,选择完毕后单击完成。

    图 3 选择要生成静态库的源文件

  4. 从当前工程文件中选择编译静态依赖所需的头文件路径。支持选择文件夹或者文件,支持多选,工具会自动筛选出.h文件,选择完毕后单击完成。

    图 4 选择要生成静态库的头文件路径

  5. 单击“Rebuild”开始编译,编译成功之后在“out\libs”中生成静态库文件。

    图 5 静态库的生成路径

使用静态库参与编译

使用工程中的静态库文件

操作步骤

  1. 将out\libs路径下生成的自定义静态库对应的.a文件移至“thirdparty\sysroot\lib”路径下。

    不要在out\libs目录下放置.a文件,否则执行clean时会被清除。

  2. 将静态库对应的.h文件移至“thirdparty\sysroot\include”路径下。

  3. 在工程中包含对应的头文件,即可调用自定义静态库中的接口。

使用工程之外的静态库文件

操作步骤

  1. 在外部静态库路径处选择所引用的外部静态库.a文件的路径,在外部静态库依赖处选择对应静态库所依赖头文件的目录。

    图 1 外部静态库配置项

  2. 选择完毕后单击编译Rebuild,并在工程中包含该静态库依赖的头文件即可。

对单个文件或文件夹设置编译选项

“设置独立编译选项”功能仅支持MCU工程。

操作步骤

  1. 在资源管理器中对需要设置独立编译选项的.c文件或文件夹右键点击,在右键菜单中点击“设置独立编译选项“。

    图 1 设置独立编译选项入口

  2. 在弹出的界面中进行设置。

    图 2 独立编译参数设置界面

    ①:设置该文件或文件夹是否参与工程的编译。

    ②:编译选项设置。

    ③:恢复默认配置,默认配置来源于上一层文件夹的配置。

  3. 在界面中设置好参数后单击编译或重编译按钮进行编译即可。

软件包烧录

烧录功能只支持串口烧录。

连接烧录串口线

软件镜像烧录,使用串口通信协议,需要将运行HiSpark Studio的电脑和目标板用串口线连接,常见的串口线有标准的串口线和USB转串口线两种。如果使用USB转串口线,需提前安装USB转串口驱动。

图 1 烧录串口连接示意图

配置工程的烧录选项

操作步骤

  1. 配置好硬件环境。

    开发板设置好拨码开关后,请用串口线连接好电脑和待烧录开发板。

  2. 确定所连接的串口号。

    打开电脑的设备管理器,查看并记录串口线对应的串口号。

    图 1 串口选择

    如果使用USB转串口方式烧录,请安装USB转串口的驱动程序。

  3. 进入工程配置界面。

    打开要烧录的工程后,单击顶部的“”按钮,进入工程配置界面。

    图 2 工程配置入口

  4. 单击“程序加载”中的“传输方式”,默认选择“serial”串口传输,“Bin文件”中,会默认选择烧录的Bin文件,按步骤2选择端口号,波特率默认115200。

    图 3 串口烧录配置

    MCU系列的工程“Bin文件”中为.bin文件。

  5. 单击工具栏中的烧录按钮,开始执行烧写。

    图 4 烧录按钮入口

  6. 按提示复位设备,烧录成功后终端窗口输出如图5所示。

    图 5 烧录成功

烧录配置

本章节主要介绍支持选择性烧录bin文件的方法。使用此功能前如果编译成功则直接从本章节1开始,如果未编译,请参见“编译结果”章节进行编译,然后再根据本章节步骤进行操作。

烧录配置支持MCU工程,可导入.bin分区文件。

操作步骤

  1. 单击工具栏中的“程序加载”下拉三角框的“烧录配置”,进入烧录配置界面。

    图 1 烧录配置按钮及界面

  2. FBB分区文件默认为打包好的.fwpkg文件,或者单击“浏览”按钮从本地文件中选择打包好的.fwpkg文件。选择完成后,烧录工具会自动将.fwpkg文件中包含的bin内容列出。

    MCU分区文件默认为打包好的target.bin或者allinone.bin文件,或者单击“浏览”按钮从本地文件中选择打包好的.bin文件。其中target.bin仅包含名为target.bin的一列内容,allinone.bin包含loader.bin和target.bin两列内容。

    图 2 MCU烧录配置分区文件路径

  3. 勾选需要烧录的.bin文件。对于FBB和MCU工程而言,默认会勾选全部.bin文件,包含loader.bin或ssb.bin分区的行不支持编辑。而其它.bin文件可以根据烧写的需求勾选或者取消勾选。同时,MCU在执行swd或者jtag烧录时,不会烧录loader.bin文件,仅做展示用。该特殊处理在分区文件上方也有注释说明。

    图 3 FBB分区文件解析展示

    图 4 MCU分区文件解析展示(以target.bin为例)

  4. 烧录之前需要配置传输方式及其他参数信息,具体操作请参见“烧录器配置”章节。

  5. 单击“烧写”按钮,根据提示重启开发板,即可开始烧录。

    图 5 烧录

  6. 开始烧写后,在分区文件下方会显示出烧录进度条,方便查看烧录进度。烧录成功后会在界面显示“successfully”相关字样(不同芯片打印的具体内容会有所差异)。

    图 6 烧录进度

    图 7 烧写成功终端内容

jtag与swd烧录(仅支持MCU系列芯片)

连接烧录设备

连接好调试器与开发板,目前支持的调试器有HiSpark-Trace和HiSpark-Link两种。

四合一调试器有多个连接口,连接错误会导致烧录失败,注意检查。

配置工程的烧录选项

操作步骤

  1. 进入工程配置界面。

    打开要烧录的工程后,单击顶部的“”按钮,进入工程配置界面的“程序加载”页签,选择传输方式为“swd”或“jtag”并配置其他参数。

  2. 进行烧录器配置设置。

    图 1 烧录选项配置

  3. 单击烧录按钮“”或者“烧录配置”中的烧录按钮,即可开始烧录。

  4. 烧录成功后终端窗口输出如图2所示。

    图 2 烧录成功

i2c烧录(仅支持MCU的3071芯片)

连接烧录设置

软件镜像烧录,使用i2c通信协议,需要将运行HiSpark Studio的电脑和目标板用i2c线连接。连接好调试器与开发板,目前支持的调试器有HiSparkLinkPro。

HiSparkLinkPro调试器有多个连接口,连接错误会导致烧录失败,注意检查。

配置工程的烧录选项

操作步骤

  1. 进入工程配置界面。

    打开要烧录的工程后,单击顶部的“”按钮,进入工程配置界面的“程序加载”页签,选择传输方式为“i2c”并配置其他参数。

  2. 进行烧录器配置设置。

    图 1 烧录选项配置

  3. 单击烧录按钮“”或者“烧录配置”中的烧录按钮,即可开始烧录。

  4. 烧录成功后终端窗口输出如图2所示。

    图 2 烧录成功

栈分析和镜像分析

HiSpark Studio集成了Stack Analysis栈分析工具和Image Analysis镜像分析工具,用于分析开发过程中的内存不足、内存溢出等问题,帮助开发者更加精准地分析定位问题。

  • Stack Analysis栈分析工具是基于静态二进制分析手段,提供任务栈开销估算值和函数调用关系图示,为栈内存使用、分析、优化和问题定位等开发场景提供较为准确的静态内存分析数据参考。

  • Image Analysis镜像分析工具对工程构建出的.elf文件进行内存占用分析,支持开发者快速评估内存段、符号表使用情况。

  • 栈分析

  • 镜像分析

栈分析

功能介绍

栈分析工具基于静态二进制分析手段,提供任务栈开销估算值和函数调用关系图示,为栈内存使用、分析、优化和问题定位等开发场景提供较为准确的静态内存分析数据参考。

功能入口

创建工程并成功编译后,单击工具栏中“”按钮进行栈分析。

栈分析功能页面

栈分析结果按照函数列表和调用关系进行展示。如图1所示,功能列表页面展示每个函数的名称、内部栈开销和位置信息,其中内部栈开销单位为Byte,支持关键字搜索和排序功能。

图 1 功能列表页面

调用关系界面如图2所示,显示每个函数的调用关系,包括函数名称、调用深度、函数最大栈开销和内部栈开销,支持关键字搜索和排序功能。

图 2 调用图页面

统计项说明

  • 最大开销:为当前函数所有子函数中最大栈开销与循环次数的乘积,再加上自身开销。

    计算公式:max(子函数1的自身栈开销,子函数2的自身栈开销,子函数3的自身栈开销,…) × 循环次数+函数的自身栈开销

  • 本地开销:当前函数的自身栈开销。

  • 深度:当前函数每增加一层子函数,深度增加一层。

镜像分析

功能介绍

镜像分析工具通过分析.elf文件,图形化展示RAM和ROM的使用情况。对于资源有限的微控制单元(MCU),可以及早发现镜像超出MCU资源限制的情况。对于资源相对宽裕的MCU,方便合理规划镜像大小,提升产品性能。

功能入口

创建工程并成功编译后,单击工具栏中的“”按钮。

功能界面

内存区域页面(如图1所示)评估分析工程对内存的细分使用情况。例如WS63,显示的内存区域region包含RAM、SRAM、ITCM等,展示的信息包含每个内存区域的名称、起始内存地址、结束内存地址、总大小、空闲大小、已用大小以及使用比例,支持关键字搜索和排序功能,如图1所示。

图 1 内存区域页面

内存详细信息页面(如图2所示)展示每个内存区域包含的内存段section和内存段包含的symbol的详细信息。比如FLASH下面包含.text、.entry、.data等内存段,内存段又包含分配在该段的程序符号,支持关键字搜索和排序功能。

每一行展示的信息包含运行地址VMA(Virtual Memory Address,表示程序运行时的内存地址)、装载地址LMA(Load Memory Address,表示程序装载的内存地址)、内存段/符号的大小。

图 2 内存详细信息页面

文件大小页面(如图3所示)展示每个链接进来的.o文件占用了哪块内存的空间以及占用空间的大小,支持关键字搜索和排序功能。

图 3 文件大小页面

模块大小页面(如图4所示)展示了模块和组件的层级关系以及不同模块的内存占用,支持关键字搜索和排序功能。

图 4 模块大小页面

文件夹大小页面(如图5所示)展示了不同文件夹下面模块的内存占用,支持关键字搜索和排序功能,支持导出Excel。

图 5 文件夹大小

工程调试

调试配置选项

使用调试功能时,编译.elf需要使用O0编译选项,并且需要明确工程中可供用户调试的文件路径。 调试配置选项中的JLinkGDBServerCL驱动需要在JLink官网下载,官网地址: https://www.segger.com/products/debug-probes/j-link/models/j-link-base/

操作步骤

  1. 选择要调试的工程:在IDE主界面中,选择要调试的工程,打开“工程配置”。

  2. 修改调试选项,选择对应的调试器。具体请参见“调试器配置”章节。

    图 1 修改调试选项

启动调试

操作步骤

  1. 单击IDE工具栏启动调试按钮“”右侧的下拉箭头选择需要的调试模式,如果是多工程场景,需要先配置活动工程,再启动调试。

  2. 单击启动调试按钮“”。

  3. 启动调试。调试成功示例如下图,若出现下列提示信息与工具栏调试图标,则说明已经成功启动调试。

    图 1 调试成功后提示信息、调试图标及调试界面

常用调试功能

调试页面

调试工作界面如图1所示,主要由以下3个部分组成:

图 1 调试工作界面

① 调试侧边栏

② 调试功能区

③ 调试控制台

调试侧边栏

调试侧边栏集合了调试常用功能,包括变量、监视、调用堆栈、断点、查看外设寄存器、查看内存地址数据、查看反汇编。

调试功能区

启动调试功能后,当代码执行到设置的断点时,程序会暂停,可以根据调试功能区的按钮进行代码的调试。

图 1 调试图标

  • :重启设备。

  • :继续运行(“F5”),当程序执行到断点时停止执行,单击此按钮程序继续执行。

  • :切换实时模式,禁用断点功能。

  • :单步跳过(“F10”),在单步调试时,直接前进到下一行(如果在函数中存在子函数时,不会进入子函数内单步执行,而是将整个子函数当作一步执行)。

  • :单步执行(“F11”),在单步调试时,遇到子函数后,进入子函数并继续单步执行。

  • :单步跳出(“Shift+F11”),在单步调试执行到子函数内时,单击单步跳出会执行完子函数剩余部分,并跳出返回到上一层函数。

  • :重启调试(“Ctrl+Shift+F5”),重新启动调试。

  • :停止调试(“Shift+F5”),停止调试任务,断开连接。

  • :内存窗口,查看对应内存地址的值。

调试控制台

调试控制台用来输出调试时的打印信息,也可以输入命令与调试器交互。

  • 变量查看

    当运行到断点处暂停时,可以在变量界面查看变量的当前值。

    图 1 查看变量当前值

    支持如下4种变量类型:

    • 局部变量

    • 全局变量(可能会被编译器优化,可以使用关键字volatile来规避此问题。)

    • 静态变量(可能会被编译器优化,可以使用关键字volatile来规避此问题。)

    • 寄存器

  • 监视功能

    在调试过程中,可以通过“监视”查看变量(包括局部变量、全局变量以及静态变量)和特定地址的取值来判断程序的运算结果是否有误。

    图 2 监视功能

  • 查看调用栈

    在调试过程中,可以通过查看调用栈来分析主程序调用的各子程序的调用关系,如下图所示。

    图 3 调用堆栈功能

  • 管理函数断点

    插入函数断点的多种方法如下:

    • 用侧边栏的“断点”功能手动添加函数断点,单击左侧断点一栏右上角的+号,在文本框中输入要设置断点的函数名。

    • 用鼠标单击代码编辑区代码行最左侧的位置(图片中红色圆点处),单击后出现红色圆点表示添加断点成功。

    • 使用快捷键“F9”添加、删除断点。

    • 在断点菜单下使能、去使能、添加和删除断点。

    图 4 管理函数断点

  • 查看反汇编

    在调试过程中,通过查看反汇编,可以确认代码的汇编实现,从而快速进行代码检查。在代码界面中单击鼠标右键,选择“打开反汇编视图”功能即可进入代码的汇编视图,如图5所示。也可以在右侧调试窗口的“反汇编”面板中,选择“在反汇编窗口中显示源代码”选项,打开或关闭源代码显示,如图6所示。

    图 5 查看反汇编

    图 6 显示或关闭反汇编源代码

    ----结束

变量跟踪功能

单击工具栏中的变量跟踪图标,如图1所示,可以打开VariableTrace工具,用于实时分析和可视化微控制器单板程序数据。在目标板程序运行过程中,变量监控器可对程序的全局和静态变量的数值进行实时读取和修改,可视化变量变化趋势,提高程序开发调试效率。具体请参见《VariableTrace 使用指南》。

图 1 变量跟踪功能入口

变量跟踪功能仅支持MCU系列工程。

常用调试命令

工程启动调试后,在调试控制台(debug console)中输入调试命令。

  • info files:查看.elf文件内容信息。

    图 1 info files

  • 断点操作

    info b:查看断点信息。

    b main:设置停在main函数的断点。

    delete breakpoints:删除所有断点。

    delete breakpoints id:删除编号为id的断点。

    disable/enable breakpoints id:禁用/启用断点。

    图 2 断点操作

  • continue:继续执行到下一个断点,可简写为cont/c。

  • list:查看代码。

  • next:单步调试。

  • bt:列出调用栈。

    图 3 bt指令执行结果

  • monitor mdw [addr] :读内存(mdw/mdd/mdh/mdb都是读命令,长度分别为:2Byte(8位)/Byte(4位)/半Byte(2位)/bit(1位))。

    图 4 读内存

  • monitor mww [addr value] :写内存(mww/mwd/mwh/mwb都是写命令,长度分别为:2Byte(8位)/Byte(4位)/半Byte(2位)/bit(1位))。

    图 5 写内存

  • p var_:打印变量值。

    图 6 打印变量值

断点(BREAKPOINTS)

函数断点

插入函数断点有多种方法:

  • 用鼠标单击代码编辑区代码行最左侧的位置。

  • 用侧边栏的“断点”功能手动添加断点函数。

  • 使用快捷键“F9”。

    可以在断点菜单下使能、去使能、添加和删除断点。

    图 1 断点管理示意图

    电机运行时,接入调试器前,请确保目标板程序已开启APT调试保护功能,否则会有硬件损坏的风险。

条件断点

在代码函数所在行的最左侧,单击鼠标右键选择“添加条件断点”,然后输入断点的条件和进入次数即可,如图2所示。条件断点是指通过某个表达式是否成立作为条件,从而决定自身是否生效的断点,添加表达式如图3所示。

图 2 条件断点

图 3 添加表达式

内联断点

将鼠标放到要打断点的函数,然后单击鼠标右键选择“添加内联断点”,或者使用快捷键“Shift+F9”,如图4所示。内联断点可以精确地将断点打到一个代码语句中的某个代码片段上。

图 4 内联断点

变量(VARIABLES)

当运行到断点处暂停时,可以在变量界面查看变量值的变化,如图1所示。

图 1 运行到断点处查看变量

支持4种变量类型:

  • 局部变量。

  • 全局变量(可能会被编译器优化,可以在编码时使用关键字volatile来规避此问题)。

  • 静态变量(可能会被编译器优化,可以在编码时使用关键字volatile来规避此问题)。

  • RISC-V寄存器。

监视(WATCH)

在调试过程中,可以通过“监视”查看变量(包括局部变量、全局变量以及静态变量)的取值来判断程序的运算结果是否有误,从而快速进行代码检查。

同时,也可以通过“监视”功能来监控指定的变量信息,单击图标来添加变量,如图1所示。

图 1 监视功能视图

操作步骤

  1. 单击变量添加按钮。

  2. 输入要监视的变量名。

可以通过右键菜单来添加变量到监视中。

图 2 右键菜单

操作步骤

  1. 左键选中变量,右键打开菜单。

  2. 选择“添加到监视”。

添加变量成功后,在暂停调试的状态下,即可以看到变量的当前值。如图3所示。

图 3 监视的结果

性能分析功能

操作步骤

  1. 添加性能标记起点和终点(当前仅支持一组),可以手动输入或在右键菜单中单击“添加性能分析标记起点”,如图1所示。

    图 1 添加性能标记起点、终点

    图 2 性能标记代码

  2. 单击编译(工程配置要打开livewatch开关和性能分析开关,如图3所示),编译通过后启动调试。

    图 3 livewatch开关和性能分析

  3. 单击调试视图(默认在右侧边栏)下的实时监视Treeview的“打开实时监视窗口”按钮。在弹出的webview中点击性能分析Tab页,如图4所示。

    图 4 启动性能分析监测

  4. 查看性能分析页面的分析结果,如图5所示。

    图 5 性能分析结果

livewatch等界面会默认隐藏,当启动调试时才会加载。

查看和修改外设寄存器(PERIPHERALS)

在调试过程中,可以查看/修改MCU的外设寄存器。

查看外设模块列表

MCU外设模块以“外设模块名称 @ 基址”的形式显示。例如:ACMP0 @ 0x18300000。

MCU外设模块名称:按MCU外设模块名称+外设模块索引进行显示。例如:ACMP0表示索引为0的ACMP。

基址:以16进制数的形式表示该外设模块的寄存器基址。

查看外设寄存器

单击MCU外设模块的名称,会展开该模块对应的寄存器清单,显示寄存器名称、寄存器偏移地址、寄存器数值。如图1所示。

图 1 查看MCU外设模块的寄存器清单

查看外设寄存器字段列表

单击寄存器名称,会展开显示该寄存器对应的字段信息,包括字段名称、位域范围,如图1所示。

图 1 查看寄存器的字段列表

查看寄存器字段的详细描述

将鼠标悬浮在字段名称上,会显示该字段的详细描述,包括所属寄存器地址、位域范围、读写权限、Reset值和字段描述,如图1所示。读写权限包括Read-Write(默认不显示)、Read-Only和Write-Only。

图 1 寄存器字段的详细描述

查看寄存器的最新数值

按照以下步骤可以查看寄存器的最新数值:

操作步骤

  1. 展开外设模块的寄存器清单。

  2. 选择需要查看的寄存器或寄存器字段。

  3. 单击刷新按钮。

图 1 查看寄存器最新数值

修改寄存器和字段值

单击寄存器或域右侧的笔形图标,可以修改寄存器或域的数值。如图1所示。

只有可写的寄存器域才能修改生效,包括Read-Write和Write-Only。Write-Only可能观察不到修改结果。

图 1 修改寄存器以及寄存器域

操作步骤

  1. 点击“更新值”按钮。

  2. 在弹出的输入框中输入要设置的值,按“Enter”确认,按“Esc”取消。

注意事项

查看和修改外设寄存器,必须先确认MCU外设模块的时钟已处于使能状态。例如:对于CAN模块,如果未使能时钟就读写CAN寄存器,会导致CPU运行异常。

通过如下两种方式使能外设时钟:

  • 通过芯片配置器(Chip Config)使能MCU外设模块。

    1. 单击MCU外设模块名称后的开关按钮。

    2. 单击“生成代码”按钮,HiSpark-Studio会自动生成该IP的初始化代码。

    3. 将生成的代码编译并加载到目标板,让目标板重新运行。

  • 直接在“外设寄存器”修改CRG时钟对应IP的时钟使能置1,同时将复位值置0。具体修改寄存器值的方式可以参考修改寄存器和字段值章节。以使能UART1为例,需要将时钟使能(uart1_cken)置1,将时钟复位(uart1_srst_req)置0。如图1所示。

    图 1 使能外设的时钟

查看调用栈(CALL STACK)

在调试暂停时,可以通过查看调用栈来分析主程序调用的各子程序的调用关系,从而快速进行代码检查,如图1所示。

图 1 调用堆栈视图

实时监视(Live Watch) 调试功能

功能介绍

  • 使用HiSpark-Trace调试器。

  • 监控对象为静态或全局变量。

  • 支持监控静态变量或全局变量,变量数据类型支持char、unsigned char、short、unsigned short、int、unsigned int、long、unsigned long、float、double、long long、unsigned long long、bool、枚举、结构体、联合体、指针、数组、位域等类型。

  • 支持动态刷新变量的数值,刷新频率可配置(Off、1Hz、2Hz或5Hz),以红色字体标识数值的变化。

  • 支持实时修改变量的数值。

  • 支持设置数值的默认显示进制,包含二进制、八进制、十进制、十六进制。

  • 支持对变量进行单独设置数值的显示进制,包含二进制、八进制、十进制、十六进制。

  • 支持变量列表的导入/导出。

实时监视(Live Watch) UI 界面

实时监视主界面如图1所示,包含调试命令按钮条、加载变量列表按钮、变量列表区和新增监控变量输入框。

图 1 实时监视 UI 界面

①:调试命令按钮条。

②:加载变量列表按钮。

③:监控变量列表区。

④:新增监控变量输入框。

调试命令按钮条

调试命令按钮可控制目标板程序的启动/停止、复位。

监控变量列表区

变量表的每一列显示每个变量的相关数据,包括变量名、值、地址和类型:

  • 变量名:变量名,双击该格可实现输入并更改变量名(输入值后,回车确认)。

  • 值:变量的值,双击该格可实现输入并更改变量的值(输入值后,回车确认)。

  • 地址:变量的十六进制地址。

  • 类型:变量的数据类型。

右键菜单

在变量区单击右键,可以触发右键菜单,如图2所示。

图 2 右键菜单

  • 删除:删除所选单个变量。

  • 全部删除:删除全部监控的变量。

  • 默认进制设置:设置默认进制(默认为十进制)。

  • 默认进制:以默认进制显示。

  • 二进制:以二进制显示。

  • 八进制:以八进制显示。

  • 十进制:以十进制显示(默认)。

  • 十六进制:以十六进制显示。

  • 刷新率:设置刷新率(默认为2Hz)。

  • 精简模式:启用后变量列表区不显示地址和类型列。

  • 保存到文件:文件另存为(变量列表文件)。

实时监视(Live Watch)的使用

启动调试功能后,通过单击“实时监视->打开实时监视窗口”启动实时监视。当出现实时监视界面时,表示启动成功。如图1所示。

图 1 实时监视 启动步骤

输入框添加变量

在实时监视界面中,单击“点击添加”,输入变量名添加变量,如图2所示。

图 2 变量监视列表

①:添加父节点时,只输入父节点名(例如structTest),子节点也会出现。

②:添加嵌套子节点时,通过“父节点.子节点”的形式添加(例如unionNumt.strNum)。

③:添加单个变量时(例如intNum)。

右键菜单添加变量Add to Live Watch

支持在代码源文件编辑区界面中,通过鼠标右键菜单的“添加到 Live Watch窗口”添加变量,如图3所示。

图 3 右键菜单添加到 Live Watch窗口

①:当光标有框选内容时,将框选内容作为变量名添加到变量列表区。

②:当光标没有框选内容,直接单击鼠标右键添加,会就近自动识别变量名,添加到变量列表区。

查看变量数值

实时监视界面会在“值”列显示变量的数值。

图 4 启动程序以查看变量数值

当目标板程序运行后,变量的数据在“值”列显示(如图5所示),并以红色字体方式标识数值发生了变化,如图6所示。

图 5 程序已运行并在“值”列显示变量数值

图 6 变量数值发生变化时会变成红色字体

修改变量数值

在Live Watch界面单击“值”列,修改变量的数值。当输入非法值,会有错误提示,按下回车键会维持旧值。

图 7 修改变量数值

设置默认显示进制

默认显示进制为十进制,在右键菜单“默认进制设置”的二级菜单(如图8中的①),选择一个进制(如图8中的②),所有未单独设置进制的变量会按新设置的默认进制显示。

图 8 设置默认显示进制

单独设置变量的显示进制

右键单击一个变量,在弹出的右键菜单中,选择一个进制(如图9中的②,单击二进制),图9中①的value值位置会切换成设置的进制进行显示。

图 9 单独设置变量的显示进制

变量列表的导出(右键)

在变量列表区单击右键菜单,导出变量列表,如图10和图11所示。导出的文件内容包含变量名及其对应的单独进制显示设置。

图 10 通过在右键菜单导出变量列表

图 11 保存为csv文件

变量列表的加载

单击右上角加载图标(Load From File)。

图 12 单击加载图标

选择要导入的列表文件后,选择打开即可。导入的内容会包含之前导出的变量及其对应的单独进制显示设置。

图 13 选择导入csv列表文件

内存窗口(MEMORY)

在调试过程中,通过查看对应的内存地址,获取内存地址中的取值,可以准确分析代码中各变量的取值及存储状态,从而快速进行代码检查。

图 1 查看内存入口

操作步骤

  1. 单击“打开内存窗口”,开启内存窗口界面。

  2. 输入寄存器的地址和长度,单击“跳转”即可。

    例如,在内存窗口中输入对应的开始地址(如:0x300000)和地址长度(0x128),即可查看对应的内存信息。

    内存信息展示如图2所示。

    图 2 内存信息

    单击可以设置字节大小、每行分组和字节顺序。

    图 3 Settings页面

    • 字节大小:设置按照 1Byte、2Byte或4Byte读取数据,默认是1Byte。

    • 每行分组:设置每行内存展示的组数,有4组、8组或16组三种展示,默认是16组。

    • 字节顺序:设置字节序为大端还是小端,默认为小端。

    需要刷新值的时候,需先暂停程序,然后再次单击“跳转”。

内存断点

在内存窗口中,右键数值点击“值读取时中断”、“值更改时中断”、“值访问时中断”可添加此类断点。

图 1 内存断点

反汇编(DISASSEMBLY)

在调试过程中,通过查看反汇编,可以确认代码的汇编实现,从而快速进行代码检查。

在代码界面中单击鼠标右键->选择“打开反汇编视图(Open Disassembly View)”功能即可进入代码的汇编视图,如图1所示。

图 1 反汇编查看入口

反汇编视图如图2所示。

图 2 反汇编视图

实时模式

启动调试后会出现“开启实时模式”图标(如图1所示),单击该图标则会切换为“关闭实时模式”图标(如图2所示)。在实时模式下调试时,无法添加断点,且调试的暂停运行功能失效。

图 1 开启实时模式图标位置

图 2 关闭实时模式图标位置

打开实时模式前需先清除所有已添加的断点。

HiSparkLinkPro(仅支持3071)

如图1、图2所示,创建工程之后,在调试工具的选项框中选择HiSparkLinkPro,然后点击调试按钮启动调试,与JLink的调试方式一致。

图 1 选择HiSparkLinkPro

图 2 启动调试

串口控制台工具

本章节主要介绍HiSpark Studio中关于串口操作的工具监视器(Monitor)。主要功能包括显示串口列表、连接串口、断开串口连接、接收串口消息、给串口发送消息、清空串口输出区、开启/关闭屏幕自动滚动等。

串口工具以“\r\n”作为每行的分隔符,所以要求被打印的每行字符串都要以“\r\n”结尾,否则可能会出现程序结尾打印丢失的情况。

打开监视器

打开HiSpark Studio终端,找到终端区域、切换到“监视器”选项卡,如图1所示。

图 1 切换到“监视器”选项卡

图 2 监视器界面介绍

  • ①:串口配置区

    端口:显示当前电脑所连接的串口设备,单击“”按钮刷新串口列表。

    波特率:选择串口波特率,范围:300~250000。

    行尾:当给串口发送消息时,工具会根据此选项自动添加字符。

    • CRLF代表“\r\n”。

    • CR代表“\r”。

    • LF代表“\n”。

  • ②:功能按钮区

    :连接串口按钮。连接串口后,按钮状态会变为,单击此按钮会断开串口连接。

    :时间戳按钮。开启时会在每行输出前加上时间戳显示,如果按钮处于关闭状态则不显示时间戳,如图3所示。

    图 3 时间戳设置效果示例

    :隐藏输入框,隐藏/显示输入框界面如图4、图5所示。

    图 4 显示输入框

    图 5 隐藏输入框

    :开启/关闭屏幕自动滚动。

    :清空输出区。

    :最大化面板。

    :关闭面板

  • ③:输出区。

  • ④:输入区。

  • ⑤:发送消息按钮,单击该按钮或按回车键即可将输入区内容发送给串口,默认编码为UTF-8。

连接串口

单击“”即可连接串口。连接串口前,输入区默认处于未激活状态(不可输入、不可点击);连接串口后,输入区变为激活状态,串口配置区的监视模式选项变为未激活状态。

图 1 开始监视功能

查看消息

在输出区可以查看串口发送的消息。

图 1 查看串口消息

发送消息

在输入区输入消息后,单击发送按钮或按回车键发送消息。

图 1 发送消息

断开连接

单击“”按钮断开串口连接。

图 1 停止监视

扩展工具使用

扩展工具主要用于添加一些用户常用的命令,添加后单击名称即可发送命令。扩展工具在出厂时添加了一些常用命令,如果用户用不到这些命令,可以选择清空表格,然后手动添加所需命令,或通过excel表格导入方式进行添加。除此之外,扩展工具还有循环发送功能,在后面章节中会详细介绍。

  • 打开扩展工具。单击扩展按钮,会在右侧展开扩展页面。

    图 1 扩展工具

    单击此按钮可最大化面板。

    图 2 监视器面板最大化按钮

  • 单击清空列表按钮可清空列表。

    图 3 清空列表功能

    如果清空出厂表格后需要恢复,可导入安装目录下“HiSpark Studio\resources\app\extensions\huawei.cfbbserialcom-x.x.x\resources\excelFile“下的“rawData.xlsx”表格。

  • 手动新增命令行。单击“增加一行”按钮。

    图 4 增加一行功能

    添加数据规则:

    数据格式:下拉框模式,下拉选项有utf8、bin、hex。

    命令:发送给串口的命令字符串。

    名称:用于识别命令的字符串。单击此按钮可立即发送命令给串口(前提是工具处于监听状态)。

    顺序:在使用循环发送功能时,顺序大于0,才会进行循环发送。如果有多个命令的顺序大于0,并且数值一样,则按照由上到下的顺序发送。

    延时发送:先发送一次,再进行延时,单位:ms。

    操作:有编辑和删除两个选项,单击编辑可对命令行进行修改,单击删除可删除命令行。

  • 批量添加命令。

    1. 下载导入模板。导入模板会自动保存到安装目录下“HiSpark Studio\resources\app\extensions\huawei.cfbbserialcom-x.x.x\resources\excelFile\importResults.xlsx”。

      图 5 下载导入模板功能

      导入模板中会显示需要导入的列,以及每个列的规则。

      图 6 导入模板

    2. 填写导入模板。

      图 7 填写导入模板

    3. 导入“导入模板”文件。

      图 8 导入模板数据

    4. 查看导入数据。

      图 9 查看导入数据

    5. 查看导入结果表格。导入结果列会显示导入不成功的原因。

      图 10 查看导入结果

  • 循环发送。

    1. 设置顺序和延时。

      图 11 设置顺序和延时功能

      上图表格执行命令的顺序:

      首先,发送“起蓝牙”命令,延时1000ms;然后,发送“键盘模式”命令,延时1000ms;最后,发送“鼠标模式”命令,延时1000ms;结束。这是一个循环发送的周期,循环发送会不断重复这个周期。

      “修改蓝牙地址”命令并不会发送,因为它的顺序不大于0。

    2. 打开串口监听。

      图 12 串口监听功能

    3. 打开循环发送开关(发送的命令自带“回车换行”)。打开后,会在左侧输出栏看到发送的命令。

      图 13 循环发送功能

      红色字体表明正在发送此条命令或者正在延时。

AI应用调试指南

关于HiSpark Studio AI

HiSpark Studio AI是面向开发者提供的超轻量级AI应用开发平台,具备高集成、高专业、高易用等特征,聚焦嵌入式AI应用场景,提供模型压缩、模型转换、应用开发、端侧部署、性能调优的全流程开发平台。

  • 高集成

    • 一站式开发平台,支持模型压缩/转换/推理/部署/调试等功能。

    • 统一的IDE界面和API接口,支持CPU芯片AI应用开发和部署。

  • 高专业

    • 高效的模型压缩,支持ONNX等AI模型。

    • 超轻量的模型部署,支持KB级RAM嵌入式设备。

  • 高易用

    • 支持性能/精度可视化分析,方便调试。

  • 功能介绍

    HiSpark Studio AI功能架构如下图所示。具备核心功能有:

    • 导入ONNX等格式的AI模型,初始化开发环境。

    • 通过集成的CPU工具链可以进行模型压缩和转换。

    • 导入SDK并参考Sample进行用户AI应用开发。

    • 编译用户AI应用,烧录到嵌入式设备进行部署。

    • 根据串口日志检测性能精度是否达成目标。

    图 1 HiSpark Studio AI 功能架构

模型与数据获取

  1. 模型获取。

    进行模型量化,请点击Link,下载ONNX模型。

  2. 点击Link,下载数据和预处理脚本“preproc_mnist_data.py”。请参考文档,执行该脚本,进行数据获取。请确保文件夹内包含如下数据和文件。

    .
    |-- test_data
    |   `-- npy
    |       `-- sample_00000_7.npy
    |       `-- ......
    |       `-- sample_09999_6.npy
    |   `-- bin
    |       `-- sample_00000_7.bin
    |       `-- ......
    |       `-- sample_09999_6.bin
    |   `-- label.csv
    `-- train_data
    |   `-- bin
    |       `-- sample_00000_5.bin
    |       `-- ......
    |       `-- sample_59999_8.bin
    |   `-- label.csv
    

    test_data和train_data目录作为数据下载和预处理脚本的输入参数,会根据用户的输入而变化。

1. 工具栏操作

点击工具栏中的 HiSpark Studio AI 图标,打开 HiSpark Studio AI 功能面板。面板包含 "Home"(主页)、"Download Toolchain"(下载工具链)、"Offline Install Toolchain"(离线安装工具链)、"Select Local Toolchain"(选择本地工具链)选项,具体操作如下:

图 1 HiSpark Studio AI 图标

alt text

1.1 进入 HiSpark Studio AI 主页

点击 "Home",将进入 HiSpark Studio AI 的首页。

图 2 HiSpark Studio AI 首页

alt text

1.2 下载工具链

当PC端可访问外部网络时,可点击 "Download Toolchain" 在线下载工具链。

图 3 HiSpark Studio AI 下载工具链

alt text

1.3 离线安装工具链

当PC端无法访问外部网络时,可点击 "Offline Install Toolchain",选择已下载好的工具链离线包所在目录进行安装。

图 4 HiSpark Studio AI 离线安装工具链

alt text

1.4 选择本地工具链

当PC端无法访问外部网络时,可点击 "Select Local Toolchain" 选择本地已安装的工具链。

图 5 HiSpark Studio AI 选择本地工具链

alt text

2. 工程构建

2.1 新建工程

在进入 Home 页面后,点击 “新建工程”,进入新工程的创建页面。

图 1 HiSpark Studio AI 新建工程

alt text

在创建新工程的页面中,选择所需的芯片类型,并进行相应的配置。随后,输入新工程的名称,并选择相应的SDK 路径,最后点击 "完成" 按钮进行创建。工程类型支持多核工程和普通工程。

图 2 HiSpark Studio AI 配置工程芯片参数

alt text

图 3 HiSpark Studio AI 工程类型展示

alt text

图 4 HiSpark Studio AI 工程配置

alt text

新建工程导入页面的具体逻辑如下,参数详细配置如表1所示。

  1. 选择芯片为3066H下任意芯片,开发板与选择的芯片同名,工程类型选普通工程。

  2. 填写项目名称。

  3. 配置工程路径以及软件包。工程路径为工程文件的存放路径,可自由选择;一般情况下,软件包配置为已下载的SDK路径。

表 1 新建工程参数配置

参数

说明

芯片

AI部署工程SOC类型。

开发板

AI部署工程所用具体单板型号。

工程名

项目名称。

工程路径

工程配置相关文件存放路径。

软件包

SDK文件存放路径。

完成

完成新建文件。

取消

取消新建文件。

  1. 用户需要提前准备3066H SDK解压到指定目录,一级目录包含application、tools等文件夹。

  2. 通常情况下,用户将“软件包”和“工程路径”设置为相同路径即可。如果用户有将“.hiproj”等项目文件与SDK文件夹分开放置的需求,可以创建一个新的文件夹,专门用于放置项目文件,并单独配置到“工程路径”中。

2.2 导入现有工程

如果用户已经有工程文件,则可以在 “HiSpark Studio AI” 首页页面下点击 “导入工程” 跳转到工程导入页面。 在导入页面中,输入工程所在的路径,选择需要导入的工程后点击 "完成" 按钮。

图 5 HiSpark Studio AI 导入现有工程

alt text

2.3 通过历史记录打开工程

在 HiSpark Studio AI 插件首页的“工程列表”中,保存着用户曾打开过的工程记录。用户可以直接点击列表中对应工程后的 "打开" 按钮,重新打开历史工程。

图 6 HiSpark Studio AI 打开历史工程

alt text

工程列表中各参数的含义如表2所示。

表 2 工程列表参数说明

参数

说明

Name

工程名。

Path

工程文件所在路径。

Chip

芯片名。

Board

开发板。

Update Time

最近一次打开工程的时间。

Operation

操作列,包含"Open"和"Delete"两个按钮:点击"Open"打开工程,点击"Delete"删除工程。

3. 模型选择

3.1 选择模型文件

点击 Import Model 之后弹出窗口,点击 Choose files from local 按钮。

图 1 HiSpark Studio AI 准备选择模型

alt text

选择本地存放的模型文件。

图 2 HiSpark Studio AI 选择模型文件

alt text

3.2 历史模型选择

如果当前工程已经执行过模型选择操作,那么在 "History Files"(历史文件)中会显示之前使用的模型列表。用户可以直接点击对应模型后的 “Next” 按钮,继续对模型进行操作。

图 3 HiSpark Studio AI 选择历史模型

alt text

4. 量化Quantize

完成模型选择后点击 "Next",进入CPU量化界面。

图 1 HiSpark Studio AI 量化

alt text

量化参数的配置步骤如下:

  1. 在 "Quantized Data Type" 下拉框中选择模型量化的目标类型,目前仅支持int8。

  2. 在 "Quant Type" 下拉框中选择 "FULL_QUANT"。

  3. 在 "Calibration Inputs" 文件选择框中选择训练数据集目录,即包含.npy文件的文件夹。

  4. (可选)打开 "Validation" 开关。

  5. 在 "Validation Inputs" 文件选择框中选择验证集目录,即包含.npy文件的文件夹。

  6. 在 "Validation Labels" 下拉框中选择所需 "Outputs" 的 "Name",并在文件选择框中选择验证数据集的标签csv文件。

注:output maxsize为4KB,超出该值会被截断。请合理控制输入长度,以保证输出完整。

图 2 HiSpark Studio AI 量化配置参数

alt text

点击 "Quantize" 开始量化,量化成功后在 "Quantization Result History" 列表中显示量化结果。其中,"MSE" 与 "Cosine Similarity" 分别表示均方误差和平均余弦相似度,由原始浮点网络与量化后网络的推理结果计算得出;"Accuracy" 表示分类准确率,使用真值标签计算。

参数解释如表1所示。

表 1 量化参数配置

参数

说明

Quantized Data Type

数据量化的数据位数。目前仅支持8bit量化,权重或激活值会转换成int8类型来参与计算。

Quant Type

数量量化类型。目前仅支持全量化。

  • FULL_QUANT:支持量化的算子权重以及中间层张量会被同时量化为低精度。

Calibration Inputs

用户在该表格中输入量化的校准数据。表格中各列的含义如下所示:

  • Input Node:网络输入节点的名称。
  • Path:校准数据的目录。目录中存放和模型输入匹配的npy文件数据。若模型有多个输入,同一个校准样本的多个输入npy文件文件名必须保持一致。
  • Shape(不可配置):网络输入张量的形状。

Validation

使能验证开关。当开关打开时,验证数据集输入界面展开。

Validation Inputs

用户在该表格中输入量化评估网络的验证数据集。表格中各列的含义如下所示:

  • Input Node:网络输入节点的名称。
  • Path:验证数据的目录。目录中存放和模型输入匹配的npy文件数据。若模型有多个输入,同一个验证样本的多个输入npy文件文件名必须保持一致。

Validation Labels

使能开关打开后,输入含分类真值标签的csv表格文件。文件中各列的含义如下所示:

  • sample:验证样本的名称。
  • label:验证样本的标签值。

Quantize

开始量化按钮。

图 3 HiSpark Studio AI 量化结果

alt text

该窗口以表格的方式显示历史量化的结果。表头解释如表2所示。

表 2 历史压缩结果表头说明

项目

说明

Trail ID

网络量化结果的序号。

Model Name

网络的名称,以及模型大小和修改时间。

Accuracy

表示分类结果准确率,使用标签真值计算。

Cosine Similarity

余弦相似度,使用量化评估网络的输出和原始浮点网络的输出计算。

MSE

均方误差,使用量化评估网络的输出和原始浮点网络的输出计算。

RAM(KB)

上板AI相关RAM内存估计。

FLASH(KB)

上板AI相关FLASH内存估计。

Operation

操作按钮:

  • :下载压缩结果。下载的压缩包中包含:
    • {模型名称}.ms:量化后模型IR。
    • {模型名称}.cfg:量化配置。
    • quant_plot.json:量化评估结果文件。
  • :删除当前记录。
  • :跳转到模型转换页面,在模型转换页面对当前行对应的压缩网络进行模型转换。

若不需要量化,直接点击 "Next without Quantization","Quantization Result History" 列表中同样会生成一条量化记录,页面自动跳转到模型转换页面。

图 4 HiSpark Studio AI 跳过量化

alt text

5. 转换Convert

在量化界面的历史记录中点击某一条记录后的 "Next" 按钮,进入CPU转换界面,该记录生成的量化指标会自动填入转换参数配置页面。

点击 "Convert" 开始转换,转换完成后生成转换结果及历史记录。

图 1 HiSpark Studio AI 转换

alt text

历史记录支持下载和删除操作:点击下载图标可下载转换结果,点击删除图标可删除当前记录。 参数说明如表1所示。

表 1 转换参数配置

参数

说明

Input Node(不可配置)

输入变量名称。

Shape(不可配置)

输入变量形状。

Data Type(不可配置)

输入变量的数据类型。

Convert

开始转换按钮。

图 2 HiSpark Studio AI 下载和删除

alt text

该窗口以表格的方式显示历史转换的结果。表头说明如表2所示。

表 2 历史转换结果表头说明

项目

说明

Trail ID

网络转换结果的序号。

Model Name

网络的名称,以及模型大小和修改时间。

Accuracy

表示分类结果准确率,使用标签真值计算。

准确率表示的格式:{量化模型准确率}({量化模型与原始浮点模型准确率对比})

Cosine Similarity

余弦相似度,使用量化评估网络的输出和原始浮点网络的输出计算。

MSE

均方误差,使用量化评估网络的输出和原始浮点网络的输出计算。

RAM(KB)

上板AI相关RAM内存估计。

FLASH(KB)

上板AI相关FLASH内存估计。

Operation

操作按钮:

  • :下载转换结果。下载的压缩包中包含:
    • micro_gen文件夹:转换后的工程文件。
    • converter.cfg:转换配置。
    • convert_plot.json:转换评估结果文件。
  • :删除当前记录。
  • :跳转到部署页面,对模型进行进一步的部署与调优。

图 3 HiSpark Studio AI 转换柱状图

alt text

AI上板存储占比如上图所示,蓝色显示为RAM占用,绿色显示为FLASH占用,各参数显示具体含义如表3所示。

表 3 内存占用分布条形图各项含义

项目

所属类型

说明

workspace

RAM

存储输入输出中间数据所需的工作空间RAM大小。

stack

RAM

AI推理栈空间所占用大小。

pack_weight

RAM

AI推理针对权重额外辅助空间占用大小。

other

RAM

其他对输入输出张量元信息存储占用等大小(输入输出张量名称,张量shape等)。

code

FLASH

AI推理相关算子,Runtime代码段占用。

data

FLASH

AI推理过程中数据段占用。

weight

FLASH

AI推理参数FLASH存储代码段占用(非数据段)。

6. Deploy

6.1 编译

点击 "Build" 按钮开始编译。

图 1 HiSpark Studio AI 编译

alt text

编译结果如下图所示。转换步骤生成的micro_gen文件会替换middleware/ai_mcu/adaptor/micro_gen目录下的同名文件,并对每个转换结果进行增量编译。

图 2 HiSpark Studio AI 编译结果

alt text

6.2 烧录

点击 "Burn" 进入烧录配置:"Burn Port" 选择开发板连接的串口,"Baud Rate" 波特率选择115200,配置完成后点击烧录按钮开始串口烧录。

图 1 HiSpark Studio AI 烧录参数配置

alt text

系统弹出如下图所示的烧录界面。

图 2 HiSpark Studio AI 烧录页面

alt text

点击烧录按钮开始烧录,默认采用SWD方式烧录。

图 3 HiSpark Studio AI SWD烧录

alt text

7. Benchmark

7.1 性能验证

在Deploy页面点击 "Next" 进入Benchmark页面。选择 "Port" 端口(开发板连接的串口)和波特率 "Baud Rate"(115200),点击 "Performance Evaluation" 按钮开始性能验证。验证过程需要一段时间,期间按钮显示为loading状态;当数据返回、点击 "Abort" 或验证失败时,按钮恢复为可用状态。点击 "Abort" 按钮可终止脚本运行。

图 1 HiSpark Studio AI 性能验证

alt text

性能验证参数配置页面的参数解释如表1所示。

表 1 性能验证参数配置

参数

说明

Port

单板连接的串口号。

Baud Rate

单板连接的波特率。

性能验证完成后显示如下图所示的结果,包括推理时间(INFERENCE TIME)、RAM和FLASH的占用大小。

图 2 HiSpark Studio AI 性能验证结果

alt text

性能验证结果页面各参数含义如表2所示。

表 2 性能验证结果

参数

说明

INFERENCE TIME

上板AI推理时间。

RAM

上板性能验证的RAM内存消耗。

FLASH

上板性能验证的FLASH内存消耗。

Performance Evaluation

性能验证按钮。

7.2 精度验证

选择验证集路径;当 "Validation Labels" 选择为非 "none" 时,可上传标签文件路径,如下图所示。点击 "Accuracy Evaluation" 按钮开始精度验证。验证过程需要一段时间,期间按钮显示为loading状态;当数据返回、点击 "Abort" 或验证失败时,按钮恢复为可用状态。点击 "Abort" 按钮可终止脚本运行。

图 3 HiSpark Studio AI 精度验证

alt text

精度验证参数配置页面的参数解释如表3所示。

表 3 精度验证参数配置

参数

说明

Input Node

上板精度验证输入名称。

Path

上板精度验证输入数据文件夹路径。

Validation Labels

上板精度验证的labels标签。

Accuracy Validation

精度验证按钮。

注:output maxsize为4KB,超出该值会被截断。请合理控制输入长度,以保证输出完整。

精度验证完成后显示如下图所示的结果,包括用例数据运行详情统计(Evaluation Data表格)以及余弦相似度概率密度分布直方图(Probability Density Histogram)。

图 4 HiSpark Studio AI 精度验证结果

alt text

精度验证结果页面主要分为准确率信息、逐项结果展示、余弦相似度分布直方图三部分,各参数含义如表4所示。

表 4 精度验证结果说明

参数

所属部分

说明

ACCURACY

准确率信息

上板精度验证准确率

Sample Name

逐项结果展示

样本名称

Output Name

逐项结果展示

指标所对应的输出名称

Predict

逐项结果展示

上板推理结果

Golden

逐项结果展示

标杆推理结果

Accuracy

逐项结果展示

样本所对应的准确率信息

Cosine Similarity

逐项结果展示

余弦相似度

Probability Density Histogram

余弦相似度分布直方图

余弦相似度分布图

7.3 结果汇总

点击 "Summary of Results" 按钮,弹出当前转换对应的历史性能验证与精度验证记录,如下图所示:

图 5 HiSpark Studio AI 结果汇总

alt text

评估结果汇总界面各元素说明如表5所示。

表 5 评估结果界面元素说明

指标

指标所属部分

说明

Trail ID

----

评估结果序号。

Model Name

Benchmark

网络的名称,以及模型大小和修改时间。

Accuracy

Benchmark

模型上板精度评估的准确率。

Cosine Similarity

Benchmark

模型上板精度评估的平均余弦相似度,计算公式如下,其中表示模型上板推理的输出,表示原始浮点网络在Windows的输出,表示验证集样本的数量。

Inference Time

Benchmark

模型性能评估上板推理的时间。

RAM

Benchmark

模型上板推理所占用的RAM开销。

Flash

Benchmark

模型上板推理所占用的FLASH开销。

Accuracy

Quantize

模型量化准确率。

Cosine Similarity

Quantize

模型量化平均余弦相似度,计算公式同上。

MSE

Quantize

模型量化的均方误差,计算公式如下,其中表示模型上板推理的输出,表示原始浮点网络在Windows的输出,表示验证集样本的数量。

表格支持选中、删除及导出记录操作:右上角第一个按钮 "Delete" 用于删除选中记录,第二个按钮用于将选中记录导出为csv文件。

8. 应用开发

在HiSpark Studio AI中完成模型量化、转换之后,将模型导出并使用HiSpark.AI API完成应用开发。具体步骤如下。

  1. 在HiSpark Studio AI工程目录middleware/ai_mcu/adaptor/micro_gen下获取转换好的Micro工程文件。

    图 1 下载micro工程文件

  2. 参考工程目录user/sample_ai/src/路径下的ai_mcu_demo.c示例进行编译,并调用API。

    图 2 调用API

  3. 具体API的用法请参考文档《HiSpark.AI API开发指南》

常见错误

如何解决部分快捷键无效问题

问题描述

在使用IDE的时候发现部分快捷键无效。如图1所示。

图 1 部分快捷键说明

解决方法

操作步骤

  1. 检查其他运行的软件快捷键是否设置有冲突,例如查看输入法软件的属性设置,如图2所示。

    图 2 按键属性设置

    ①:打开“属性设置”。

    ②:选择“按键”。

    ③:打开“系统功能快捷键设置”。

  2. 在系统功能快捷键中,选择关闭或重置冲突的快捷键。

    图 3 系统功能快捷键

对单独的C或C++文件使用“生成和调试活动文件”后如何停止调试

问题描述

对单独的c或c++使用“生成和调试活动文件”后,点击调试图标,没有退出调试。

解决方法

按快捷键F1,在图1所示的输入框中输入“Debug: Stop”,点击搜索到的结果即可退出调试。

图 1 停止调试指令搜索

路径失效

导入工程路径问题导致的调试、栈分析、镜像分析等默认路径失效。

  • 调试:修改默认的debug_elf路径。

    图 1 修改默认debug_elf路径

多个.a静态库如何打包成一个.a静态库(仅支持MCU系列芯片)

操作步骤

  1. 进入到工具链目录,默认路径是在C:\Program Files\HiSpark Studio\tools\Windows\cc_riscv32_musl_fp_win\bin。

  2. 将需要合成的.a和libAllInOne.bat 放到工具链目录中,检查目录中不能存在.o文件和多余的.a文件。

  3. 双击执行libAllInOne.bat。

  4. 按照 bat 中的提示信息完成打包。

libAllInOne.bat 执行代码可以参考如下代码:

@echo off
echo 执行程序会将目录下面的所有.a合并成一个,请按任意键确认是否继续执行
pause
for %%i in (*.a) do (
riscv32-linux-musl-ar.exe x %%i
)
set /p input=请输入合成.a的名字,必须是以lib开头和.a结尾:
for %%i in (*.o) do (
riscv32-linux-musl-ar.exe crs %input% %%i
)
echo 生成 %input% 成功
pause

电机算法库的参数检查是否要开启?(仅支持MCU系列芯片)

问题描述

当使用芯片配置器创建默认的 “Blank Main”工程时,会默认使能电机算法库的参数检查功能。

图 1 芯片配置器中电机算法库参数检查宏默认使能

解决方法

需要使能电机算法库的参数检查功能的场景:需要检查电机算法库函数参数是否有异常的场景(注意这会影响算法性能)。

需要关闭电机算法库的参数检查功能的场景:对算法性能有要求的场景。

断点数量限制统计不到反汇编断点导致断点数量超出限制无法调试(仅支持MCU系列芯片)

问题描述

当所使用的断点包含反汇编断点时,即使达到断点数量限制,仍然可以继续添加断点,然而,当断点数量超过限制后,进行调试会导致异常报错。

图 1 反汇编视图断点

图 2 断点数量超限制异常弹窗

解决方法

断点数量超过限制时,运行调试会有异常弹窗,请单击“确定”按钮退出调试,并在删除部分断点(306xH系列MCU断点数量限制为7个,3061M系列MCU断点数量限制为3个)后再次启动调试。

调试的变量和监视窗口查看大数组变量会加载很久导致无法调试(仅支持MCU系列芯片)

问题描述

调试过程中,如果要使用变量或监视窗口查看大数组变量(数组大小在2000以上),系统会加载很长时间,加载期间无法进行其他调试操作。

图 1 查看大数组变量加载状态界面

解决方法

系统一直处于加载状态时先单击“停止调试”按钮退出调试,再次启动调试并使用实时监视(Live Watch)来查看大数组变量。

启动VariableTrace失败(仅支持MCU系列芯片)

问题描述

介绍启动变量跟踪功能失败,没有弹出窗口。

解决方法

方案一:使用独立显卡。

方案二:更新显卡驱动。在Windows10和Windows11版本中,可以通过系统设置来自动更新显卡驱动。

操作步骤

  1. 打开“设置”。

    图 1 Windows10和Windows11版本设置

  2. 点击“更新和安全”。

    图 2 更新和安全

  3. 选择“Windows Update”,点击“检查更新”。

    图 3 检查更新

    如果有可用的显卡驱动更新,系统会自动下载并安装。

启动HiSpark-TraceFlasher工具提示由于找不到MSVCP140.dll,无法继续执行代码解决方案(仅支持MCU系列芯片)

问题描述

在用户启动HiSpark-TraceFlasher工具时,提示由于找不到MSVCP140.dll,无法继续执行代码,导致无法打开工具。

图 1 无法找到MSVCP140.dll提示示例

解决方法

方法一:找一台其他相同系统和位数的电脑,在C:\Windows\System32(64位:C:\Windows\SysWOW64),将msvcp140.dll拷贝至HiSpark-TraceFlasher工具根目录下(HiSpark-TraceFlasher.exe同级目录),重新启动即可。

方法二:网上下载一个符合电脑系统和位数的msvcp140.dll文件,放在HiSpark-TraceFlasher工具根目录下(HiSpark-TraceFlasher.exe同级目录),重新启动即可。

编译工程时,出现“start parsing target.elf for livewatch.....”之后要等待很久(仅支持MCU系列芯片)

问题描述

编译工程时,出现“start parsing target.elf for livewatch.....”之后要等待很久,才能完成编译。

解决方法

这个等待时间是在解析elf中的变量。等待时间与工程中定义的变量数量成正相关。

方案一:如果暂时不需要这个功能,可以取消勾选“工程配置”->“为Live Watch解析elf文件”。可以跳过这段流程,加快编译时间。

方案二:如果需要使用这个功能,又想要加快解析时间。对于电脑中没有安装Python的用户,可以下载并安装Python 3.8.8及以上版本后再次尝试编译,可有效加快编译;对于已安装Python的用户,只能使用方案一。

选择MCU的Nos Task Schedule例程,出现红色波浪线告警

问题描述

选择MCU的Nos Task Schedule例程,出现红色波浪线告警。

图 1 出现红色波浪线告警

解决方法

操作步骤

  1. 工具栏中, IDE配置->设置。

  2. 在搜索栏中输入“intelli sense mode”。

  3. 选择“linux-gcc-arm”,红色波浪线被消除。

菜单栏隐藏后如何再次显示

在使用HiSpark Studio过程中,可以通过菜单栏中的“查看”->“外观”中的各种选项来控制某些区域的显示或隐藏,点击“显示菜单栏”选项后,菜单栏会隐藏。

图 1 菜单栏隐藏

可以通过如下方法重新显示菜单栏:

①:点击窗口右上角的“自定义布局”按钮,在弹出的选项框中,可以选择显示/隐藏菜单栏。

图 2 菜单栏隐藏后显示方法①

②:将活动栏切换至侧边,当隐藏菜单栏时,左侧活动栏会生成一个新图标,点击即可使用原生菜单栏中的功能,通过“查看”->“外观”->“显示菜单栏”这个选项功能来显示菜单栏。

图 3 菜单栏隐藏后显示方法②

③:用快捷键Ctrl+Shift+P弹出命令行菜单,输入“Toggle Menu Bar”,点击该选项即可显示/隐藏菜单栏。

图 4 菜单栏隐藏后显示方法③

HCC工具链下载失败如何手动下载(仅支持MCU系列芯片)

问题描述

工程在编译、镜像/栈分析和调试时出现HCC工具链下载失败的错误提示。

图 1 HCC工具链下载失败错误提示

解决方法

操作步骤

  1. 通过链接[https://gitcode.com/HiSpark/fbb_ws63/tree/master/src/tools/bin/compiler/riscv/cc_riscv32_musl_105/cc_riscv32_musl_fp_win]下载HCC工具链压缩包cc_riscv32_musl_fp_win。

  2. 将1下载到的“cc_riscv32_musl_fp_win”文件拷贝到IDE安装目录(默认为:C:\Program Files\HiSpark Studio)下的tools\Windows路径中。

    图 2 HCC工具链存放路径(示例)

如何制作和使用可以运行在SRAM上的静态库(仅支持MCU系列芯片)

制作可以运行在SRAM上的静态库的步骤如下:

操作步骤

  1. 使用“RAM_CODE”宏定义并声明静态库对外提供的接口。

  2. 参考“编译生成静态库”章节的方案制作静态库。

使用可以运行在SRAM上的静态库的步骤如下:

操作步骤

  1. 在工程中打开“chipconfig配置”,请参见“功能入口”。

  2. 在“LDS配置”中的“RAM Code Path”区域中添加静态库对应的.a文件,请参见“LDS配置(仅支持MCU系列芯片)”。

  3. 点击“生成代码”,就可以得到一个让静态库中的“RAM_CODE”接口运行在SRAM上的工程。

不同PC间复制工程后无法打开如何解决

解决不同PC间复制工程后无法打开问题的步骤如下:

操作步骤

  1. 关闭IDE。

  2. 保证目标PC和源PC的SDK路径一致(这里的SDK路径是指被复制的工程对应的SDK路径)。

  3. 双击工程目录下的.hiproj文件打开工程,工程正常打开。

launch.json缺失异常弹窗

在新建3071工程或者打开工程配置界面时,偶尔会出现如图1所示的异常弹窗,直接单击“取消”即可。实际launch.json已生成在工程文件的.vscode目录下。

图 1 launch.json缺失时的异常弹窗