跳到主要内容
版本:4.x

示例项目

ZStudio 中内置了部分示例项目。用户可以跟随示例项目熟悉 ZStudio 基本使用流程及各项功能。

hello_world_in_nuclei_sdk

本节将用芯来(Nuclei)SDK 中的 hello_world 示例项目演示如何在芯来 N300 开发板上运行和调试项目。

导入示例项目

用户可以遵循以下步骤将示例项目导入 ZStudio:

  1. 菜单栏下拉框新建项目,在弹窗中选择“从 SDK 新建项目”。

  2. 在弹出的对话框中,选择 SDK 中的项目信息,最后点击“创建”。

    从 SDK 新建项目

    • 厂商:选择 Nuclei Sys(芯来)。

    • 开发板:选择 nuclei_fpga_eval 开发板。

    • 应用程序:选择 helloworld 应用程序。

    • 项目名:命名为 hello_world_in_nuclei_sdk

    其他保持默认选项即可,所有必选项逐个选择。

  3. 创建完成后,在解决方案资源管理器中查看导入完成的 hello_world_in_nuclei_sdk 项目。

构建示例项目

  1. 项目导航中选择 hello_world_in_nuclei_sdk 做为当前活动项目。

  2. 点击"Build"开始构建,构建完成后,在解决方案导航 output 目录下检查是否生成了项目可执行文件或目标文件。

连接开发板运行项目

  1. 将开发板通过 USB 连接计算机,确认电脑可以正确识别开发板设备。

    检查是否需要安装驱动,请访问 Nuclei Board Labs 遵循指导安装适用于 N300 的 Linux 和 Windows 驱动。

  2. 新建一个串行端口连接

    在"视图"下拉菜单中选择"串口监控工具",点击 + 按钮配置串行端口连接参数,在串行端口下拉框中选择自动检测到的串行通讯端口,点击"确定"创建串口连接。

    状态灯变为绿色代表当前串行端口连接成功。开发板与当前 PC 断开连接将会导致串行端口连接失败,状态灯变为红色。

  3. 指定运行配置

    从工具栏运行下拉框中点击 run-and-debug-configuration-button(运行和调试配置)按钮打开运行配置窗口。从顶部下拉框中选择 OpenOCD 配置,从 SDK 导入的项目将自动切换与开发板(nuclei_fpga_eval)匹配的 OpenOCD 配置,所有输入框保持默认即可。

    运行配置

    运行配置

  4. 在开发板上运行项目

    点击 run-button 按钮运行项目,并在串口监控工具中检查项目输出。

调试项目

添加断点,开启调试会话。调试会话启动后会自动切换为调试视图。调试器运行到它遇到第一个断点停止。点击 "Step Over" 并在串口监控工具中检查项目输出。

HPMicro Demo

本节将用先楫(HPMicro)SDK 中的示例项目演示如何在 ZSolution 中使用 HPM Tool 进行一站式嵌入式开发。

HPMicro SDK 导入

用户可以遵循以下步骤在 ZSolution 中导入先楫 SDK 示例项目:

  1. 首先在 ZSolution 主菜单中选择“文件”>“新建项目”>“从 SDK 新建项目”,在弹出的对话框中填写项目信息。

    从 SDK 新建项目

    • 厂商:选择 HPMicro(先楫)。

    • 开发板:选择先楫开发板 hpm5300evk,ZStudio 会自动为该开发板配置好依赖包并添加至项目的依赖项。

    • 应用程序:选择导入先楫 SDK 中的 hello_world 应用程序。

    • 项目名:将导入项目重命名为 HPMicro_Demo

    • 链接器脚本:选择 ram 链接器脚本。

    其他保持默认选项即可,所有必选项逐个选择。

  2. 点击“创建” 导入 SDK 中的项目。导入成功在解决方案资源管理器中查看项目。

使用 HPM Tools 配置引脚

ZSolution 整合了先楫提供的 HPMicro Tools(Pinmux 和 Clock tool),支持直接在 ZStudio 中配置 MCU 芯片引脚和时钟,同时进行应用开发与调试。本项目演示通过设置一个 IO 口输出高电平或者低电平来点亮或者熄灭一个 LED 灯。

  1. 点从菜单栏中的 "工具" > "先楫工具集" 中进入 HPMicro Tools 页面,选择目标开发平台 SoC 为 "HPM5361", 选择 Package 为 "LQFP100",点击"创建项目"。

  2. 参考 HPM5300EVK 开发板原理图 选择一个与芯片 IO 口相连的 LED 灯,从原理图中可以看到,LED2 的阳极连接 3.3V,阴极连接 PA23 IO 口,所以当设置 PA23 输出低电平就可以点亮 LED 灯,当设置 PA23 输出高电平时,LED 灯熄灭。

  3. 在 ZSolution 中配置初始化 PA23 IO 口,即 HPM5361 引脚的 GPIO 功能。点击 PA23 引脚,在弹窗中选择 GPIO.A[23],设置 GPIO 的相关属性,设置方向为"输出",设置初始输出电平为"高电平",选择 GPIO 控制器为 "GPIO0",然后点击"确定"。

  4. 点击右上角的"代码预览" 可以查看 HPM Pinmux Tool 生成的引脚配置初始化代码(.c 文件和 .h 文件)。由于 HPM SDK 中已经存在 HPM Pinmux Tool 生成的 .h 文件,只需要把 .c 文件应用到项目中即可。

  5. HPM Pinmux Tool 生成的源码文件的文件名和函数名和 SDK 中的源码文件和函数名冲突,所以为了避免冲突。本 demo 只拷贝 HPM Pinmux Tool 提供的引脚配置初始化代码即可。在导入的 HPMicro_Demo 项目中,将 hello_world.c 内容更改为生成的功能配置代码。

    hello_world.c
    /*
    * Copyright (c) 2021 HPMicro
    *
    * SPDX-License-Identifier: BSD-3-Clause
    *
    */

    #include <stdio.h>
    #include "board.h"
    #include "hpm_debug_console.h"
    #include "hpm_gpio_drv.h"
    #include "hpm_gpiom_drv.h"

    static void init_pins_led(void)
    {
    // Pin initialization code generated by HPM Pinmux Tool
    HPM_IOC->PAD[IOC_PAD_PA23].FUNC_CTL = IOC_PA23_FUNC_CTL_GPIO_A_23;

    gpiom_set_pin_controller(HPM_GPIOM, GPIOM_ASSIGN_GPIOA, 23, gpiom_soc_gpio0);
    gpio_set_pin_output(HPM_GPIO0, GPIO_OE_GPIOA, 23);
    gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOA, 23, 1);
    }

    int main(void)
    {
    board_init(); // Initialize the development board

    init_pins_led(); // Initialize the GPIO for the LED

    while(1)
    {
    gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOA, 23, 0); // Set pin low to turn on LED
    board_delay_ms(500);
    gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOA, 23, 1); // Set pin high to turn off LED
    board_delay_ms(500);
    }
    return 0;
    }

如上面的代码所示,main 函数调用 SDK 里的 board_init 函数完成对开发板的外设时钟和部分 IO 的初始化。随后调用 init_pins_led 函数,该函数内的 GPIO 的初始化代码就是 HPM Pinmux Tool 生成的。在 while 循环中使用 gpio_write_pin 函数设置 GPIO PA23 IO 口的电平状态,使用 SDK 内实现的 board_delay_ms 延时函数,实现 LED 灯的交替闪烁。

程序编译烧录运行

ZSolution 支持通过 OpenOCD 将程序烧录运行至开发板。

  1. 首先构建项目:勾选"HPMicro_Demo"设置为当前活动项目(Active Project),点击构建,并在构建控制台中检查结果,构建成功后将生成可执行文件。

  2. 从顶部下拉框选择 OpenOCD 配置。ZStudio 为从 SDK 新建的项目提供了内置的

  3. 配置串口:在"视图"下拉菜单中选择"串口监控工具",点击 + 按钮配置串行端口连接参数,在串行端口下拉框中选择自动检测到的串行通讯端口,点击"确定"创建串口连接。

  4. 运行程序:在运行设置中选择连接目标为"开发板",选择 hpm5300evk 的 OpenOCD 配置,保存后运行程序。可以看到开发板的 LED 交替闪烁。

    LED 交替闪烁

AccInst

本节将用 AccInst 示例项目演示如何利用程序性能分析工具定位函数层级性能瓶颈并进行针对性的代码优化。

提示

本示例项目支持在 ZStudio Cloud 中试用。

打开 AccInst 解决方案

用户可以遵循以下步骤在 ZSolution 中打开示例项目:

  1. 在菜单栏选择"文件" > "从示例解决方案开始",在下拉框中选择 AccInst 并打开。

  2. 查看 AccInst 解决方案中的 Normal 项目和 Accelerated 项目。和 Normal 项目相比,Accelerated 项目在源码中添加了特殊加速指令。

构建

用户可以遵循以下步骤构建 Normal 项目和 Accelerated 项目:

  1. Normal 项目设置为当前活动项目,选择 Debug 配置,点击 build-button 进行构建,并在构建控制台中确认构建输出。

  2. Accelerated 项目设置为当前活动项目,其他配置保持不变,点击"构建",并在构建控制台中确认构建输出。

执行性能分析

用户可以遵循以下步骤为 Normal 项目和 Accelerated 项目执行性能分析:

  1. 成功构建后,将 Normal 项目设置为当前活动项目,点击菜单栏 "运行" >"性能分析"生成该项目的性能分析数据,性能分析完成之前不要重新执行该行为,以免生成错误数据。完成后右下角会生成提示信息。

  2. Accelerated 项目设置为当前活动项目,点击菜单栏 "运行" > "性能分析"生成该项目的性能分析数据,性能分析完成之前不要重新执行该行为,以免生成错误数据。完成后右下角会生成提示信息。

对比性能分析结果

根据函数执行统计(Function Summary)中的 self cycleself instructiontpt_mat_cmplx_mult_q15 为瓶颈函数。函数 tpt_mat_cmplx_mult_q15 包含了一个三层嵌套的循环。最内层的循环执行矩阵乘法运算。由于最内层循环是 CPU 花费最多时间的地方,因此优化 tpt_mat_cmplx_mult_q15 函数的性能会对整个代码的性能产生改进。

用户可以遵循以下步骤利用对比工具直观比较性能分析结果:

  1. 在主菜单中,点击"视图" > "性能分析对比" 调出对比工具。

  2. 在"性能分析对比"视图的左侧栏中,右键 Normal 项目的性能分析结果,并点击"选为对比基准"。

  3. 点击comparison-configuration-button 按钮打开设置窗口,调整完设置后,点击 "确定" 关闭窗口。

    • 选择"程序性能指标对比"的数据可视化形式:至少选择图或表格中的一种形式。

    • 选择对比项:默认对比项为"指令总数","周期总数"以及"单位周期执行的指令数",用户可自行选择对比项。

  4. 用户可以按住 ShiftCtrl 键选择两个结果,右击其中一个,然后选择"对比"。

  5. 性能分析对比视图将在编辑器中打开。

Accelerated 项目中 tpt_mat_cmplx_mult_q15 函数 selfcycleself instruction 指标的降低以及项目总周期数和总指令数的降低证明了优化瓶颈函数会提升整个程序的性能。