# 前  言<a name="ZH-CN_TOPIC_0000002579660054"></a>

**概述<a name="section4537382116410"></a>**

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

**读者对象<a name="section4378592816410"></a>**

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

-   技术支持工程师
-   软件开发工程师
-   硬件开发工程师
-   嵌入式爱好者

**符号约定<a name="section133020216410"></a>**

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

<a name="table2622507016410"></a>
<table><thead align="left"><tr id="row1530720816410"><th class="cellrowborder" valign="top" width="20.580000000000002%" id="mcps1.1.3.1.1"><p id="p6450074116410"><a name="p6450074116410"></a><a name="p6450074116410"></a><strong id="b2136615816410"><a name="b2136615816410"></a><a name="b2136615816410"></a>符号</strong></p>
</th>
<th class="cellrowborder" valign="top" width="79.42%" id="mcps1.1.3.1.2"><p id="p5435366816410"><a name="p5435366816410"></a><a name="p5435366816410"></a><strong id="b5941558116410"><a name="b5941558116410"></a><a name="b5941558116410"></a>说明</strong></p>
</th>
</tr>
</thead>
<tbody><tr id="row1372280416410"><td class="cellrowborder" valign="top" width="20.580000000000002%" headers="mcps1.1.3.1.1 "><p id="p3734547016410"><a name="p3734547016410"></a><a name="p3734547016410"></a><a name="image2670064316410"></a><a name="image2670064316410"></a><span><img class="" id="image2670064316410" height="25.270000000000003" width="67.83" src="figures/zh-cn_image_0000002579660158.png"></span></p>
</td>
<td class="cellrowborder" valign="top" width="79.42%" headers="mcps1.1.3.1.2 "><p id="p1757432116410"><a name="p1757432116410"></a><a name="p1757432116410"></a>表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。</p>
</td>
</tr>
<tr id="row466863216410"><td class="cellrowborder" valign="top" width="20.580000000000002%" headers="mcps1.1.3.1.1 "><p id="p1432579516410"><a name="p1432579516410"></a><a name="p1432579516410"></a><a name="image4895582316410"></a><a name="image4895582316410"></a><span><img class="" id="image4895582316410" height="25.270000000000003" width="67.83" src="figures/zh-cn_image_0000002579820072.png"></span></p>
</td>
<td class="cellrowborder" valign="top" width="79.42%" headers="mcps1.1.3.1.2 "><p id="p959197916410"><a name="p959197916410"></a><a name="p959197916410"></a>表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。</p>
</td>
</tr>
<tr id="row123863216410"><td class="cellrowborder" valign="top" width="20.580000000000002%" headers="mcps1.1.3.1.1 "><p id="p1232579516410"><a name="p1232579516410"></a><a name="p1232579516410"></a><a name="image1235582316410"></a><a name="image1235582316410"></a><span><img class="" id="image1235582316410" height="25.270000000000003" width="67.83" src="figures/zh-cn_image_0000002610180051.png"></span></p>
</td>
<td class="cellrowborder" valign="top" width="79.42%" headers="mcps1.1.3.1.2 "><p id="p123197916410"><a name="p123197916410"></a><a name="p123197916410"></a>表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。</p>
</td>
</tr>
<tr id="row5786682116410"><td class="cellrowborder" valign="top" width="20.580000000000002%" headers="mcps1.1.3.1.1 "><p id="p2204984716410"><a name="p2204984716410"></a><a name="p2204984716410"></a><a name="image4504446716410"></a><a name="image4504446716410"></a><span><img class="" id="image4504446716410" height="25.270000000000003" width="67.83" src="figures/zh-cn_image_0000002610099953.png"></span></p>
</td>
<td class="cellrowborder" valign="top" width="79.42%" headers="mcps1.1.3.1.2 "><p id="p4388861916410"><a name="p4388861916410"></a><a name="p4388861916410"></a>用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。</p>
<p id="p1238861916410"><a name="p1238861916410"></a><a name="p1238861916410"></a>“须知”不涉及人身伤害。</p>
</td>
</tr>
<tr id="row2856923116410"><td class="cellrowborder" valign="top" width="20.580000000000002%" headers="mcps1.1.3.1.1 "><p id="p5555360116410"><a name="p5555360116410"></a><a name="p5555360116410"></a><a name="image799324016410"></a><a name="image799324016410"></a><span><img class="" id="image799324016410" height="25.270000000000003" width="67.83" src="figures/zh-cn_image_0000002579820076.png"></span></p>
</td>
<td class="cellrowborder" valign="top" width="79.42%" headers="mcps1.1.3.1.2 "><p id="p4612588116410"><a name="p4612588116410"></a><a name="p4612588116410"></a>对正文中重点信息的补充说明。</p>
<p id="p1232588116410"><a name="p1232588116410"></a><a name="p1232588116410"></a>“说明”不是安全警示信息，不涉及人身、设备及环境伤害信息。</p>
</td>
</tr>
</tbody>
</table>

# 工具简介<a name="ZH-CN_TOPIC_0000002610179965"></a>

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

-   支持代码查找、代码高亮、代码自动补齐、代码输入提示、代码检查等，开发者可以轻松、高效编码。
-   支持单步调试和查看内存、变量、调用栈、寄存器、汇编等调试信息。
-   支持自动检测各芯片/开发板依赖的工具链是否完备，并提供一键下载和安装缺失工具链。

HiSpark Studio工具主要分为以下7个功能区域，如[图1](#fig19904573445)所示。

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

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

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

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

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

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

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

**图 1**  功能分区图<a name="fig19904573445"></a>  
![](figures/功能分区图.png "功能分区图")

HiSpark Studio工具当前支持的芯片和对应特性如[表1](#table82241939151116)所示。

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

<a name="table82241939151116"></a>
<table><thead align="left"><tr id="row1022415396111"><th class="cellrowborder" align="center" valign="top" width="12.5%" id="mcps1.2.9.1.1"><p id="p922433961112"><a name="p922433961112"></a><a name="p922433961112"></a>芯片系列</p>
</th>
<th class="cellrowborder" align="center" valign="top" width="15.32%" id="mcps1.2.9.1.2"><p id="p222453971118"><a name="p222453971118"></a><a name="p222453971118"></a>芯片名称</p>
</th>
<th class="cellrowborder" align="center" valign="top" width="7.8%" id="mcps1.2.9.1.3"><p id="p1822423917119"><a name="p1822423917119"></a><a name="p1822423917119"></a>工程管理</p>
</th>
<th class="cellrowborder" align="center" valign="top" width="11.899999999999999%" id="mcps1.2.9.1.4"><p id="p202591940690"><a name="p202591940690"></a><a name="p202591940690"></a>芯片配置</p>
</th>
<th class="cellrowborder" align="center" valign="top" width="11.67%" id="mcps1.2.9.1.5"><p id="p1628513136102"><a name="p1628513136102"></a><a name="p1628513136102"></a>编译运行</p>
</th>
<th class="cellrowborder" align="center" valign="top" width="11.469999999999999%" id="mcps1.2.9.1.6"><p id="p1791011019106"><a name="p1791011019106"></a><a name="p1791011019106"></a>一键烧录</p>
</th>
<th class="cellrowborder" align="center" valign="top" width="13.3%" id="mcps1.2.9.1.7"><p id="p681611181416"><a name="p681611181416"></a><a name="p681611181416"></a>烧录配置</p>
</th>
<th class="cellrowborder" align="center" valign="top" width="16.04%" id="mcps1.2.9.1.8"><p id="p178217711010"><a name="p178217711010"></a><a name="p178217711010"></a>栈分析和镜像分析</p>
</th>
</tr>
</thead>
<tbody><tr id="row1522414391116"><td class="cellrowborder" rowspan="10" align="center" valign="top" width="12.5%" headers="mcps1.2.9.1.1 "><p id="p12987328195513"><a name="p12987328195513"></a><a name="p12987328195513"></a>MCU</p>
</td>
<td class="cellrowborder" align="center" valign="top" width="15.32%" headers="mcps1.2.9.1.2 "><p id="p522433918113"><a name="p522433918113"></a><a name="p522433918113"></a>306xH</p>
</td>
<td class="cellrowborder" align="center" valign="top" width="7.8%" headers="mcps1.2.9.1.3 "><p id="p102241839141113"><a name="p102241839141113"></a><a name="p102241839141113"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" width="11.899999999999999%" headers="mcps1.2.9.1.4 "><p id="p1525914403914"><a name="p1525914403914"></a><a name="p1525914403914"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" width="11.67%" headers="mcps1.2.9.1.5 "><p id="p1935115361269"><a name="p1935115361269"></a><a name="p1935115361269"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" width="11.469999999999999%" headers="mcps1.2.9.1.6 "><p id="p178284672610"><a name="p178284672610"></a><a name="p178284672610"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" width="13.3%" headers="mcps1.2.9.1.7 "><p id="p12259162653611"><a name="p12259162653611"></a><a name="p12259162653611"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" width="16.04%" headers="mcps1.2.9.1.8 "><p id="p16784205232610"><a name="p16784205232610"></a><a name="p16784205232610"></a>√</p>
</td>
</tr>
<tr id="row11240141216133"><td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.1 "><p id="p7240151231319"><a name="p7240151231319"></a><a name="p7240151231319"></a>3065A</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.2 "><p id="p42401612101310"><a name="p42401612101310"></a><a name="p42401612101310"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.3 "><p id="p435292615264"><a name="p435292615264"></a><a name="p435292615264"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.4 "><p id="p027818394266"><a name="p027818394266"></a><a name="p027818394266"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.5 "><p id="p89771246202613"><a name="p89771246202613"></a><a name="p89771246202613"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.6 "><p id="p137101916152819"><a name="p137101916152819"></a><a name="p137101916152819"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.7 "><p id="p15202530269"><a name="p15202530269"></a><a name="p15202530269"></a>√</p>
</td>
</tr>
<tr id="row20854162814133"><td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.1 "><p id="p2854128101313"><a name="p2854128101313"></a><a name="p2854128101313"></a>3061M</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.2 "><p id="p5851125915240"><a name="p5851125915240"></a><a name="p5851125915240"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.3 "><p id="p68061726152613"><a name="p68061726152613"></a><a name="p68061726152613"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.4 "><p id="p477114013261"><a name="p477114013261"></a><a name="p477114013261"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.5 "><p id="p18423174715263"><a name="p18423174715263"></a><a name="p18423174715263"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.6 "><p id="p72413187289"><a name="p72413187289"></a><a name="p72413187289"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.7 "><p id="p197710537263"><a name="p197710537263"></a><a name="p197710537263"></a>√</p>
</td>
</tr>
<tr id="row68518495407"><td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.1 "><p id="p98554911407"><a name="p98554911407"></a><a name="p98554911407"></a>3065P</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.2 "><p id="p354512479401"><a name="p354512479401"></a><a name="p354512479401"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.3 "><p id="p1654594719401"><a name="p1654594719401"></a><a name="p1654594719401"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.4 "><p id="p1654544719408"><a name="p1654544719408"></a><a name="p1654544719408"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.5 "><p id="p14545124716405"><a name="p14545124716405"></a><a name="p14545124716405"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.6 "><p id="p17141320142815"><a name="p17141320142815"></a><a name="p17141320142815"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.7 "><p id="p1654534717407"><a name="p1654534717407"></a><a name="p1654534717407"></a>√</p>
</td>
</tr>
<tr id="row216084594018"><td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.1 "><p id="p17161945184019"><a name="p17161945184019"></a><a name="p17161945184019"></a>3066M</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.2 "><p id="p411154813401"><a name="p411154813401"></a><a name="p411154813401"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.3 "><p id="p201112481407"><a name="p201112481407"></a><a name="p201112481407"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.4 "><p id="p19111248204018"><a name="p19111248204018"></a><a name="p19111248204018"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.5 "><p id="p1911116482409"><a name="p1911116482409"></a><a name="p1911116482409"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.6 "><p id="p1926592262819"><a name="p1926592262819"></a><a name="p1926592262819"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.7 "><p id="p311117481401"><a name="p311117481401"></a><a name="p311117481401"></a>√</p>
</td>
</tr>
<tr id="row345171018363"><td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.1 "><p id="p8461010203611"><a name="p8461010203611"></a><a name="p8461010203611"></a>3066H</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.2 "><p id="p144671015364"><a name="p144671015364"></a><a name="p144671015364"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.3 "><p id="p44616108365"><a name="p44616108365"></a><a name="p44616108365"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.4 "><p id="p1146110173613"><a name="p1146110173613"></a><a name="p1146110173613"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.5 "><p id="p1546610203616"><a name="p1546610203616"></a><a name="p1546610203616"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.6 "><p id="p146131033615"><a name="p146131033615"></a><a name="p146131033615"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.7 "><p id="p8461110113611"><a name="p8461110113611"></a><a name="p8461110113611"></a>√</p>
</td>
</tr>
<tr id="row01647320319"><td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.1 "><p id="p645157133118"><a name="p645157133118"></a><a name="p645157133118"></a>3067M</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.2 "><p id="p245117703117"><a name="p245117703117"></a><a name="p245117703117"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.3 "><p id="p1345117714313"><a name="p1345117714313"></a><a name="p1345117714313"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.4 "><p id="p1345217183118"><a name="p1345217183118"></a><a name="p1345217183118"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.5 "><p id="p1945217717316"><a name="p1945217717316"></a><a name="p1945217717316"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.6 "><p id="p18452875315"><a name="p18452875315"></a><a name="p18452875315"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.7 "><p id="p14452127133112"><a name="p14452127133112"></a><a name="p14452127133112"></a>√</p>
</td>
</tr>
<tr id="row8713103921313"><td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.1 "><p id="p1171412397131"><a name="p1171412397131"></a><a name="p1171412397131"></a>Aucu</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.2 "><p id="p39561702256"><a name="p39561702256"></a><a name="p39561702256"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.3 "><p id="p622918273269"><a name="p622918273269"></a><a name="p622918273269"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.4 "><p id="p17615740162615"><a name="p17615740162615"></a><a name="p17615740162615"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.5 "><p id="p488514716265"><a name="p488514716265"></a><a name="p488514716265"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.6 "><p id="p2366192372815"><a name="p2366192372815"></a><a name="p2366192372815"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.7 "><p id="p4904125415268"><a name="p4904125415268"></a><a name="p4904125415268"></a>√</p>
</td>
</tr>
<tr id="row2268645193319"><td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.1 "><p id="p2268114563311"><a name="p2268114563311"></a><a name="p2268114563311"></a>3071MNNICE</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.2 "><p id="p19268145133312"><a name="p19268145133312"></a><a name="p19268145133312"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.3 "><p id="p162685450337"><a name="p162685450337"></a><a name="p162685450337"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.4 "><p id="p42683453339"><a name="p42683453339"></a><a name="p42683453339"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.5 "><p id="p1726814513332"><a name="p1726814513332"></a><a name="p1726814513332"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.6 "><p id="p1026814453339"><a name="p1026814453339"></a><a name="p1026814453339"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.7 "><p id="p2268145113315"><a name="p2268145113315"></a><a name="p2268145113315"></a>√</p>
</td>
</tr>
<tr id="row1552952018374"><td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.1 "><p id="p552942013371"><a name="p552942013371"></a><a name="p552942013371"></a>3071MNPIRE</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.2 "><p id="p45290201375"><a name="p45290201375"></a><a name="p45290201375"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.3 "><p id="p752942012375"><a name="p752942012375"></a><a name="p752942012375"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.4 "><p id="p12529120173713"><a name="p12529120173713"></a><a name="p12529120173713"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.5 "><p id="p135301204378"><a name="p135301204378"></a><a name="p135301204378"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.6 "><p id="p9530182018370"><a name="p9530182018370"></a><a name="p9530182018370"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.9.1.7 "><p id="p135301120183717"><a name="p135301120183717"></a><a name="p135301120183717"></a>√</p>
</td>
</tr>
</tbody>
</table>

<a name="table96567201482"></a>
<table><thead align="left"><tr id="row2657720174815"><th class="cellrowborder" align="center" valign="top" width="19.06%" id="mcps1.1.6.1.1"><p id="p865715205483"><a name="p865715205483"></a><a name="p865715205483"></a>芯片系列</p>
</th>
<th class="cellrowborder" align="center" valign="top" width="26.240000000000002%" id="mcps1.1.6.1.2"><p id="p765712064811"><a name="p765712064811"></a><a name="p765712064811"></a>芯片名称</p>
</th>
<th class="cellrowborder" align="center" valign="top" width="11.110000000000001%" id="mcps1.1.6.1.3"><p id="p17657820164818"><a name="p17657820164818"></a><a name="p17657820164818"></a>工程调试</p>
</th>
<th class="cellrowborder" align="center" valign="top" width="20.74%" id="mcps1.1.6.1.4"><p id="p1065792019487"><a name="p1065792019487"></a><a name="p1065792019487"></a>串口控制台</p>
</th>
<th class="cellrowborder" align="center" valign="top" width="22.85%" id="mcps1.1.6.1.5"><p id="p106571320154820"><a name="p106571320154820"></a><a name="p106571320154820"></a>变量监控</p>
</th>
</tr>
</thead>
<tbody><tr id="row126572205485"><td class="cellrowborder" rowspan="10" align="center" valign="top" width="19.06%" headers="mcps1.1.6.1.1 "><p id="p465772012484"><a name="p465772012484"></a><a name="p465772012484"></a>MCU</p>
<p id="p1326750114411"><a name="p1326750114411"></a><a name="p1326750114411"></a></p>
<p id="p34873413459"><a name="p34873413459"></a><a name="p34873413459"></a></p>
</td>
<td class="cellrowborder" align="center" valign="top" width="26.240000000000002%" headers="mcps1.1.6.1.2 "><p id="p176573205488"><a name="p176573205488"></a><a name="p176573205488"></a>306xH</p>
</td>
<td class="cellrowborder" align="center" valign="top" width="11.110000000000001%" headers="mcps1.1.6.1.3 "><p id="p146589205487"><a name="p146589205487"></a><a name="p146589205487"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" width="20.74%" headers="mcps1.1.6.1.4 "><p id="p126589204481"><a name="p126589204481"></a><a name="p126589204481"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" width="22.85%" headers="mcps1.1.6.1.5 "><p id="p1865892018480"><a name="p1865892018480"></a><a name="p1865892018480"></a>√</p>
</td>
</tr>
<tr id="row16658102014486"><td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.1 "><p id="p18658142074811"><a name="p18658142074811"></a><a name="p18658142074811"></a>3065A</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.2 "><p id="p3658320164813"><a name="p3658320164813"></a><a name="p3658320164813"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.3 "><p id="p36586201486"><a name="p36586201486"></a><a name="p36586201486"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.4 "><p id="p17658132014483"><a name="p17658132014483"></a><a name="p17658132014483"></a>√</p>
</td>
</tr>
<tr id="row7658122094819"><td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.1 "><p id="p1265842074814"><a name="p1265842074814"></a><a name="p1265842074814"></a>3061M</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.2 "><p id="p06592020204816"><a name="p06592020204816"></a><a name="p06592020204816"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.3 "><p id="p1765942014811"><a name="p1765942014811"></a><a name="p1765942014811"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.4 "><p id="p1659220164811"><a name="p1659220164811"></a><a name="p1659220164811"></a>√</p>
</td>
</tr>
<tr id="row56596209484"><td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.1 "><p id="p1965992010489"><a name="p1965992010489"></a><a name="p1965992010489"></a>3065P</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.2 "><p id="p166591820124810"><a name="p166591820124810"></a><a name="p166591820124810"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.3 "><p id="p565992011485"><a name="p565992011485"></a><a name="p565992011485"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.4 "><p id="p1660102084811"><a name="p1660102084811"></a><a name="p1660102084811"></a>√</p>
</td>
</tr>
<tr id="row1366072014483"><td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.1 "><p id="p16660182034816"><a name="p16660182034816"></a><a name="p16660182034816"></a>3066M</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.2 "><p id="p46603209483"><a name="p46603209483"></a><a name="p46603209483"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.3 "><p id="p16660132012481"><a name="p16660132012481"></a><a name="p16660132012481"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.4 "><p id="p17660152011483"><a name="p17660152011483"></a><a name="p17660152011483"></a>√</p>
</td>
</tr>
<tr id="row1768810391392"><td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.1 "><p id="p136895393391"><a name="p136895393391"></a><a name="p136895393391"></a>3066H</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.2 "><p id="p146891939123916"><a name="p146891939123916"></a><a name="p146891939123916"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.3 "><p id="p11689103914398"><a name="p11689103914398"></a><a name="p11689103914398"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.4 "><p id="p9689839173919"><a name="p9689839173919"></a><a name="p9689839173919"></a>√</p>
</td>
</tr>
<tr id="row124981229193118"><td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.1 "><p id="p611616351316"><a name="p611616351316"></a><a name="p611616351316"></a>3067M</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.2 "><p id="p111633520318"><a name="p111633520318"></a><a name="p111633520318"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.3 "><p id="p181168351313"><a name="p181168351313"></a><a name="p181168351313"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.4 "><p id="p1011603520317"><a name="p1011603520317"></a><a name="p1011603520317"></a>√</p>
</td>
</tr>
<tr id="row7660132074812"><td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.1 "><p id="p5660620184817"><a name="p5660620184817"></a><a name="p5660620184817"></a>Aucu</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.2 "><p id="p146611620194817"><a name="p146611620194817"></a><a name="p146611620194817"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.3 "><p id="p5661120194812"><a name="p5661120194812"></a><a name="p5661120194812"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.4 "><p id="p2661182084815"><a name="p2661182084815"></a><a name="p2661182084815"></a>√</p>
</td>
</tr>
<tr id="row103261450134412"><td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.1 "><p id="p1326205014449"><a name="p1326205014449"></a><a name="p1326205014449"></a>3071MNNICE</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.2 "><p id="p133262507443"><a name="p133262507443"></a><a name="p133262507443"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.3 "><p id="p1732615019447"><a name="p1732615019447"></a><a name="p1732615019447"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.4 "><p id="p8326175064419"><a name="p8326175064419"></a><a name="p8326175064419"></a>√</p>
</td>
</tr>
<tr id="row13486104134517"><td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.1 "><p id="p134876404511"><a name="p134876404511"></a><a name="p134876404511"></a>3071MNPIRE</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.2 "><p id="p7487149459"><a name="p7487149459"></a><a name="p7487149459"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.3 "><p id="p94872414518"><a name="p94872414518"></a><a name="p94872414518"></a>√</p>
</td>
<td class="cellrowborder" align="center" valign="top" headers="mcps1.1.6.1.4 "><p id="p1248764204518"><a name="p1248764204518"></a><a name="p1248764204518"></a>√</p>
</td>
</tr>
</tbody>
</table>

>![](public_sys-resources/icon-note.gif) **说明：** 
>HiSpark Studio欢迎界面中提供了生态社区的多个网址，用户可直接点击访问：
>-   海思官方网站：[https://www.hisilicon.com/cn](https://www.hisilicon.com/cn)
>-   海思技术论坛：[https://developers.hisilicon.com/forum/0101108112079179002/](https://developers.hisilicon.com/forum/0101108112079179002/)
>-   Visual Studio Code插件市场：[https://marketplace.visualstudio.com/](https://marketplace.visualstudio.com/)
>-   扩展插件市场：[https://marketplace.ide.huaweicloud.com/](https://marketplace.ide.huaweicloud.com/)

# 开发环境搭建<a name="ZH-CN_TOPIC_0000002579660124"></a>

-   **[概述](#ZH-CN_TOPIC_0000002579660122)**  

-   **[安装要求](#ZH-CN_TOPIC_0000002610180011)**  

-   **[安装HiSpark Studio](#ZH-CN_TOPIC_0000002579819994)**  

## 概述<a name="ZH-CN_TOPIC_0000002579660122"></a>

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

## 安装要求<a name="ZH-CN_TOPIC_0000002610180011"></a>

-   操作系统要求：支持64位Windows10或64位Windows11。
-   硬盘要求：至少有900MB的硬盘空间来安装HiSpark Studio。
-   内存要求：HiSpark Stsudio最低要求为1GB RAM，建议至少有4GB RAM来安装运行HiSpark Studio。
-   CPU：HiSpark Studio最低要求为1.6GHz或者更高的处理器。
-   C盘空间要求：HiSpark Studio默认会在用户的C盘文件夹中创建一个“HiSpark Studio”的缓存目录，用于存储用户的设置、插件等缓存，建议至少有1GB的C盘剩余空间。

## 安装HiSpark Studio<a name="ZH-CN_TOPIC_0000002579819994"></a>

**操作步骤<a name="ol347mcpsimp"></a>**

1.  获取HiSpark Studio安装包。

    安装包为一个可执行文件，如[图1](#fig224535135111)所示。

    **图 1**  HiSparkStudioSetup安装包<a name="fig224535135111"></a>  
    ![](figures/HiSparkStudioSetup安装包.png "HiSparkStudioSetup安装包")

2.  安装程序。

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

    **图 2**  安装HiSpark Studio向导初始界面<a name="fig82269529524"></a>  
    ![](figures/安装HiSpark-Studio向导初始界面.png "安装HiSpark-Studio向导初始界面")

    >![](public_sys-resources/icon-note.gif) **说明：** 
    >安装HiSpark Studio时，弹出的窗口中安装版本号应与HiSpark Studio安装版本号保持一致，[图2](#fig82269529524)中1.0.0.1的版本号仅为举例说明。
    >新版本HiSpark Studio（1.0.0.12、25.09.1以及25.12.1这三个版本）安装后不会卸载旧版本，安装同一个版本才会卸载已安装的相同版本的IDE，一台PC可同时安装多个IDE。如果想卸载老版本的IDE可以手动点击IDE安装目录下的unins000.exe文件进行手动卸载。

    >![](public_sys-resources/icon-note.gif) **说明：** 
    >一台PC中安装多个版本的IDE时，通过右键任务栏中的IDE图标，显示的新窗口与打开的版本号可能与实际已经打开的版本不一致。
    >![](figures/zh-cn_image_0000002671682058.png)
    >由于微软和程序安装的限制，任务栏中的图标右键打开的窗口，默认为“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版本。
    >![](figures/zh-cn_image_0000002671522208.png)
    >遇到上述情况，用户可通过各自的快捷方式或者在新开的界面中点击菜单栏中“文件”选项中的“新建窗口”功能打开所需的版本。

3.  选择安装路径。

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

    **图 3**  选择安装路径<a name="fig1590414911169"></a>  
    ![](figures/选择安装路径.png "选择安装路径")

    >![](public_sys-resources/icon-note.gif) **说明：** 
    >安装路径必须是英文路径。

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

    **图 4**  选择附加任务<a name="fig423620192161"></a>  
    ![](figures/选择附加任务.png "选择附加任务")

5.  准备安装。

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

    **图 5**  准备安装<a name="fig5302191515419"></a>  
    ![](figures/准备安装.png "准备安装")

6.  等待安装。

    等待安装执行。

    **图 6**  等待文件安装<a name="fig1452012281548"></a>  
    ![](figures/等待文件安装.png "等待文件安装")

    **图 7**  等待插件安装<a name="fig173601841145413"></a>  
    ![](figures/等待插件安装.png "等待插件安装")

    >![](public_sys-resources/icon-note.gif) **说明：** 
    >在安装的过程中，如果想停止安装，单击“取消”按钮。

7.  安装完成。

    **图 8**  安装完成<a name="fig14211143081615"></a>  
    ![](figures/安装完成.png "安装完成")

# 工程管理<a name="ZH-CN_TOPIC_0000002579660118"></a>

-   **[新建工程](#ZH-CN_TOPIC_0000002610179955)**  

-   **[导入工程](#ZH-CN_TOPIC_0000002579819962)**  

-   **[打开工程](#ZH-CN_TOPIC_0000002610099849)**  

-   **[创建多工程工作台](#ZH-CN_TOPIC_0000002610180005)**  

-   **[创建多核工程](#ZH-CN_TOPIC_0000002610099915)**  

## 新建工程<a name="ZH-CN_TOPIC_0000002610179955"></a>

**操作步骤<a name="ol13352144322516"></a>**

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

    **图 1**  HiSpark Studio欢迎页面<a name="fig6514428113718"></a>  
    ![](figures/HiSpark-Studio欢迎页面.png "HiSpark-Studio欢迎页面")

2.  在[图2](#fig2784311111318)界面配置工程参数，单击“完成”。

    **图 2**  新建工程窗口<a name="fig2784311111318"></a>  
    ![](figures/新建工程窗口.png "新建工程窗口")

    -   芯片：选择工程使用的芯片名称。具体参考“[工具简介](#ZH-CN_TOPIC_0000002610179965)”中的[表1](#table82241939151116)。
    -   开发板：选择工程使用的开发板名称。当用户不需要自定义开发板时，这里选择芯片名作为开发板名。
    -   工程类型：选择创建的工程类型。普通工程、空工程，空工程当前只支持MCU系列芯片。
    -   工程名：输入工程名称。
    -   工程路径：选择用于存放工程文件的目录。
    -   软件包：选择工程使用的软件开发驱动包（SDK）文件夹根目录。

3.  查看工程创建结果。

    HiSpark Studio会自动打开新创建的工程，并在欢迎界面工程列表中显示创建的工程，如[图3](#fig551738161718)所示。

    **图 3**  工程创建结果页面<a name="fig551738161718"></a>  
    ![](figures/工程创建结果页面.png "工程创建结果页面")

>![](public_sys-resources/icon-caution.gif) **注意：** 
>3071工程需要用户手动配置arm-gnu-toolchain的编译器环境，用户可参考[https://cmc.cloudartifact.szv.dragon.tools.huawei.com/artifactory/opensource_general/GNU-Arm-Embedded-Toolchain/14.2.Rel1/package](https://cmc.cloudartifact.szv.dragon.tools.huawei.com/artifactory/opensource_general/GNU-Arm-Embedded-Toolchain/14.2.Rel1/package)下载14.2版本的gcc并添加到环境变量中，关闭所有IDE窗口后再次创建3071工程。

## 导入工程<a name="ZH-CN_TOPIC_0000002579819962"></a>

**操作步骤<a name="ol9886144118495"></a>**

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

    **图 1**  HiSpark Studio导入工程页面<a name="fig19540125184016"></a>  
    ![](figures/HiSpark-Studio导入工程页面.png "HiSpark-Studio导入工程页面")

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

    **图 2**  导入工程配置页面<a name="fig3640203910157"></a>  
    ![](figures/导入工程配置页面.png "导入工程配置页面")

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

    **图 3**  导入工程完成<a name="fig1617152231818"></a>  
    ![](figures/导入工程完成.png "导入工程完成")

## 打开工程<a name="ZH-CN_TOPIC_0000002610099849"></a>

**操作步骤<a name="ol522056165218"></a>**

1.  打开HiSpark Studio工具，进入到欢迎页面，单击“![](figures/zh-cn_image_0000002579660330.png)”，进入打开工程页面。

    **图 1**  单击打开工程<a name="fig1951810305412"></a>  
    ![](figures/单击打开工程.png "单击打开工程")

2.  选择目标工程打开。

    **图 2**  打开工程的步骤<a name="fig45311048181812"></a>  
    ![](figures/打开工程的步骤.png "打开工程的步骤")

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

    ②：选择导入类型为“Project Files（\*.hiproj）”。

    ③：选择目标文件，例如“demo.hiproj”。

    ④：单击“打开\(O\)”。

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

    **图 3**  打开工程成功<a name="fig1079207141915"></a>  
    ![](figures/打开工程成功.png "打开工程成功")

## 创建多工程工作台<a name="ZH-CN_TOPIC_0000002610180005"></a>

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

**操作步骤<a name="ol1733417354449"></a>**

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

    单击工程菜单下的“将工程文件夹添加到多工程工作区...”，如[图1](#fig208628363234)所示。

    **图 1**  将工程文件夹添加到多工程工作区<a name="fig208628363234"></a>  
    ![](figures/将工程文件夹添加到多工程工作区.png "将工程文件夹添加到多工程工作区")

    选择完后，在弹出的文件夹选择框中，选择已经创建好的MCU工程文件夹，可选择一个或者多个，选择完毕后，单击“添加\(A\)”，如[图2](#fig663115510252)所示。

    **图 2**  添加MCU工程文件夹到工作区<a name="fig663115510252"></a>  
    ![](figures/添加MCU工程文件夹到工作区.png "添加MCU工程文件夹到工作区")

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

    **图 3**  打开多工程工作区<a name="fig17398417122719"></a>  
    ![](figures/打开多工程工作区.png "打开多工程工作区")

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

    **图 4**  保存多工程工作区<a name="fig35708160281"></a>  
    ![](figures/保存多工程工作区.png "保存多工程工作区")

3.  设置活动工程，在资源管理器中，选择工程文件夹，单击鼠标右键，再点击“设为活动工程”按钮，将选中的工程设置为活动工程，如[图5](#fig1256324182910)所示。

    **图 5**  设置活动工程<a name="fig1256324182910"></a>  
    ![](figures/设置活动工程.png "设置活动工程")

    >![](public_sys-resources/icon-note.gif) **说明：** 
    >-   首次打开多工程文件夹会默认将第一个工程文件夹设置为活动工程。
    >-   设置为活动工程后，对应的工程文件夹的字号会变大且加粗区别其他工程。
    >-   设为活动工程后，编译、重编译、清除、烧录、调试、栈分析、镜像分析、芯片配置器以及工程配置功能均针对活动工程。
    >-   多工程工作区在使用芯片配置器和工程配置功能时，需要在设置活动工程之前关闭已经打开的芯片配置器和工程配置功能，便于功能与活动工程刷新匹配。

## 创建多核工程<a name="ZH-CN_TOPIC_0000002610099915"></a>

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

**操作步骤<a name="ol588572135111"></a>**

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

    **图 1**  创建多核工程<a name="fig1995410402584"></a>  
    ![](figures/创建多核工程.png "创建多核工程")

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

    **图 2**  多核工程生成代码<a name="fig19905953165812"></a>  
    ![](figures/多核工程生成代码.png "多核工程生成代码")

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

    **图 3**  工程菜单下的“全量编译”、“全量编译清除”和“全量烧写”选项<a name="fig7552173091213"></a>  
    ![](figures/工程菜单下的-全量编译-全量编译清除-和-全量烧写-选项.png "工程菜单下的-全量编译-全量编译清除-和-全量烧写-选项")

    **图 4**  资源管理器中右键的“全量编译”、“全量编译清除”和“全量烧写”选项<a name="fig848533214136"></a>  
    ![](figures/资源管理器中右键的-全量编译-全量编译清除-和-全量烧写-选项.png "资源管理器中右键的-全量编译-全量编译清除-和-全量烧写-选项")

# 工程配置<a name="ZH-CN_TOPIC_0000002610179993"></a>

工程配置主要用于配置工程的基本信息、编译、调试、烧录等工程配置项，单击“![](figures/zh-cn_image_0000002579660476.png)”按钮可以打开工程配置界面，如[图1](#fig672755464817)所示。

**图 1**  单击工程配置按钮<a name="fig672755464817"></a>  
![](figures/单击工程配置按钮.png "单击工程配置按钮")

-   **[基本信息配置](#ZH-CN_TOPIC_0000002610179947)**  

-   **[编译器配置](#ZH-CN_TOPIC_0000002610179921)**  

-   **[调试器配置](#ZH-CN_TOPIC_0000002579819946)**  

-   **[烧录器配置](#ZH-CN_TOPIC_0000002610099881)**  

## 基本信息配置<a name="ZH-CN_TOPIC_0000002610179947"></a>

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

**图 1**  基本信息配置界面<a name="fig1037202818301"></a>  
![](figures/基本信息配置界面.png "基本信息配置界面")

## 编译器配置<a name="ZH-CN_TOPIC_0000002610179921"></a>

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

**图 1**  编译器配置界面-1<a name="fig177671416389"></a>  
![](figures/编译器配置界面-1.png "编译器配置界面-1")

**图 2**  编译器配置界面-2<a name="fig892832183814"></a>  
![](figures/编译器配置界面-2.png "编译器配置界面-2")

**图 3**  编译器配置界面-3<a name="fig1020319297387"></a>  
![](figures/编译器配置界面-3.png "编译器配置界面-3")

**图 4**  编译器配置界面-4<a name="fig1514082619416"></a>  
![](figures/编译器配置界面-4.png "编译器配置界面-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（当前工程路径）。

    >![](public_sys-resources/icon-note.gif) **说明：** 
    >修改配置之后会自动保存并生效。文本输入框中的修改会在失焦时自动保存并生效。
    >3071的编译优化等级：编译优化选项不支持O3优化等级。

## 调试器配置<a name="ZH-CN_TOPIC_0000002579819946"></a>

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

**图 1**  调试器配置界面<a name="fig161432042858"></a>  
![](figures/调试器配置界面.png "调试器配置界面")

-   Elf文件：指定待调试Elf文件路径，用于镜像分析、栈分析、变量监控和调试。
-   调试客户端：选择调试客户端，默认是gdb。
-   调试工具：选择调试器。
    -   HiSpark-Trace：选择HiSpark-Trace调试器。
    -   HiSpark-Link：选择HiSpark-Link调试器。
    -   HiSparLinkPro：选择HiSparLinkPro调试器。
    -   JLink：选择JLink调试器。

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

        **图 2**  JLinkGDBServerCL默认路径<a name="fig0240165395418"></a>  
        ![](figures/JLinkGDBServerCL默认路径.png "JLinkGDBServerCL默认路径")

-   JlinkScript路径 ：配置JLink启动脚本，用于连接HiSpark Studio工具和芯片内核。
-   调试接口：选择调试器的连接模式jtag或swd，默认配置成swd。
-   调试速率：配置调试器速率，单位：MHz或kHz。
-   加载超时（秒）：调试选择launch模式，会先将镜像加载到MCU中，选择一个加载时间，如果加载超时会自动退出调试。

>![](public_sys-resources/icon-note.gif) **说明：** 
>-   使用HiSpark-Link时需要安装HiSpark-Link驱动，详情请参见《HiSpark调试器系列 使用指南》。
>-   使用JLink时需要先安装JLink驱动。
>-   修改配置之后会自动保存并生效。
>-   MCU系列工程支持HiSpark-Trace、HiSpark-Link和JLink调试方式。
>-   3071只支持HiSparLinkPro调试器。

## 烧录器配置<a name="ZH-CN_TOPIC_0000002610099881"></a>

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

**图 1**  程序加载配置界面<a name="fig1851473982716"></a>  

![](figures/zh-cn_image_0000002610100343.png)

-   传输方式：选择数据传输方式。选择不同的传输方式会出现不同的参数配置项。
    -   swd：选择通过swd接口传输。如[图2](#fig219531772715)所示。

        -   调试板：选择调试器。默认选择“HiSpark-Trace”，可选“HiSpark-Link”、“HiSparLinkPro”和“HiSpark-Trace”。
        -   频率 ：配置调试器速率，单位：MHz或kHz。

        **图 2**  选择swd配置界面<a name="fig219531772715"></a>  
        ![](figures/选择swd配置界面.png "选择swd配置界面")

    -   jtag：选择通过jtag接口传输。如[图3](#fig0858134123619)所示。

        -   调试板：选择调试器。默认选择“HiSpark-Trace”，可选“HiSpark-Link”和“HiSpark-Trace”。
        -   频率 ：配置调试器速率，单位：MHz或kHz。

        **图 3**  选择jtag配置界面<a name="fig0858134123619"></a>  
        
        ![](figures/zh-cn_image_0000002579820468.png)

    -   serial：选择通过串口传输。如[图4](#fig58771855184310)所示。

        -   端口
        -   波特率

        **图 4**  选择serial配置界面<a name="fig58771855184310"></a>  
        
        ![](figures/zh-cn_image_0000002579660556.png)

    -   usb：选择通过USB设备完成烧写升级。如[图5](#fig10468263017)所示。
        -   Usb设备列表

            **图 5**  选择usb配置界面<a name="fig10468263017"></a>  
            
            ![](figures/zh-cn_image_0000002579820470.png)

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

            **图 6**  切换Usb模式不支持烧录配置<a name="fig16526892319"></a>  
            ![](figures/切换Usb模式不支持烧录配置.png "切换Usb模式不支持烧录配置")

    -   i2c：选择通过i2c接口传输。如图选择i2c配置界面所示。（当前i2c烧写模式仅3071芯片支持）
        -   调试板：选择调试器。仅支持选择“HiSparkLinkPro”。
        -   频率：配置调试器速率，单位：MHz或kHz。

            **图 7**  传输方式切换为i2c<a name="fig15260154516234"></a>  
            ![](figures/传输方式切换为i2c.png "传输方式切换为i2c")

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

            **图 8**  i2c模式下支持.hex和.bin文件烧写<a name="fig1095631920240"></a>  
            ![](figures/i2c模式下支持-hex和-bin文件烧写.png "i2c模式下支持-hex和-bin文件烧写")

            ![](figures/zh-cn_image_0000002579660554.png)

-   烧写文件：指定需要烧写的文件。

    >![](public_sys-resources/icon-note.gif) **说明：** 
    >MCU系列的工程“Bin文件”中为.bin文件，FBB系列的工程为.fwpkg文件。
    >SWD模式烧写时，3071芯片仅支持HiSParkLinkPro板，其它芯片支持HiSpark-Link和HisPark-Trace板可选。
    >切换烧写模式时会自动更新当前模式下适配的默认频率（存在时）、默认烧写文件等内容。
    >3071的选择通过i2c接口传输频率：配置调试器速率，单位：kHz。

-   烧录后复位：烧录完成后，会进行单板软复位。
-   烧录后校验：烧录后，会将烧录文件进行回读对比，校验文件的完整性。

>![](public_sys-resources/icon-note.gif) **说明：** 
>-   使用HiSpark-Link时需要安装HiSpark-Link驱动，具体请参见《HiSpark调试器系列 使用指南》。
>-   MCU系列芯片当前共支持swd、jtag、serial和i2c四种烧录方式；FBB系列芯片除BS20、BS20C、BS21、BS21A、BS21E、BS22、BS25和BS26支持serial和usb两种烧录方式外，其余芯片仅支持serial烧录。
>-   修改配置之后会自动保存并生效。

# chipconfig配置<a name="ZH-CN_TOPIC_0000002579660112"></a>

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

-   **[功能介绍](#ZH-CN_TOPIC_0000002579820022)**  

-   **[功能入口](#ZH-CN_TOPIC_0000002579820002)**  

-   **[芯片配置器主界面](#ZH-CN_TOPIC_0000002610179975)**  

-   **[驱动模块配置举例（I2C）](#ZH-CN_TOPIC_0000002610179937)**  

-   **[样例配置举例（仅支持MCU系列芯片）](#ZH-CN_TOPIC_0000002579820006)**  

-   **[Clock配置（仅支持MCU系列芯片）](#ZH-CN_TOPIC_0000002610099833)**  

-   **[LDS配置（仅支持MCU系列芯片）](#ZH-CN_TOPIC_0000002579660050)**  

-   **[APT主从配置（仅支持MCU系列芯片）](#ZH-CN_TOPIC_0000002610099825)**  

-   **[中间件配置（仅支持MCU系列芯片）](#ZH-CN_TOPIC_0000002610099853)**  

-   **[多核配置（仅支持3066H和3067M系列芯片）](#ZH-CN_TOPIC_0000002610099911)**  

## 功能介绍<a name="ZH-CN_TOPIC_0000002579820022"></a>

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

## 功能入口<a name="ZH-CN_TOPIC_0000002579820002"></a>

打开工程后，单击工具栏中的“![](figures/zh-cn_image_0000002610100189.png)”选项，如[图1](#fig964311399383)所示。

**图 1**  芯片配置器入口<a name="fig964311399383"></a>  
![](figures/芯片配置器入口.png "芯片配置器入口")

## 芯片配置器主界面<a name="ZH-CN_TOPIC_0000002610179975"></a>

**图 1**  芯片配置器主界面<a name="fig88678511231"></a>  

![](figures/1_zh-cn_image_0000001896796129.png)

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

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

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

>![](public_sys-resources/icon-note.gif) **说明：** 
>不是所有驱动模块都存在图形化视图。芯片配置器支持的芯片系列参考[表1](#table82241939151116)。

-   **[模块列表菜单区详细介绍](#ZH-CN_TOPIC_0000002579819980)**  

-   **[模块视图区详细介绍](#ZH-CN_TOPIC_0000002579819950)**  

### 模块列表菜单区详细介绍<a name="ZH-CN_TOPIC_0000002579819980"></a>

**图 1**  模块列表菜单区<a name="fig495912317620"></a>  
![](figures/模块列表菜单区.png "模块列表菜单区")

①  ![](figures/zh-cn_image_0000002610180289.png)：生成代码按钮。

②  ![](figures/zh-cn_image_0000002610180287.png)：模块列表菜单区驱动模块名称搜索框。

③  ![](figures/zh-cn_image_0000002610180283.png)：模块列表排序方式，“类别” 代表按模块类别分类排序，“A-\>Z”代表模块名称按字母排序。

④  ![](figures/zh-cn_image_0000002579660394.png)：模块未使能状态。

⑤  ![](figures/zh-cn_image_0000002610100187.png)：模块已使能状态。

⑥  ![](figures/zh-cn_image_0000002579820308.png)：驱动模块配置正确。

### 模块视图区详细介绍<a name="ZH-CN_TOPIC_0000002579819950"></a>

-   **[模块视图操作菜单栏](#ZH-CN_TOPIC_0000002579660040)**  

-   **[视图切换操作栏](#ZH-CN_TOPIC_0000002579660066)**  

-   **[管脚视图介绍](#ZH-CN_TOPIC_0000002610179931)**  

-   **[Code Preview代码预览视图介绍](#ZH-CN_TOPIC_0000002610099821)**  

-   **[Component View图形化视图介绍](#ZH-CN_TOPIC_0000002610179991)**  

#### 模块视图操作菜单栏<a name="ZH-CN_TOPIC_0000002579660040"></a>

**图 1**  模块视图操作菜单栏<a name="fig380616341973"></a>  
![](figures/模块视图操作菜单栏.png "模块视图操作菜单栏")

-   ![](figures/zh-cn_image_0000002579820098.png)：视图缩小操作按钮。
-   ![](figures/zh-cn_image_0000002610180071.png)：当前视图缩放比例。
-   ![](figures/zh-cn_image_0000002579660182.png)：视图放大操作按钮。
-   ![](figures/zh-cn_image_0000002579820096.png)：重置放大比例到百分百。
-   ![](figures/zh-cn_image_0000002579660178.png)：展开/折叠模块参数区。

#### 视图切换操作栏<a name="ZH-CN_TOPIC_0000002579660066"></a>

**图 1**  视图切换操作栏<a name="fig639612114116"></a>  
![](figures/视图切换操作栏.png "视图切换操作栏")

-   ![](figures/zh-cn_image_0000002610099989.png)：管脚视图。
-   ![](figures/zh-cn_image_0000002579660194.png)：代码视图。
-   ![](figures/zh-cn_image_0000002610180087.png)：图形化视图。

#### 管脚视图介绍<a name="ZH-CN_TOPIC_0000002610179931"></a>

**图 1**  管脚视图介绍<a name="fig172851612201116"></a>  
![](figures/管脚视图介绍.png "管脚视图介绍")

①   ![](figures/zh-cn_image_0000002610180257.jpg)：鼠标放在管脚上出现的悬浮提示信息，展示当前管脚可配置选项，打勾为配置值，单击“Reset State”可取消当前配置值，“Go to Details”进入该管脚复用的配置界面。

②  ![](figures/zh-cn_image_0000002579820276.jpg)：灰底白字代表管脚尚未配置。

③  ![](figures/zh-cn_image_0000002579820282.jpg)：绿色代表管脚已被配置。

④  ![](figures/zh-cn_image_0000002579820274.jpg)：灰底灰字代表管脚不可配置。

⑤  ![](figures/zh-cn_image_0000002610100153.jpg)：管脚当前配置值。

⑥  ![](figures/zh-cn_image_0000002579660364.jpg)：当前模块可配置的功能管脚。

>![](public_sys-resources/icon-note.gif) **说明：** 
>管脚视图支持通过拖拽的方式查看被遮挡的管脚配置值。

#### Code Preview代码预览视图介绍<a name="ZH-CN_TOPIC_0000002610099821"></a>

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

**图 1**  Code Preview代码预览视图介绍<a name="fig154865010212"></a>  
![](figures/Code-Preview代码预览视图介绍.png "Code-Preview代码预览视图介绍")

①  ![](figures/zh-cn_image_0000002579660240.png)：代码预览源文件切换。

②  ![](figures/zh-cn_image_0000002579820158.png)  ：自动生成的代码在电脑中的存储路径。

③  ![](figures/zh-cn_image_0000002610100029.jpg)：最新的代码修改提示，红色代表删除，绿色代表新增。

④ 代码展示区。

#### Component View图形化视图介绍<a name="ZH-CN_TOPIC_0000002610179991"></a>

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

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

**图 1**  Component View图形化视图介绍<a name="fig785714341244"></a>  
![](figures/Component-View图形化视图介绍.png "Component-View图形化视图介绍")

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

-   Parameters：详细参数配置。
-   Pins：管脚配置。

>![](public_sys-resources/icon-note.gif) **说明：** 
>Component View配置内容跟随模块的变化而变化。

## 驱动模块配置举例（I2C）<a name="ZH-CN_TOPIC_0000002610179937"></a>

-   **[使能I2C驱动模块](#ZH-CN_TOPIC_0000002579819964)**  

-   **[配置驱动模块PIN脚](#ZH-CN_TOPIC_0000002579820014)**  

-   **[配置驱动模块参数](#ZH-CN_TOPIC_0000002579660080)**  

-   **[预览I2C驱动模块配置代码](#ZH-CN_TOPIC_0000002610179989)**  

-   **[生成驱动模块的代码](#ZH-CN_TOPIC_0000002610099837)**  

### 使能I2C驱动模块<a name="ZH-CN_TOPIC_0000002579819964"></a>

**图 1**  I2C驱动模块配置界面<a name="fig2175351718"></a>  
![](figures/I2C驱动模块配置界面.png "I2C驱动模块配置界面")

①  ![](figures/zh-cn_image_0000002610180203.png)：展开模块列表菜单区。

②  ![](figures/zh-cn_image_0000002610180201.png)：模块开关。

### 配置驱动模块PIN脚<a name="ZH-CN_TOPIC_0000002579820014"></a>

**图 1**  I2C驱动模块PIN脚配置<a name="fig14201249913"></a>  
![](figures/I2C驱动模块PIN脚配置.png "I2C驱动模块PIN脚配置")

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

② 选中的“I2C0\_SDA”。

**图 2**  更换I2C使能PIN脚<a name="fig9515121813106"></a>  
![](figures/更换I2C使能PIN脚.png "更换I2C使能PIN脚")

### 配置驱动模块参数<a name="ZH-CN_TOPIC_0000002579660080"></a>

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

**图 1**  I2C驱动模块参数配置<a name="fig7798113716612"></a>  
![](figures/I2C驱动模块参数配置.png "I2C驱动模块参数配置")

### 预览I2C驱动模块配置代码<a name="ZH-CN_TOPIC_0000002610179989"></a>

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

**图 1**  I2C驱动模块代码预览<a name="fig163988238"></a>  
![](figures/I2C驱动模块代码预览.png "I2C驱动模块代码预览")

### 生成驱动模块的代码<a name="ZH-CN_TOPIC_0000002610099837"></a>

**图 1**  生成驱动模块代码<a name="fig171601205256"></a>  
![](figures/生成驱动模块代码.png "生成驱动模块代码")

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

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

## 样例配置举例（仅支持MCU系列芯片）<a name="ZH-CN_TOPIC_0000002579820006"></a>

**操作步骤<a name="ol2883171131313"></a>**

1.  打开样例列表。

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

    **图 1**  SAMPLE列表<a name="fig1907105133815"></a>  
    ![](figures/SAMPLE列表.png "SAMPLE列表")

2.  搜索选择“Motorcontrolsystem"。

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

    **图 2**  搜索并选择Motorcontrolsystem Sample<a name="fig689510491391"></a>  
    ![](figures/搜索并选择Motorcontrolsystem-Sample.png "搜索并选择Motorcontrolsystem-Sample")

3.  生成Sample代码。

    弹窗提示“将加载Motorcontrolsystem配置，并覆盖当前所有配置（Clock, Pins, Module Settings等），是否确认使用？”，选择“确认”。

    **图 3**  弹出提示对话框<a name="fig46792571141"></a>  
    ![](figures/弹出提示对话框.png "弹出提示对话框")

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

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

    **图 4**  选择Motorcontrolsystem Sample结果<a name="fig6551357154017"></a>  
    ![](figures/选择Motorcontrolsystem-Sample结果.png "选择Motorcontrolsystem-Sample结果")

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

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

    **图 5**  代码预览界面<a name="fig71141097418"></a>  
    ![](figures/代码预览界面.png "代码预览界面")

## Clock配置（仅支持MCU系列芯片）<a name="ZH-CN_TOPIC_0000002610099833"></a>

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

**图 1**  CLOCK时钟控制器界面<a name="fig9710841141515"></a>  
![](figures/CLOCK时钟控制器界面.png "CLOCK时钟控制器界面")

① 工具栏：![](figures/zh-cn_image_0000002610180233.png)  是调整缩放比例，![](figures/zh-cn_image_0000002579820244.png)  是重置图片初始位置和大小，![](figures/zh-cn_image_0000002579660332.png)恢复时钟设置到上一次生成代码的状态。

②  ![](figures/zh-cn_image_0000002579660340.jpg)：可以修改的时钟值。

③  ![](figures/zh-cn_image_0000002579820254.jpg)：固定的时钟值，不能被主动修改。

④  ![](figures/zh-cn_image_0000002610180225.png)：选择输入的时钟源。

⑤ PLL时钟源，其中![](figures/zh-cn_image_0000002579660338.png)、![](figures/zh-cn_image_0000002579660336.png)、![](figures/zh-cn_image_0000002610100121.png)表示分频的系数，其余表示计算的时钟结果。

⑥  ![](figures/zh-cn_image_0000002579820258.png)警告：红色数字表示配置的时钟频率超过了MCU运行的范围，需要用户主动修改。

>![](public_sys-resources/icon-notice.gif) **须知：** 
>当Clock页面有警告存在时，用户无法生成代码。单击生成代码会出现如下图提示：
>![](figures/zh-cn_image_0000002579660328.png)
>提示原因：红色数字表示在频率范围内异常，需要用户主动修改在正常范围内。
>![](figures/zh-cn_image_0000002579820250.png)

## LDS配置（仅支持MCU系列芯片）<a name="ZH-CN_TOPIC_0000002579660050"></a>

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

**图 1**  LDS配置界面<a name="fig1373105764210"></a>  
![](figures/LDS配置界面.png "LDS配置界面")

①：LDS菜单项。

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

③：LDS配置信息。

-   RAM Reserve Data

    定义：固化变量地址。

    用法：使用RESERVED\_DATA声明变量，例如，RESERVED\_DATA unsigned int g\_test1。

    **图 2**  使能RAM Reserve Data<a name="fig119491819104317"></a>  
    ![](figures/使能RAM-Reserve-Data.png "使能RAM-Reserve-Data")

-   RAM Code

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

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

    **图 3**  使能RAM Code<a name="fig118801953162019"></a>  
    ![](figures/使能RAM-Code.png "使能RAM-Code")

-   RAM Code Path

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

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

    **图 4**  选择需要放入RAM中的.c文件<a name="fig039951716215"></a>  
    ![](figures/选择需要放入RAM中的-c文件.png "选择需要放入RAM中的-c文件")

## APT主从配置（仅支持MCU系列芯片）<a name="ZH-CN_TOPIC_0000002610099825"></a>

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

**图 1**  APT主从配置界面<a name="fig165431516164"></a>  
![](figures/APT主从配置界面.png "APT主从配置界面")

①：APT1开关。

②：设定为主配置项。

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

**图 2**  APT0设定为从<a name="fig8761156124320"></a>  
![](figures/APT0设定为从.png "APT0设定为从")

①：APT0开关。

②：设定为从配置项。

③：从APT1配置项。

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

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

**图 3**  主从配置代码-1<a name="fig152210429151"></a>  
![](figures/主从配置代码-1.png "主从配置代码-1")

**图 4**  主从配置代码-2<a name="fig394075752216"></a>  
![](figures/主从配置代码-2.png "主从配置代码-2")

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

复用配置项如[图5](#fig7608685464)、[图6](#fig1384510237468)和[图7](#fig20476193813234)所示。

**图 5**  复用配置项-1<a name="fig7608685464"></a>  
![](figures/复用配置项-1.png "复用配置项-1")

**图 6**  复用配置项-2<a name="fig1384510237468"></a>  
![](figures/复用配置项-2.png "复用配置项-2")

**图 7**  复用配置项-3<a name="fig20476193813234"></a>  
![](figures/复用配置项-3.png "复用配置项-3")

不被复用配置项如[图8](#fig1526015262311)、[图9](#fig41721158162320)和[图10](#fig16244125814713)所示。

**图 8**  不被复用配置项-1<a name="fig1526015262311"></a>  
![](figures/不被复用配置项-1.png "不被复用配置项-1")

**图 9**  不被复用配置项-2<a name="fig41721158162320"></a>  
![](figures/不被复用配置项-2.png "不被复用配置项-2")

**图 10**  不被复用配置项-3<a name="fig16244125814713"></a>  
![](figures/不被复用配置项-3.png "不被复用配置项-3")

## 中间件配置（仅支持MCU系列芯片）<a name="ZH-CN_TOPIC_0000002610099853"></a>

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

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

**图 1**  Middleware中间件配置界面<a name="fig14869141822420"></a>  
![](figures/Middleware中间件配置界面.png "Middleware中间件配置界面")

进入“MIDDLEWARE 配置信息”界面，勾选列表中的选项后，点击“生成代码”按钮，工程目录中middleware文件夹下就会生成对应的中间件源码文件，如[图\_勾选电机控制库中间件](#p109721249141413)所示。

**图 2**  勾选电机控制库中间件<a name="fig2661441161019"></a>  
![](figures/勾选电机控制库中间件.png "勾选电机控制库中间件")

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

**图 3**  默认生成中间件的静态库文件<a name="fig2746153101818"></a>  
![](figures/默认生成中间件的静态库文件.png "默认生成中间件的静态库文件")

## 多核配置（仅支持3066H和3067M系列芯片）<a name="ZH-CN_TOPIC_0000002610099911"></a>

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

**图 1**  多核模块分配视图<a name="fig14869141822420"></a>  
![](figures/多核模块分配视图.png "多核模块分配视图")

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

**图 2**  单一核且不可修改<a name="fig2099164513129"></a>  
![](figures/单一核且不可修改.png "单一核且不可修改")

核间互斥的模块，如UART，仅支持勾选其中一个核，且至少勾选一个核，如[图3](#fig1920254171210)。

**图 3**  核间互斥<a name="fig1920254171210"></a>  
![](figures/核间互斥.png "核间互斥")

核间共享的模块，如ADC，支持同时勾选多个核，如[图4](#fig193680712135)。

**图 4**  核间共享<a name="fig193680712135"></a>  
![](figures/核间共享.png "核间共享")

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

**图 5**  ADC的CPU配置联动<a name="fig43142210159"></a>  
![](figures/ADC的CPU配置联动.png "ADC的CPU配置联动")

# 编译运行<a name="ZH-CN_TOPIC_0000002579660042"></a>

-   **[编译按钮介绍](#ZH-CN_TOPIC_0000002610099841)**  

-   **[编译结果](#ZH-CN_TOPIC_0000002579819966)**  

-   **[编译生成静态库](#ZH-CN_TOPIC_0000002579819998)**  

-   **[使用静态库参与编译](#ZH-CN_TOPIC_0000002579660036)**  

-   **[对单个文件或文件夹设置编译选项](#ZH-CN_TOPIC_0000002579660058)**  

## 编译按钮介绍<a name="ZH-CN_TOPIC_0000002610099841"></a>

**图 1**  编译按钮<a name="fig1012285513416"></a>  
![](figures/编译按钮.png "编译按钮")

[图1](#fig1012285513416)按钮依次是：清除、编译、重编译和停止编译按钮。

-   ![](figures/zh-cn_image_0000002579660314.png)：单击触发工程清理，删除编译中间生成的文件。
-   ![](figures/zh-cn_image_0000002579820232.png)：单击触发工程编译。
-   ![](figures/zh-cn_image_0000002610100109.png)：单击触发先清理再编译。
-   ![](figures/zh-cn_image_0000002610180207.png)：单击触发停止编译。

## 编译结果<a name="ZH-CN_TOPIC_0000002579819966"></a>

单击“![](figures/zh-cn_image_0000002610180063.png)”按钮开始编译，编译成功后终端窗口输出如[图1](#fig9925105200)所示，且工程目录中生成output目录如[图2](#fig114873277206)所示。

>![](public_sys-resources/icon-note.gif) **说明：** 
>MCU系列芯片编译成功后, 工程目录中生成OUT目录。

**图 1**  编译成功<a name="fig9925105200"></a>  
![](figures/编译成功.png "编译成功")

**图 2**  编译生成output目录<a name="fig114873277206"></a>  
![](figures/编译生成output目录.png "编译生成output目录")

单击![](figures/zh-cn_image_0000002579660170.png)按钮开始清除编程生成的文件，成功后终端窗口输出如[图3](#fig1710335292011)所示。工程清理会清除工程目录下的output文件夹。

**图 3**  清除工程编译成功<a name="fig1710335292011"></a>  

![](figures/zh-cn_image_0000002579660168.png)

## 编译生成静态库<a name="ZH-CN_TOPIC_0000002579819998"></a>

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

**操作步骤<a name="ol13265113275915"></a>**

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

    **图 1**  静态库配置<a name="fig18878132542220"></a>  
    ![](figures/静态库配置.png "静态库配置")

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

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

    **图 2**  输入静态库名字<a name="fig484053232210"></a>  
    ![](figures/输入静态库名字.png "输入静态库名字")

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

    **图 3**  选择要生成静态库的源文件<a name="fig296914348228"></a>  
    ![](figures/选择要生成静态库的源文件.png "选择要生成静态库的源文件")

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

    **图 4**  选择要生成静态库的头文件路径<a name="fig875163710220"></a>  
    ![](figures/选择要生成静态库的头文件路径.png "选择要生成静态库的头文件路径")

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

    **图 5**  静态库的生成路径<a name="fig2079334113225"></a>  
    ![](figures/静态库的生成路径.png "静态库的生成路径")

## 使用静态库参与编译<a name="ZH-CN_TOPIC_0000002579660036"></a>

**使用工程中的静态库文件<a name="section18863661645"></a>**

**操作步骤<a name="ol82061823102310"></a>**

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

    >![](public_sys-resources/icon-note.gif) **说明：** 
    >不要在out\\libs目录下面放入.a ，否则会在clean的时候被清除。

2.  将静态库对应的.h文件移至“thirdparty\\sysroot\\include”路径下。
3.  在工程中包含对应的头文件，即可调用自定义静态库中的接口。

**使用工程之外的静态库文件<a name="section1866313180420"></a>**

**操作步骤<a name="ol284411692715"></a>**

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

    **图 1**  外部静态库配置项<a name="fig57631244152214"></a>  
    ![](figures/外部静态库配置项.png "外部静态库配置项")

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

## 对单个文件或文件夹设置编译选项<a name="ZH-CN_TOPIC_0000002579660058"></a>

>![](public_sys-resources/icon-note.gif) **说明：** 
>“设置独立编译选项”功能仅支持MCU工程。

**操作步骤<a name="ol17332121311216"></a>**

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

    **图 1**  设置独立编译选项入口<a name="fig993494916201"></a>  
    ![](figures/设置独立编译选项入口.png "设置独立编译选项入口")

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

    **图 2**  独立编译参数设置界面<a name="fig14827171017193"></a>  
    ![](figures/独立编译参数设置界面.png "独立编译参数设置界面")

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

    ②：编译选项设置。

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

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

# 软件包烧录<a name="ZH-CN_TOPIC_0000002610179933"></a>

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

-   **[连接烧录串口线](#ZH-CN_TOPIC_0000002579820016)**  

-   **[配置工程的烧录选项](#ZH-CN_TOPIC_0000002579819960)**  

-   **[烧录配置](#ZH-CN_TOPIC_0000002610179957)**  

-   **[jtag与swd烧录（仅支持MCU系列芯片）](#ZH-CN_TOPIC_0000002579820030)**  

-   **[i2c烧录（仅支持MCU的3071芯片\)](#ZH-CN_TOPIC_0000002610180015)**  

## 连接烧录串口线<a name="ZH-CN_TOPIC_0000002579820016"></a>

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

**图 1**  烧录串口连接示意图<a name="fig8881486226"></a>  
![](figures/烧录串口连接示意图.png "烧录串口连接示意图")

## 配置工程的烧录选项<a name="ZH-CN_TOPIC_0000002579819960"></a>

**操作步骤<a name="ol895mcpsimp"></a>**

1.  配置好硬件环境。

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

2.  <a name="li207851059104511"></a>确定所连接的串口号。

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

    **图 1**  串口选择<a name="fig55913473219"></a>  
    ![](figures/串口选择.png "串口选择")

    >![](public_sys-resources/icon-notice.gif) **须知：** 
    >如果使用USB转串口方式烧录，请安装USB转串口的驱动程序。

3.  进入工程配置界面。

    打开要烧录的工程后，单击顶部的“![](figures/zh-cn_image_0000002579660230.png)”按钮，进入工程配置界面。

    **图 2**  工程配置入口<a name="fig337113913219"></a>  
    ![](figures/工程配置入口.png "工程配置入口")

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

    **图 3**  串口烧录配置<a name="fig99981772213"></a>  
    ![](figures/串口烧录配置.png "串口烧录配置")

    >![](public_sys-resources/icon-notice.gif) **须知：** 
    >MCU系列的工程“Bin文件”中为.bin文件。

5.  单击工具栏中的烧录按钮![](figures/zh-cn_image_0000002579820148.png)，开始执行烧写。

    **图 4**  烧录按钮入口<a name="fig1518855418224"></a>  
    ![](figures/烧录按钮入口.png "烧录按钮入口")

6.  按提示复位设备，烧录成功后终端窗口输出如[图5](#fig9672125742319)所示。

    **图 5**  烧录成功<a name="fig9672125742319"></a>  
    ![](figures/烧录成功.png "烧录成功")

## 烧录配置<a name="ZH-CN_TOPIC_0000002610179957"></a>

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

>![](public_sys-resources/icon-note.gif) **说明：** 
>烧录配置支持MCU。MCU可以支持导入.bin的分区文件类型。

**操作步骤<a name="ol928mcpsimp"></a>**

1.  <a name="p913mcpsimp"></a>单击工具栏中的“程序加载”下拉三角框的“烧录配置”，进入烧录配置界面。

    **图 1**  烧录配置按钮及界面<a name="fig18205858181719"></a>  
    ![](figures/烧录配置按钮及界面.png "烧录配置按钮及界面")

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

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

    **图 2**  MCU烧录配置分区文件路径<a name="fig1433134512193"></a>  
    ![](figures/MCU烧录配置分区文件路径.png "MCU烧录配置分区文件路径")

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

    **图 3**  FBB分区文件解析展示<a name="fig1036952172214"></a>  
    ![](figures/FBB分区文件解析展示.png "FBB分区文件解析展示")

    **图 4**  MCU分区文件解析展示（以target.bin为例）<a name="fig45603180229"></a>  
    ![](figures/MCU分区文件解析展示（以target-bin为例）.png "MCU分区文件解析展示（以target-bin为例）")

4.  烧录之前需要配置传输方式及其他参数信息，具体操作请参见“[烧录器配置](#ZH-CN_TOPIC_0000002610099881)”章节。
5.  单击“烧写”按钮，根据提示重启开发板，即可开始烧录。

    **图 5**  烧录<a name="fig7508701238"></a>  
    ![](figures/烧录.png "烧录")

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

    **图 6**  烧录进度<a name="fig19626111222410"></a>  
    ![](figures/烧录进度.png "烧录进度")

    **图 7**  烧写成功终端内容<a name="fig377133292415"></a>  
    ![](figures/烧写成功终端内容.png "烧写成功终端内容")

## jtag与swd烧录（仅支持MCU系列芯片）<a name="ZH-CN_TOPIC_0000002579820030"></a>

-   **[连接烧录设备](#ZH-CN_TOPIC_0000002579660032)**  

-   **[配置工程的烧录选项](#ZH-CN_TOPIC_0000002579660084)**  

### 连接烧录设备<a name="ZH-CN_TOPIC_0000002579660032"></a>

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

>![](public_sys-resources/icon-notice.gif) **须知：** 
>四合一调试器有多个连接口，连接错误会导致烧录失败，注意检查。

### 配置工程的烧录选项<a name="ZH-CN_TOPIC_0000002579660084"></a>

**操作步骤<a name="ol104857578136"></a>**

1.  进入工程配置界面。

    打开要烧录的工程后，单击顶部的“![](figures/zh-cn_image_0000002610100223.png)”按钮，进入工程配置界面→进入程序加载。选择传输方式为“swd”或者“jtag”并配置其他参数。

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

    **图 1**  烧录选项配置<a name="fig5248172011433"></a>  
    ![](figures/烧录选项配置.png "烧录选项配置")

3.  单击烧录按钮“![](figures/zh-cn_image_0000002579660436.png)”或者“[烧录配置](#ZH-CN_TOPIC_0000002610179957)”中的烧录按钮，即可开始烧录。
4.  烧录成功后终端窗口输出如[图2](#fig1467542411386)所示。

    **图 2**  烧录成功<a name="fig1467542411386"></a>  
    ![](figures/烧录成功-0.png "烧录成功-0")

## i2c烧录（仅支持MCU的3071芯片\)<a name="ZH-CN_TOPIC_0000002610180015"></a>

-   **[连接烧录设置](#ZH-CN_TOPIC_0000002610099909)**  

-   **[配置工程的烧录选项](#ZH-CN_TOPIC_0000002610179969)**  

### 连接烧录设置<a name="ZH-CN_TOPIC_0000002610099909"></a>

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

>![](public_sys-resources/icon-notice.gif) **须知：** 
>HiSparkPro调试器有多个连接口，连接错误会导致烧录失败，注意检查。

### 配置工程的烧录选项<a name="ZH-CN_TOPIC_0000002610179969"></a>

**操作步骤<a name="ol9692208132016"></a>**

1.  进入工程配置界面。

    打开要烧录的工程后，单击顶部的“![](figures/zh-cn_image_0000002579820188.png)”按钮，进入工程配置界面→进入程序加载。选择传输方式为“i2c”配置其他参数。

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

    **图 1**  图1 烧录选项配置<a name="fig13171142162413"></a>  
    ![](figures/图1-烧录选项配置.png "图1-烧录选项配置")

3.  单击烧录按钮“![](figures/zh-cn_image_0000002610100065.png)”或者“[烧录配置](#ZH-CN_TOPIC_0000002610179957)”中的烧录按钮，即可开始烧录。
4.  烧录成功后终端窗口输出如[图2](#fig8962121451717)所示。

    **图 2**  烧录成功<a name="fig8962121451717"></a>  
    ![](figures/烧录成功-1.png "烧录成功-1")

# 栈分析和镜像分析<a name="ZH-CN_TOPIC_0000002579819984"></a>

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

-   Stack Analysis栈分析工具是基于静态二进制分析手段，提供任务栈开销估算值和函数调用关系图示，为栈内存使用、分析、优化、问题定位等开发场景提供较为准确的静态内存分析数据参考。
-   Image Analysis镜像分析工具对工程构建出的.elf文件进行内存占用分析，支持开发者快速评估内存段、符号表使用情况。

-   **[栈分析](#ZH-CN_TOPIC_0000002610179971)**  

-   **[镜像分析](#ZH-CN_TOPIC_0000002610179939)**  

## 栈分析<a name="ZH-CN_TOPIC_0000002610179971"></a>

**功能介绍<a name="section148321529151417"></a>**

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

**功能入口<a name="section17325123961615"></a>**

创建工程并成功编译后，单击工具栏中“![](figures/zh-cn_image_0000002610180279.png)”按钮进行栈分析。

**栈分析功能页面<a name="section125419179175"></a>**

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

**图 1**  功能列表页面<a name="fig4596122219257"></a>  
![](figures/功能列表页面.png "功能列表页面")

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

**图 2**  调用图页面<a name="fig1384164712519"></a>  
![](figures/调用图页面.png "调用图页面")

**统计项说明<a name="section618mcpsimp"></a>**

-   最大开销：为当前函数所有子函数中最大的栈开销与循环调用的次数的乘积再加上自身的开销。

    计算公式： max（子函数1的自身栈开销， 子函数2的自身栈开销，子函数3的自身栈开销，…） × 循环次数＋函数的自身栈开销

-   本地开销：当前函数的自身栈开销。
-   深度：当前函数每增加一层子函数，深度增加一层。

## 镜像分析<a name="ZH-CN_TOPIC_0000002610179939"></a>

**功能介绍<a name="section538803119292"></a>**

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

**功能入口<a name="section1582295611297"></a>**

创建工程并成功编译后，单击工具栏中的“![](figures/zh-cn_image_0000002579820266.png)”按钮。

**功能界面<a name="section1533673619307"></a>**

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

**图 1**  内存区域页面<a name="fig1787391122717"></a>  
![](figures/内存区域页面.png "内存区域页面")

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

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

**图 2**  内存详细信息页面<a name="fig15591937172713"></a>  
![](figures/内存详细信息页面.png "内存详细信息页面")

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

**图 3**  文件大小页面<a name="fig9261641289"></a>  
![](figures/文件大小页面.png "文件大小页面")

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

**图 4**  模块大小页面<a name="fig1367222122813"></a>  
![](figures/模块大小页面.png "模块大小页面")

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

**图 5**  文件夹大小<a name="fig1075993892817"></a>  
![](figures/文件夹大小.png "文件夹大小")

# 工程调试<a name="ZH-CN_TOPIC_0000002625369385"></a>

-   **[调试配置选项](#ZH-CN_TOPIC_0000002594929790)**  

-   **[启动调试](#ZH-CN_TOPIC_0000002625289243)**  

-   **[常用调试功能](#ZH-CN_TOPIC_0000002594769890)**  

-   **[变量跟踪功能](#ZH-CN_TOPIC_0000002625369391)**  

-   **[常用调试命令](#ZH-CN_TOPIC_0000002594929794)**  

-   **[断点（BREAKPOINTS）](#ZH-CN_TOPIC_0000002625289247)**  

-   **[变量（VARIABLES）](#ZH-CN_TOPIC_0000002594769896)**  

-   **[监视（WATCH）](#ZH-CN_TOPIC_0000002625369393)**  

-   **[性能分析功能](#ZH-CN_TOPIC_0000002594929798)**  

-   **[查看和修改外设寄存器（PERIPHERALS）](#ZH-CN_TOPIC_0000002625289249)**  

-   **[查看调用栈（CALL STACK）](#ZH-CN_TOPIC_0000002625289253)**  

-   **[实时监视（Live Watch） 调试功能](#ZH-CN_TOPIC_0000002594769902)**  

-   **[内存窗口（MEMORY）](#ZH-CN_TOPIC_0000002594769904)**  

-   **[内存断点](#ZH-CN_TOPIC_0000002659848077)**  

-   **[反汇编（DISASSEMBLY）](#ZH-CN_TOPIC_0000002625369405)**  

-   **[实时模式](#ZH-CN_TOPIC_0000002625289257)**  

-   **[HiSparkLinkPro（仅支持3071）](#ZH-CN_TOPIC_0000002594769906)**  

## 调试配置选项<a name="ZH-CN_TOPIC_0000002594929790"></a>

>![](public_sys-resources/icon-note.gif) **说明：** 
>使用调试功能时，编译.elf需要使用O0编译选项，并且需要明确工程中可供用户调试的文件路径。
>调试配置选项中的JlinkGDBServerCL驱动需要在jlink官网下载，官网地址是：
>https://www.segger.com/products/debug-probes/j-link/models/j-link-base/

**操作步骤<a name="ol956mcpsimp"></a>**

1.  选择要调试的工程：在IDE主界面中，选择要调试的工程，打开“工程配置”。
2.  修改调试选项，选择对应的调试器。具体请参见“[调试器配置](#ZH-CN_TOPIC_0000001995834060)”章节。

    **图 1**  修改调试选项<a name="fig13988956132612"></a>  
    ![](figures/修改调试选项.png "修改调试选项")

## 启动调试<a name="ZH-CN_TOPIC_0000002625289243"></a>

**操作步骤<a name="ol973mcpsimp"></a>**

1.  单击IDE工具栏启动调试按钮“![](figures/zh-cn_image_0000002594929810.png)”右侧的下拉箭头选择需要的调试模式，如果是多工程场景，需要先配置活动工程，再启动调试。
    -   。

2.  单击启动调试按钮“![](figures/zh-cn_image_0000002625289259.png)”。
3.  启动调试。调试成功示例如下图，若出现下面提示信息与工具栏调试图标，则说明已经成功启动调试。

    **图 1**  调试成功后提示信息、调试图标及调试界面<a name="fig1161932472711"></a>  
    ![](figures/调试成功后提示信息-调试图标及调试界面.png "调试成功后提示信息-调试图标及调试界面")

    ![](figures/zh-cn_image_0000002625369409.png)

    ![](figures/zh-cn_image_0000002594929812.png)

## 常用调试功能<a name="ZH-CN_TOPIC_0000002594769890"></a>

-   **[调试页面](#ZH-CN_TOPIC_0000002625369389)**  

### 调试页面<a name="ZH-CN_TOPIC_0000002625369389"></a>

调试工作界面如[图1](#fig132922116210)所示，主要由以下3个部分组成：

① 调试侧边栏

② 调试功能区

③ 调试控制台

**图 1**  调试工作界面<a name="fig132922116210"></a>  
![](figures/调试工作界面.png "调试工作界面")

-   **[调试侧边栏](#ZH-CN_TOPIC_0000002594929792)**  

-   **[调试功能区](#ZH-CN_TOPIC_0000002625289245)**  

-   **[调试控制台](#ZH-CN_TOPIC_0000002594769894)**  

#### 调试侧边栏<a name="ZH-CN_TOPIC_0000002594929792"></a>

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

#### 调试功能区<a name="ZH-CN_TOPIC_0000002625289245"></a>

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

**图 1**  调试图标<a name="fig1551203742711"></a>  
![](figures/调试图标.png "调试图标")

-   ![](figures/zh-cn_image_0000002625369411.png)：重启设备。
-   ![](figures/zh-cn_image_0000002594929814.png)：继续运行（“F5”），当程序执行到断点时停止执行，单击此按钮程序继续执行。
-   ![](figures/zh-cn_image_0000002625289267.png)：切换实时模式，禁用断点功能。
-   ![](figures/zh-cn_image_0000002594769914.png)：单步跳过（“F10”），在单步调试时，直接前进到下一行（如果在函数中存在子函数时，不会进入子函数内单步执行，而是将整个子函数当作一步执行）。
-   ![](figures/zh-cn_image_0000002625369415.png)：单步执行（“F11”），在单步调试时，遇到子函数后，进入子函数并继续单步执行。
-   ![](figures/zh-cn_image_0000002594929820.png)：单步跳出（“Shift+F11”），在单步调试执行到子函数内时，单击单步跳出会执行完子函数剩余部分，并跳出返回到上一层函数。
-   ![](figures/zh-cn_image_0000002625289271.png)：重启调试（“Ctrl+Shift+F5”），重新启动调试。
-   ![](figures/zh-cn_image_0000002594769918.png)：停止调试（“Shift+F5”），停止调试任务，断开连接。
-   ![](figures/zh-cn_image_0000002625369417.png)：内存窗口，查看对应内存地址的值。

#### 调试控制台<a name="ZH-CN_TOPIC_0000002594769894"></a>

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

-   变量查看

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

    **图 1**  查看变量当前值<a name="fig19295145218274"></a>  
    ![](figures/查看变量当前值.png "查看变量当前值")

    支持如下4种变量类型：

    -   局部变量
    -   全局变量（可能会被编译器优化，可以使用关键字volatile来规避这个问题 。）
    -   静态变量（可能会被编译器优化，可以使用关键字volatile来规避这个问题。 ）
    -   寄存器

-   监视功能

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

    **图 2**  监视功能<a name="fig1048381618281"></a>  
    ![](figures/监视功能.png "监视功能")

-   查看调用栈

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

    **图 3**  调用堆栈功能<a name="fig1237042862811"></a>  
    ![](figures/调用堆栈功能.png "调用堆栈功能")

-   管理函数断点

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

    -   用侧边栏的“断点”功能手动添加断点函数，单击左侧断点一栏右上角的＋号，在文本框中输入需要断点的函数。
    -   用鼠标单击代码编辑区代码行最左侧的位置，位置参考图片中红色圆点位置，点击后出现红色圆点表示添加断点成功。
    -   使用快捷键“F9”添加、删除断点。
    -   在断点菜单下使能、去使能、添加和删除断点。

    **图 4**  管理函数断点<a name="fig773715448289"></a>  
    ![](figures/管理函数断点.png "管理函数断点")

-   查看反汇编

    在调试过程中，通过查看反汇编，可以确认代码的汇编实现，从而快速进行代码检查。通过鼠标在代码界面中点击右键，选中“打开反汇编视图”功能就可以进入代码的汇编视图，如下图所示。

    **图 5**  查看反汇编<a name="fig855315492817"></a>  
    ![](figures/查看反汇编.png "查看反汇编")

    ![](figures/zh-cn_image_0000002625289277.png)

    **----结束**

## 变量跟踪功能<a name="ZH-CN_TOPIC_0000002625369391"></a>

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

**图 1**  变量跟踪功能入口<a name="fig15668133389"></a>  
![](figures/变量跟踪功能入口.png "变量跟踪功能入口")

>![](public_sys-resources/icon-note.gif) **说明：** 
>变量跟踪功能仅支持MCU系列工程。

## 常用调试命令<a name="ZH-CN_TOPIC_0000002594929794"></a>

调试命令在工程启动调试后，在调试控制台（debug console）中输入。

-   info files ：查看.elf文件内容信息。

    **图 1**  info files<a name="fig2084564805013"></a>  
    ![](figures/info-files.png "info-files")

-   断点操作

    info b：查看断点信息。

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

    delete breakpoints：删除所有断点。

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

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

    **图 2**  断点操作<a name="fig85961910528"></a>  
    ![](figures/断点操作.png "断点操作")

-   continue ：继续执行到下一个断点，可简写为cont/c。
-   list ：查看代码。
-   next ：单步调试。
-   bt：列出调用栈。

    **图 3**  bt指令执行结果<a name="fig34393612533"></a>  
    ![](figures/bt指令执行结果.png "bt指令执行结果")

-   monitor  mdw   \[addr\] ：读内存（mdw/mdd/mdh/mdb都是读命令，长度分别为：2Byte（8位）/Byte（4位）/半Byte（2位）/bit（1位））。

    **图 4**  读内存<a name="fig19982125545311"></a>  
    ![](figures/读内存.png "读内存")

-   monitor mww \[addr value\]  ：写内存（mww/mwd/mwh/mwb都是写命令，长度分别为：2Byte（8位）/Byte（4位）/半Byte（2位）/bit（1位））。

    **图 5**  写内存<a name="fig18584134616541"></a>  
    ![](figures/写内存.png "写内存")

-   p var\_：打印变量值。

    **图 6**  打印变量值<a name="fig1667052712559"></a>  
    ![](figures/打印变量值.png "打印变量值")

## 断点（BREAKPOINTS）<a name="ZH-CN_TOPIC_0000002625289247"></a>

**函数断点<a name="section112471752151116"></a>**

插入函数断点的方式有多种方法：

-   用鼠标单击代码编辑区代码行最左侧的位置。
-   用侧边栏的“断点”功能手动添加断点函数。
-   使用快捷键“F9”。

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

    **图 1**  断点管理示意图<a name="fig58502536565"></a>  
    ![](figures/断点管理示意图.png "断点管理示意图")

    >![](public_sys-resources/icon-notice.gif) **须知：** 
    >电机运行时，接入调试器前，请确保目标板程序已开启APT调试保护功能，否则会有硬件损坏的风险。

**条件断点<a name="section1010417240134"></a>**

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

**图 2**  条件断点<a name="fig76954141160"></a>  
![](figures/条件断点.png "条件断点")

**图 3**  添加表达式<a name="fig6331193302713"></a>  
![](figures/添加表达式.png "添加表达式")

**内联断点<a name="section684820428143"></a>**

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

**图 4**  内联断点<a name="fig118943501264"></a>  
![](figures/内联断点.png "内联断点")

## 变量（VARIABLES）<a name="ZH-CN_TOPIC_0000002594769896"></a>

当运行到断点处暂停时，可以在变量界面查看变量值的变化，如[图1](#fig127913515497)所示。

**图 1**  运行到断点处查看变量<a name="fig127913515497"></a>  

![](figures/zh-cn_image_0000002625289291.png)

支持4种变量类型：

-   局部变量。
-   全局变量（可能会被编译器优化，可以在编码时使用关键字volatile来规避这个问题 ）。
-   静态变量（可能会被编译器优化，可以在编码时使用关键字volatile来规避这个问题 ）。
-   risc-v 寄存器。

## 监视（WATCH）<a name="ZH-CN_TOPIC_0000002625369393"></a>

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

同时，也可以通过“监视”功能来监控指定的变量信息，单击![](figures/zh-cn_image_0000002594769936.png)图标来添加变量，如[图1](#fig18533172111288)所示。

**图 1**  监视功能视图<a name="fig18533172111288"></a>  
![](figures/监视功能视图.png "监视功能视图")

**操作步骤<a name="ol152548559289"></a>**

1.  单击变量添加按钮。
2.  输入要监视的变量名。

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

**图 2**  右键菜单<a name="fig11132164393320"></a>  
![](figures/右键菜单.png "右键菜单")

**操作步骤<a name="ol168871349153216"></a>**

1.  左键选中变量，右键打开菜单。
2.  选中添加到监视。

添加变量成功后，在暂停调试的状态下，即可以看到变量的当前值。如[图3](#fig1272195015339)所示。

**图 3**  监视的结果<a name="fig1272195015339"></a>  
![](figures/监视的结果.png "监视的结果")

## 性能分析功能<a name="ZH-CN_TOPIC_0000002594929798"></a>

**操作步骤<a name="ol195741050144"></a>**

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

    **图 1**  添加性能标记起点、终点<a name="fig9349527181718"></a>  
    
    ![](figures/zh-cn_image_0000002594769938.png)

    **图 2**  性能标记代码<a name="fig195601371026"></a>  
    ![](figures/性能标记代码.png "性能标记代码")

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

    **图 3**  livewatch开关和性能分析<a name="fig1493614012210"></a>  
    ![](figures/livewatch开关和性能分析.png "livewatch开关和性能分析")

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

    **图 4**  启动性能分析监测<a name="fig179931511848"></a>  
    ![](figures/启动性能分析监测.png "启动性能分析监测")

4.  查看性能分析页面的分析结果，如[图5](#fig154223161041)所示。

    **图 5**  性能分析结果<a name="fig154223161041"></a>  
    ![](figures/性能分析结果.png "性能分析结果")

>![](public_sys-resources/icon-note.gif) **说明：** 
>livewatch等界面会默认隐藏，当启动调试时才会加载。

## 查看和修改外设寄存器（PERIPHERALS）<a name="ZH-CN_TOPIC_0000002625289249"></a>

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

-   **[查看外设模块列表](#ZH-CN_TOPIC_0000002594769898)**  

-   **[查看外设寄存器](#ZH-CN_TOPIC_0000002625369397)**  

-   **[查看外设寄存器字段列表](#ZH-CN_TOPIC_0000002594929800)**  

-   **[查看寄存器字段的详细描述](#ZH-CN_TOPIC_0000002625289251)**  

-   **[查看寄存器的最新数值](#ZH-CN_TOPIC_0000002594769900)**  

-   **[修改寄存器和字段值](#ZH-CN_TOPIC_0000002625369399)**  

-   **[注意事项](#ZH-CN_TOPIC_0000002594929802)**  

### 查看外设模块列表<a name="ZH-CN_TOPIC_0000002594769898"></a>

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

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

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

### 查看外设寄存器<a name="ZH-CN_TOPIC_0000002625369397"></a>

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

**图 1**  查看MCU外设模块的寄存器清单<a name="fig169363462519"></a>  
![](figures/查看MCU外设模块的寄存器清单.png "查看MCU外设模块的寄存器清单")

### 查看外设寄存器字段列表<a name="ZH-CN_TOPIC_0000002594929800"></a>

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

**图 1**  查看寄存器的字段列表<a name="fig1362164018101"></a>  
![](figures/查看寄存器的字段列表.png "查看寄存器的字段列表")

### 查看寄存器字段的详细描述<a name="ZH-CN_TOPIC_0000002625289251"></a>

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

**图 1**  寄存器字段的详细描述<a name="fig3534202052520"></a>  

![](figures/1.png)

### 查看寄存器的最新数值<a name="ZH-CN_TOPIC_0000002594769900"></a>

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

**操作步骤<a name="ol52206319197"></a>**

1.  展开外设模块的寄存器清单。
2.  选择需要查看的寄存器或寄存器字段。
3.  单击刷新按钮。

**图 1**  查看寄存器最新数值<a name="fig2010218542015"></a>  
![](figures/查看寄存器最新数值.png "查看寄存器最新数值")

### 修改寄存器和字段值<a name="ZH-CN_TOPIC_0000002625369399"></a>

单击寄存器或域的右侧笔图标，可以修改寄存器或域的数值。如[图1](#fig28303161214)所示。

>![](public_sys-resources/icon-note.gif) **说明：** 
>可写的寄存器域的修改才能生效，包括Read-Write和Write-Only。Write-Only可能观察不到修改结果。

**图 1**  修改寄存器以及寄存器域<a name="fig28303161214"></a>  
![](figures/修改寄存器以及寄存器域.png "修改寄存器以及寄存器域")

**操作步骤<a name="ol168871349153216"></a>**

1.  点击“更新值”按钮。
2.  在弹出的输入框中输入要设置的值，按“Enter”确认，按“Esc”取消。

### 注意事项<a name="ZH-CN_TOPIC_0000002594929802"></a>

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

通过如下两种方式来使用使能外设的时钟：

-   通过芯片配置器（Chip Config）使能MCU外设模块。
    1.  单击MCU外设模块名称后的开关按钮。
    2.  单击“生成代码”按钮，HiSpark-Studio会自动生成该IP的初始化代码。
    3.  将生成的代码编译并加载到目标板，让目标目标板重新运行。

-   直接在“外设寄存器”修改CRG时钟对应IP的时钟使能置1，同时将复位值置0。具体修改寄存器值的方式可以参考[修改寄存器和字段值](#ZH-CN_TOPIC_0000002625369399)章节。以使能UART1为例，需要将时钟使能（uart1\_cken）置1，将时钟复位（uart1\_srst\_req）置0。如[图1](#fig18846190181215)所示。

    **图 1**  使能外设的时钟<a name="fig18846190181215"></a>  
    ![](figures/使能外设的时钟.png "使能外设的时钟")

## 查看调用栈（CALL STACK）<a name="ZH-CN_TOPIC_0000002625289253"></a>

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

**图 1**  调用堆栈视图<a name="fig16115308303"></a>  
![](figures/调用堆栈视图.png "调用堆栈视图")

## 实时监视（Live Watch） 调试功能<a name="ZH-CN_TOPIC_0000002594769902"></a>

-   **[功能介绍](#ZH-CN_TOPIC_0000002625369403)**  

-   **[实时监视（Live Watch） UI 界面](#ZH-CN_TOPIC_0000002594929804)**  

-   **[实时监视（Live Watch）的使用](#ZH-CN_TOPIC_0000002625289255)**  

### 功能介绍<a name="ZH-CN_TOPIC_0000002625369403"></a>

>![](public_sys-resources/icon-notice.gif) **须知：** 
>-   使用HiSpark-Trace调试器。
>-   静态或全局变量。

-   支持监控静态变量或全局变量，变量数据类型支持char、unsigned char、short、unsigned short、int、unsigned int、long、unsigned long、float、 double、longlong、unsigned long long、bool、枚举、结构体、联合体、指针、数组、位域等类型。
-   支持动态刷新变量的数值，刷新频率可配置（Off、1Hz、2Hz或5Hz），以红色字体标识数值的变化。
-   支持实时修改变量的数值。
-   支持设置数值的默认显示进制，包含二进制、八进制、十进制、十六进制。
-   支持对变量进行单独设置数值的显示进制，包含二进制、八进制、十进制、十六进制。
-   支持变量列表的导入/导出。

### 实时监视（Live Watch） UI 界面<a name="ZH-CN_TOPIC_0000002594929804"></a>

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

**图 1**  实时监视 UI 界面<a name="fig47731031144218"></a>  

![](figures/zh-cn_image_0000002594769946.png)

①：调试命令按钮条。

②：加载变量列表按钮。

③：监控变量列表区。

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

**调试命令按钮条<a name="section1436293073111"></a>**

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

**监控变量列表区<a name="section2029714910324"></a>**

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

-   变量名：变量名，双击该格可实现输入并更改变量名（输入值后，回车确认）。
-   值：变量的值，双击该格可实现输入并更改变量的值（输入值后，回车确认）。
-   地址：变量的十六进制地址。
-   类型：变量的数据类型。

**右键菜单<a name="section16242174554218"></a>**

在变量区单击右键，可以触发右键菜单，如[图2](#fig02711151916)所示。

**图 2**  右键菜单<a name="fig02711151916"></a>  
![](figures/右键菜单-2.png "右键菜单-2")

-   删除 ：删除所选单个变量。
-   全部删除： 删除全部监控的变量。
-   默认进制设置：默认进制设置（默认设置为十进制）。
-   默认进制：以默认进制显示。
-   二进制：以二进制显示。
-   八进制：以八进制显示。
-   十进制：以十进制显示（默认）。
-   十六进制：以十六进制显示。
-   刷新率：刷新率设置（默认为2Hz）。
-   精简模式：精简模式（启用后变量列表区不显示地址和类型列）。
-   保存到文件：文件另存为（变量列表文件）。

### 实时监视（Live Watch）的使用<a name="ZH-CN_TOPIC_0000002625289255"></a>

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

**图 1**  实时监视 启动步骤<a name="fig15701925205820"></a>  

![](figures/zh-cn_image_0000002594929850.png)

**输入框添加变量<a name="section123931806438"></a>**

在实时监视界面中，单击“点击添加”，输入变量名添加变量，如[图2](#fig151675501500)所示。

**图 2**  变量监视列表<a name="fig151675501500"></a>  
![](figures/变量监视列表.png "变量监视列表")

①：添加父节点时，只输入父节点名（例如structTest），子节点也会出现。

②：添加嵌套子节点时，通过“父节点.子节点” 的形式添加（例如unionNumt.strNum）。

③：添加单个变量时（例如intNum）。

**右键菜单添加变量Add to Live Watch<a name="section17733102017283"></a>**

支持在代码源文件编辑区界面中，鼠标右键菜单添加变量“添加到 Live Watch窗口”，如[图3](#fig8956174715355)所示。

**图 3**  右键菜单添加到 Live Watch窗口<a name="fig8956174715355"></a>  
![](figures/右键菜单添加到-Live-Watch窗口.png "右键菜单添加到-Live-Watch窗口")

①：当光标有框选内容时，添加框选中内容作为变量名添加到变量列表区。

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

**查看变量数值<a name="section990113159434"></a>**

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

**图 4**  启动程序以查看变量数值<a name="fig1880415525916"></a>  

![](figures/zh-cn_image_0000002625369447.png)

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

**图 5**  程序已运行并在“值”列显示变量数值<a name="fig1325120191713"></a>  
![](figures/程序已运行并在-值-列显示变量数值.png "程序已运行并在-值-列显示变量数值")

**图 6**  变量数值发生变化时会变成红色字体<a name="fig326675631711"></a>  
![](figures/变量数值发生变化时会变成红色字体.png "变量数值发生变化时会变成红色字体")

**修改变量数值<a name="section136042316432"></a>**

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

**图 7**  修改变量数值<a name="fig1333593916710"></a>  
![](figures/修改变量数值.png "修改变量数值")

**设置默认显示进制<a name="section201314192715"></a>**

默认显示进制默认为十进制，在右键菜单默认进制设置中的二级菜单（如[图8](#fig7522118113412)中的①），选择一个进制（如[图8](#fig7522118113412)中的②），所有未设置过单独进制的变量值会切换成设置默认进制进行显示。

**图 8**  设置默认显示进制<a name="fig7522118113412"></a>  
![](figures/设置默认显示进制.png "设置默认显示进制")

**单独设置变量的显示进制<a name="section65877484275"></a>**

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

**图 9**  单独设置变量的显示进制<a name="fig67695315336"></a>  
![](figures/单独设置变量的显示进制.png "单独设置变量的显示进制")

**变量列表的导出（右键）<a name="section10604134710436"></a>**

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

**图 10**  通过在右键菜单导出变量列表<a name="fig12874632182018"></a>  
![](figures/通过在右键菜单导出变量列表.png "通过在右键菜单导出变量列表")

**图 11**  保存为csv文件<a name="fig4411016162212"></a>  
![](figures/保存为csv文件.png "保存为csv文件")

**变量列表的加载<a name="section9364131416441"></a>**

单击右上角加载图标（Load From File）。

**图 12**  单击加载图标<a name="fig173101057165719"></a>  
![](figures/单击加载图标.png "单击加载图标")

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

**图 13**  选择导入csv列表文件<a name="fig1750116574213"></a>  
![](figures/选择导入csv列表文件.png "选择导入csv列表文件")

## 内存窗口（MEMORY）<a name="ZH-CN_TOPIC_0000002594769904"></a>

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

**图 1**  查看内存入口<a name="fig4269783351"></a>  

![](figures/zh-cn_image_0000002625289309.png)

**操作步骤<a name="ol169201956193518"></a>**

1.  单击“打开内存窗口”，开启内存窗口界面。
2.  输入寄存器的地址和长度，单击“跳转”即可。

    例如，在内存窗口中输入对应的开始地址（如：0x300000）和地址长度（0x128），即可查看对应的内存信息。

    内存信息展示如[图2](#fig767653074118)所示。

    **图 2**  内存信息<a name="fig767653074118"></a>  
    ![](figures/内存信息.png "内存信息")

    单击![](figures/zh-cn_image_0000002625369453.png)可以设置字节大小、每行分组和字节顺序。

    **图 3**  Settings页面<a name="fig747912642717"></a>  
    ![](figures/Settings页面.png "Settings页面")

    -   字节大小：设置按照 1Byte、2Byte或4Byte读取数据，默认是1Byte。
    -   每行分组：设置每行内存展示的组数，有4组、8组或16组三种展示，默认是16组。
    -   字节顺序：设置内存对齐方式是大端对齐还是小端对齐，默认是小端对齐。

    >![](public_sys-resources/icon-notice.gif) **须知：** 
    >需要刷新值的时候，需先暂停程序，然后再次单击“跳转”。

## 内存断点<a name="ZH-CN_TOPIC_0000002659848077"></a>

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

**图 1**  内存断点<a name="fig1974186103012"></a>  
![](figures/内存断点.png "内存断点")

## 反汇编（DISASSEMBLY）<a name="ZH-CN_TOPIC_0000002625369405"></a>

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

通过鼠标在代码界面中单击右键 -\> 选中“打开反汇编视图（Open Disassembly View）”功能就可以进入代码的汇编视图，如[图1](#fig85031922121710)所示。

**图 1**  反汇编查看入口<a name="fig85031922121710"></a>  
![](figures/反汇编查看入口.png "反汇编查看入口")

反汇编视图如[图2](#fig27601238131717)所示。

**图 2**  反汇编视图<a name="fig27601238131717"></a>  
![](figures/反汇编视图.png "反汇编视图")

## 实时模式<a name="ZH-CN_TOPIC_0000002625289257"></a>

启动调试之后会出现开启实时模式图标（如[图1](#fig9349527181718)所示），单击打开实时模式图标则会切换为关闭实时模式图标（如[图2](#fig1590083912179)所示）。调试在实时模式下，无法添加断点，且调试的暂停运行功能失效。

**图 1**  开启实时模式图标位置<a name="fig9349527181718"></a>  
![](figures/开启实时模式图标位置.png "开启实时模式图标位置")

**图 2**  关闭实时模式图标位置<a name="fig1590083912179"></a>  
![](figures/关闭实时模式图标位置.png "关闭实时模式图标位置")

>![](public_sys-resources/icon-note.gif) **说明：** 
>打开实时模式前需先清除所有已添加的断点。

## HiSparkLinkPro（仅支持3071）<a name="ZH-CN_TOPIC_0000002594769906"></a>

如[图1](#fig1967453113335)、[图2](#fig19126155512338)所示，创建工程之后，在调试工具的选项框中选择HiSparkLinkPro，然后点击调试按钮启动调试，与Jlink的调试方式一致。

**图 1**  选择HiSparkLinkPro<a name="fig1967453113335"></a>  
![](figures/选择HiSparkLinkPro.png "选择HiSparkLinkPro")

**图 2**  启动调试<a name="fig19126155512338"></a>  
![](figures/启动调试.png "启动调试")

# 串口控制台工具<a name="ZH-CN_TOPIC_0000002579819978"></a>

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

>![](public_sys-resources/icon-note.gif) **说明：** 
>串口工具以“\\r\\n“作为每行的分隔符，所以要求被打印的每行字符串都要以“\\r\\n“结尾，否则可能会出现程序结尾打印丢失的情况。

-   **[打开监视器](#ZH-CN_TOPIC_0000002579660070)**  

-   **[连接串口](#ZH-CN_TOPIC_0000002610180003)**  

-   **[查看消息](#ZH-CN_TOPIC_0000002610099897)**  

-   **[发送消息](#ZH-CN_TOPIC_0000002610179927)**  

-   **[断开连接](#ZH-CN_TOPIC_0000002610179979)**  

-   **[扩展工具使用](#ZH-CN_TOPIC_0000002579819954)**  

## 打开监视器<a name="ZH-CN_TOPIC_0000002579660070"></a>

打开HiSpark Studio终端，找到终端区域、切换到“监视器”选项卡，如[图1](#fig17771812125220)所示。

**图 1**  切换到“监视器”选项卡<a name="fig17771812125220"></a>  
![](figures/切换到-监视器-选项卡.png "切换到-监视器-选项卡")

**图 2**  监视器界面介绍<a name="fig14318546512"></a>  

![](figures/zh-cn_image_0000002610100117.png)

-   ①：串口配置区

    端口：显示当前电脑所连接的串口设备，单击“![](figures/zh-cn_image_0000002610100127.png)”按钮刷新串口列表。

    波特率：选择串口波特率，范围：300～250000。

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

    -   CRLF代表“\\r\\n”。
    -   CR代表“\\r”。
    -   LF代表“\\n”。

-   ②：功能按钮区

    ![](figures/zh-cn_image_0000002610100119.png)：连接串口按钮。当连接串口后，按钮状态会变成![](figures/zh-cn_image_0000002610180229.png)，单击此按钮会断开串口连接。

    ![](figures/zh-cn_image_0000002579820240.png)：时间戳按钮。开启时会在每行输出前加上时间戳显示，如果按钮处于关闭状态则不显示时间戳，如[图3](#fig1040102615572)所示。

    **图 3**  时间戳设置效果示例<a name="fig1040102615572"></a>  
    ![](figures/时间戳设置效果示例.png "时间戳设置效果示例")

    ![](figures/zh-cn_image_0000002610180215.png)：隐藏输入框，隐藏/显示输入框界面如[图4](#fig209583373583)、[图5](#fig17214483580)所示。

    **图 4**  显示输入框<a name="fig209583373583"></a>  
    ![](figures/显示输入框.png "显示输入框")

    **图 5**  隐藏输入框<a name="fig17214483580"></a>  
    ![](figures/隐藏输入框.png "隐藏输入框")

    ![](figures/zh-cn_image_0000002610180227.png)：开启/关闭屏幕自动滚动。

    ![](figures/zh-cn_image_0000002579660334.png)：清空输出区。

    ![](figures/zh-cn_image_0000002610180221.png)：最大化面板。

    ![](figures/zh-cn_image_0000002610180217.png)：关闭面板

-   ③：输出区。
-   ④：输入区。
-   ⑤：发送消息按钮，单击按钮或者敲击回车发送输入区信息给串口，默认编码为UTF-8。

## 连接串口<a name="ZH-CN_TOPIC_0000002610180003"></a>

单击“![](figures/zh-cn_image_0000002579660470.png)”即可连接串口。连接串口前，输入区默认处于未激活状态（不可输入、不可点击）；连接串口后，输入区变为激活状态，串口配置区的监视模式选项变为未激活状态。

**图 1**  开始监视功能<a name="fig29621155173912"></a>  
![](figures/开始监视功能.png "开始监视功能")

## 查看消息<a name="ZH-CN_TOPIC_0000002610099897"></a>

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

**图 1**  查看串口消息<a name="fig979618719400"></a>  
![](figures/查看串口消息.png "查看串口消息")

## 发送消息<a name="ZH-CN_TOPIC_0000002610179927"></a>

在下方输入区输入消息后单击发送按钮或者单击键盘回车按钮发送消息。

**图 1**  发送消息<a name="fig1738185406"></a>  
![](figures/发送消息.png "发送消息")

## 断开连接<a name="ZH-CN_TOPIC_0000002610179979"></a>

单击“![](figures/zh-cn_image_0000002610180393.png)”按钮断开串口连接。

**图 1**  停止监视<a name="fig71312674012"></a>  
![](figures/停止监视.png "停止监视")

## 扩展工具使用<a name="ZH-CN_TOPIC_0000002579819954"></a>

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

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

    **图 1**  扩展工具<a name="fig1785423813404"></a>  
    ![](figures/扩展工具.png "扩展工具")

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

    **图 2**  监视器面板最大化按钮<a name="fig8439445134020"></a>  
    ![](figures/监视器面板最大化按钮.png "监视器面板最大化按钮")

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

    **图 3**  清空列表功能<a name="fig4155175754013"></a>  
    ![](figures/清空列表功能.png "清空列表功能")

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

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

    **图 4**  增加一行功能<a name="fig1370115107417"></a>  
    ![](figures/增加一行功能.png "增加一行功能")

    添加数据规则：

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

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

    名称：识别命令功能的字符串。单击此按钮可立即发送命令给串口（前提是工具处于监听状态）。

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

    延时发送：先发送一次，再进行延时，单位：ms。

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

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

        **图 5**  下载导入模板功能<a name="fig5322023144117"></a>  
        ![](figures/下载导入模板功能.png "下载导入模板功能")

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

        **图 6**  导入模板<a name="fig114784336418"></a>  
        ![](figures/导入模板.png "导入模板")

    2.  填写导入模板。

        **图 7**  填写导入模板<a name="fig1271824234113"></a>  
        ![](figures/填写导入模板.png "填写导入模板")

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

        **图 8**  导入摸板数据<a name="fig830805354114"></a>  
        ![](figures/导入摸板数据.png "导入摸板数据")

        ![](figures/zh-cn_image_0000002610100107.png)

    4.  查看导入数据。

        **图 9**  查看导入数据<a name="fig916927184214"></a>  
        ![](figures/查看导入数据.png "查看导入数据")

        ![](figures/zh-cn_image_0000002579820234.png)

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

        **图 10**  查看导入结果<a name="fig88419233421"></a>  
        ![](figures/查看导入结果.png "查看导入结果")

-   循环发送。
    1.  设置顺序和延时。

        **图 11**  设置顺序和延时功能<a name="fig1196719014436"></a>  
        ![](figures/设置顺序和延时功能.png "设置顺序和延时功能")

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

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

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

    2.  打开串口监听。

        **图 12**  串口监听功能<a name="fig7749712104319"></a>  
        ![](figures/串口监听功能.png "串口监听功能")

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

        **图 13**  循环发送功能<a name="fig84511420184310"></a>  
        ![](figures/循环发送功能.png "循环发送功能")

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

# 常见错误<a name="ZH-CN_TOPIC_0000002610180007"></a>

-   **[如何解决部分快捷键无效问题](#ZH-CN_TOPIC_0000002579660034)**  

-   **[对单独的c或c++使用“生成和调试活动文件”后如何停止调试](#ZH-CN_TOPIC_0000002579820010)**  

-   **[路径失效](#ZH-CN_TOPIC_0000002579660088)**  

-   **[多个.a静态库如何打包成一个.a静态库（仅支持MCU系列芯片）](#ZH-CN_TOPIC_0000002579660064)**  

-   **[电机算法库的参数检查是否要开启？（仅支持MCU系列芯片）](#ZH-CN_TOPIC_0000002579660046)**  

-   **[断点数量限制统计不到反汇编断点导致断点数量超出限制无法调试（仅支持MCU系列芯片）](#ZH-CN_TOPIC_0000002610099905)**  

-   **[调试的变量和监视窗口查看大数组变量会加载很久导致无法调试（仅支持MCU系列芯片）](#ZH-CN_TOPIC_0000002610179983)**  

-   **[启动VariableTrace失败（仅支持MCU系列芯片）](#ZH-CN_TOPIC_0000002579660108)**  

-   **[启动HiSpark-TraceFlasher工具提示由于找不到MSVCP140.dll，无法继续执行代码解决方案（仅支持MCU系列芯片）](#ZH-CN_TOPIC_0000002579660030)**  

-   **[编译工程时，出现“start parsing target.elf for livewatch.....”之后要等待很久（仅支持MCU系列芯片）](#ZH-CN_TOPIC_0000002579819974)**  

-   **[选择MCU的Nos Task Schedule例程，出现红色波浪线告警](#ZH-CN_TOPIC_0000002610179923)**  

-   **[菜单栏隐藏后如何再次显示](#ZH-CN_TOPIC_0000002610099829)**  

-   **[HCC工具链下载失败如何手动下载（仅支持MCU系列芯片）](#ZH-CN_TOPIC_0000002579660116)**  

-   **[如何制作和使用可以运行在SRAM上的静态库\(仅支持MCU系列芯片\)](#ZH-CN_TOPIC_0000002610099863)**  

-   **[不同PC间复制工程后无法打开如何解决](#ZH-CN_TOPIC_0000002579660090)**  

-   **[launch.json缺乏异常弹窗](#ZH-CN_TOPIC_0000002579820038)**  

## 如何解决部分快捷键无效问题<a name="ZH-CN_TOPIC_0000002579660034"></a>

**问题描述<a name="section22251724121611"></a>**

在使用IDE的时候发现部分快捷键使用无效。如[图1](#fig1663116531651)所示。

**图 1**  部分快捷键说明<a name="fig1663116531651"></a>  
![](figures/部分快捷键说明.png "部分快捷键说明")

**解决方法<a name="section09097281557"></a>**

**操作步骤<a name="ol1258314617519"></a>**

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

    **图 2**  按键属性设置<a name="fig195653815179"></a>  
    ![](figures/按键属性设置.png "按键属性设置")

    ①：打开“属性设置”。

    ②：选择“按键”。

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

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

    **图 3**  系统功能快捷键<a name="fig12389445201918"></a>  
    ![](figures/系统功能快捷键.png "系统功能快捷键")

## 对单独的c或c++使用“生成和调试活动文件”后如何停止调试<a name="ZH-CN_TOPIC_0000002579820010"></a>

**问题描述<a name="section126429387518"></a>**

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

**解决方法<a name="section1029425184"></a>**

按快捷键F1，在如[图1](#fig45893311143)的输入框中输入“Debug: Stop”，点击搜索到的结果即可退出调试。

**图 1**  停止调试指令搜索<a name="fig45893311143"></a>  
![](figures/停止调试指令搜索.png "停止调试指令搜索")

## 路径失效<a name="ZH-CN_TOPIC_0000002579660088"></a>

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

-   调试：修改默认的debug\_elf路径。

    **图 1**  修改默认debug\_elf路径<a name="fig1662011735710"></a>  
    ![](figures/修改默认debug_elf路径.png "修改默认debug_elf路径")

## 多个.a静态库如何打包成一个.a静态库（仅支持MCU系列芯片）<a name="ZH-CN_TOPIC_0000002579660064"></a>

**操作步骤<a name="ol136604306493"></a>**

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 中的提示信息完成打包。

>![](public_sys-resources/icon-note.gif) **说明：** 
>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系列芯片）<a name="ZH-CN_TOPIC_0000002579660046"></a>

**问题描述<a name="section126429387518"></a>**

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

**图 1**  芯片配置器中电机算法库参数检查宏默认使能<a name="fig7874204415518"></a>  
![](figures/芯片配置器中电机算法库参数检查宏默认使能.png "芯片配置器中电机算法库参数检查宏默认使能")

**解决方法<a name="section8871452123612"></a>**

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

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

## 断点数量限制统计不到反汇编断点导致断点数量超出限制无法调试（仅支持MCU系列芯片）<a name="ZH-CN_TOPIC_0000002610099905"></a>

**问题描述<a name="section126429387518"></a>**

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

**图 1**  反汇编视图断点<a name="fig117281828112417"></a>  
![](figures/反汇编视图断点.png "反汇编视图断点")

**图 2**  断点数量超限制异常弹窗<a name="fig4540455121515"></a>  
![](figures/断点数量超限制异常弹窗.png "断点数量超限制异常弹窗")

**解决方法<a name="section8871452123612"></a>**

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

## 调试的变量和监视窗口查看大数组变量会加载很久导致无法调试（仅支持MCU系列芯片）<a name="ZH-CN_TOPIC_0000002610179983"></a>

**问题描述<a name="section126429387518"></a>**

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

**图 1**  查看大数组变量加载状态界面<a name="fig6337162714259"></a>  
![](figures/查看大数组变量加载状态界面.png "查看大数组变量加载状态界面")

**解决方法<a name="section8871452123612"></a>**

系统一直处于加载状态时先点击 "停止调试" 按钮退出调试，再次启动调试并使用实时监视（Live Watch）来查看大数组变量。

## 启动VariableTrace失败（仅支持MCU系列芯片）<a name="ZH-CN_TOPIC_0000002579660108"></a>

**问题描述<a name="section126429387518"></a>**

按照“[zh-cn\_topic\_0000002579660106.md](zh-cn_topic_0000002579660106.md)”中的介绍启动变量跟踪功能失败，没有弹出窗口。

**解决方法<a name="section8871452123612"></a>**

方案一：使用独立显卡。

方案二：更新显卡驱动。在Window10和Window11版本中，可以通过系统设置来自动更新显卡驱动。

**操作步骤<a name="ol747420230277"></a>**

1.  打开“设置”。

    **图 1**  Window10和Window11版本设置<a name="fig46361827164011"></a>  
    ![](figures/Window10和Window11版本设置.png "Window10和Window11版本设置")

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

    **图 2**  更新和安全<a name="fig1545003634020"></a>  
    ![](figures/更新和安全.png "更新和安全")

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

    **图 3**  检查更新<a name="fig2209552114018"></a>  
    ![](figures/检查更新.png "检查更新")

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

## 启动HiSpark-TraceFlasher工具提示由于找不到MSVCP140.dll，无法继续执行代码解决方案（仅支持MCU系列芯片）<a name="ZH-CN_TOPIC_0000002579660030"></a>

**问题描述<a name="section126429387518"></a>**

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

**图 1**  无法找到MSVCP140.dll提示示例<a name="fig15103054357"></a>  
![](figures/无法找到MSVCP140-dll提示示例.png "无法找到MSVCP140-dll提示示例")

**解决方法<a name="section8871452123612"></a>**

方法一：找一台其他相同系统和位数的电脑，在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系列芯片）<a name="ZH-CN_TOPIC_0000002579819974"></a>

**问题描述<a name="section126429387518"></a>**

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

**解决方法<a name="section8871452123612"></a>**

这个等待时间是在解析elf中的变量，并用于“[zh-cn\_topic\_0000002610099823.md](zh-cn_topic_0000002610099823.md)”。等待时间与工程中定义的变量数量成正相关。

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

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

## 选择MCU的Nos Task Schedule例程，出现红色波浪线告警<a name="ZH-CN_TOPIC_0000002610179923"></a>

**问题描述<a name="section1818051264418"></a>**

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

**图 1**  出现红色波浪线告警<a name="fig49571837114612"></a>  
![](figures/出现红色波浪线告警.png "出现红色波浪线告警")

**解决方法<a name="section8871452123612"></a>**

**操作步骤<a name="ol1398584075813"></a>**

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

    ![](figures/zh-cn_image_0000002610180031.png)

**操作步骤<a name="ol491334665812"></a>**

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

    ![](figures/zh-cn_image_0000002579660138.png)

**操作步骤<a name="ol12151105915587"></a>**

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

    ![](figures/zh-cn_image_0000002610099931.png)

## 菜单栏隐藏后如何再次显示<a name="ZH-CN_TOPIC_0000002610099829"></a>

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

**图 1**  菜单栏隐藏<a name="fig06051324809"></a>  
![](figures/菜单栏隐藏.png "菜单栏隐藏")

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

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

**图 2**  菜单栏隐藏后显示方法①<a name="fig141416017118"></a>  
![](figures/菜单栏隐藏后显示方法.png "菜单栏隐藏后显示方法")

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

**图 3**  菜单栏隐藏后显示方法②<a name="fig1371881213118"></a>  
![](figures/菜单栏隐藏后显示方法-3.png "菜单栏隐藏后显示方法-3")

![](figures/zh-cn_image_0000002579820122.png)

③：用快捷键ctrl+shift+p弹出命令行菜单，输入“Toggle Menu Bar”点击该选项，能够显示/隐藏菜单栏。

**图 4**  菜单栏隐藏后显示方法③<a name="fig3421142320112"></a>  
![](figures/菜单栏隐藏后显示方法-4.png "菜单栏隐藏后显示方法-4")

## HCC工具链下载失败如何手动下载（仅支持MCU系列芯片）<a name="ZH-CN_TOPIC_0000002579660116"></a>

**问题描述<a name="section126429387518"></a>**

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

**图 1**  出现下载HCC工具链下载失败错误提示<a name="fig03941259121913"></a>  
![](figures/出现下载HCC工具链下载失败错误提示.png "出现下载HCC工具链下载失败错误提示")

**解决方法<a name="section8871452123612"></a>**

**操作步骤<a name="ol14145122010407"></a>**

1.  <a name="li1514515208405"></a>通过链接[https://hispark-obs.obs.cn-east-3.myhuaweicloud.com/cc_riscv32_musl_fp_win.zip](https://hispark-obs.obs.cn-east-3.myhuaweicloud.com/cc_riscv32_musl_fp_win.zip)下载HCC工具链压缩包cc\_riscv32\_musl\_fp\_win.zip。
2.  将[1](#li1514515208405)下载到的“cc\_riscv32\_musl\_fp\_win.zip”文件拷贝到IDE安装目录（默认为：C:\\Program Files\\HiSpark Studio）下的tools/Windows路径下面并解压。

    **图 2**  HCC工具链存放路径（示例）<a name="fig19244175820538"></a>  
    ![](figures/HCC工具链存放路径（示例）.png "HCC工具链存放路径（示例）")

## 如何制作和使用可以运行在SRAM上的静态库\(仅支持MCU系列芯片\)<a name="ZH-CN_TOPIC_0000002610099863"></a>

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

**操作步骤<a name="ol391514251180"></a>**

1.  使用“RAM\_CODE”宏定义和声明静态库的对外提供的接口。
2.  参考“[编译生成静态库](#ZH-CN_TOPIC_0000002579819998)”章节的方案制作静态库。

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

**操作步骤<a name="ol9831165718217"></a>**

1.  在工程中打开“chipconfig配置”，请参见“[功能入口](#ZH-CN_TOPIC_0000002579820002)”。
2.  在“LDS配置”中的“RAM Code Path”区域中添加静态库对应的.a文件，请参见“[LDS配置（仅支持MCU系列芯片）](#ZH-CN_TOPIC_0000002579660050)”。
3.  点击“生成代码”，就可以得到一个让静态库中的“RAM\_CODE”接口运行在SRAM上的工程。

## 不同PC间复制工程后无法打开如何解决<a name="ZH-CN_TOPIC_0000002579660090"></a>

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

**操作步骤<a name="ol9831165718217"></a>**

1.  关闭IDE。
2.  保证目标PC和源PC的SDK路径一致（这里的SDK路径是指被复制的工程对应的SDK路径）。
3.  双击工程目录下的.hiproj文件打开工程，工程正常打开。

## launch.json缺乏异常弹窗<a name="ZH-CN_TOPIC_0000002579820038"></a>

在新建3071工程或者打开工程配置界面时，概率性会偶现如[图1](#fig24066457294)所示的异常弹窗，直接点击取消即可。实际launch.json已生成在工程文件的.vscode目录下。

**图 1**  launch.json缺乏的异常弹窗<a name="fig24066457294"></a>  
![](figures/launch-json缺乏的异常弹窗.png "launch-json缺乏的异常弹窗")

