Nuclei Studio IDE使用说明

1. Nuclei Studio IDE简介与安装

1.1. Nuclei Studio IDE简介

一款高效易用的集成开发环境(Integrated Development
Environment,IDE)对于任何MCU都显得非常重要,软件开发人员需要借助IDE进行实际的项目开发与调试。ARM的商业IDE软件Keil,在中国大陆很多嵌入式软件工程师均对其非常熟悉。但是商业IDE软件(譬如Keil)存在着授权以及收费的问题,各大MCU厂商也会推出自己的免费IDE供用户使用,譬如瑞萨的e2studio和NXP的LPCXpresso等,这些IDE均是基于开源的Eclipse框架,Eclipse几乎成了开源免费MCU
IDE的主流选择。Nuclei Studio IDE正是芯来公司,基于MCU Eclipse
IDE开发的一款针对芯来公司处理器核产品的集成开发环境工具。

Eclipse平台采用开放式源代码模式运作,并提供公共许可证(提供免费源代码)以及全球发布权利。Eclipse本身只是一个框架平台,除了Eclipse平台的运行时内核之外,其所有功能均位于不同的插件中。开发人员既可通过Eclipse项目的不同插件来扩展平台功能,也可利用其他开发人员提供的插件。一个插件可以插入另一个插件,从而实现最大程度的集成。

Eclipse IDE平台具备以下几方面的优势。

  • 社区规模大

Eclipse自2001年推出以来,已形成大规模社区,这为设计人员提供了许多资源,包括图书、教程和网站等,以帮助他们利用Eclipse平台与工具提高工作效率。Eclipse平台和相关项目、插件等都能直接从eclipse.org网站下载获得。

  • 持续改进

Eclipse的开放式源代码平台帮助开发人员持续充分发挥大规模资源的优势。Eclipse在以下多个项目上不断改进。

-   平台项目------侧重于Eclipse本身。

-   CDT项目------侧重于C/C++开发工具。

-   PDE项目------侧重于插件开发环境。
  • 源码开源

设计人员始终能获得源代码,总能修正工具的错误,它能帮助设计人员节省时间,自主控制开发工作。

  • 兼容性

Eclipse平台采用Java语言编写,可在Windows与Linux等多种开发工作站上使用。开放式源代码工具支持多种语言、多种平台以及多种厂商环境。

  • 可扩展性

Eclipse采用开放式、可扩展架构,它能够与ClearCase、SlickEdit、Rational
Rose以及其他统一建模语言(UML)套件等第三方扩展协同工作。此外,它还能与各种图形用户接口(GUI)编辑器协同工作,并支持各种插件。

Nuclei Studio已经充分与Nuclei
SDK整合,完全满足SDK的需要,可以方便快捷地新建模板工程,快速修改工程设置选项。内置Nuclei
SDK源代码,可根据模板需求自动添加。

1.2. Nuclei Studio IDE下载

为了方便用户快速上手使用,本文档推荐使用预先整理好的Nuclei Studio IDE软件压缩包。芯来公司已经将该软件压缩包上传至公司网站,具体地址为https://www.nucleisys.com/download.php,如图 1‑1所示。用户可以在芯来科技公司网站的”下载中心”,根据用户开发环境,下载对应Windows或Linux的NucleiStudio压缩包(注意:芯来科技公司网站的下载中心,其内容会不断更新,用户请自行选择使用最新版本或继续使用当前版本)。目前已在Win 10 64位系统,Ubuntu 18.04/20.04和 Redhat7.6 64位版本上验证测试,推荐使用以上版本的系统。

图 1‑1NucleiStudio IDE软件包的下载界面

1.3. Nuclei Studio IDE安装

当完成NucleiStudio IDE压缩软件包下载,解压后包含若干文件如图 1‑2(解压路径中不可包含中文),分别介绍如下。

  • NucleiStudio软件包

    • 该软件包中包含了Nuclei Studio IDE的软件。注意:具体版本以及文件名可能会不断更新。

      • HBird_Driver.exe(2021.02版本起不再提供)
    • 仅Windows版提供,此文件为芯来蜂鸟调试器的USB驱动安装文件。

    • 当在Windows环境下,使用该调试器时,需要安装此驱动使该USB设备能够被系统识别。

    • 由于2021.02版本中更新的openocd引入了免驱功能。

      • SerialDebugging_Tool(2021.02版本起不再提供)
    • 仅Windows版提供,此文件为”串口调试助手”软件。此软件可以用于后续软件示例调试时通过串口打印信息。

图 1‑2NucleiStudio IDE压缩包文件内容

2. 启动Nuclei Studio

启动Nuclei Studio的要点如下(windows和linux均按照如下操作):

  • 直接双击NucleiStudio
    IDE文件包中NucleiStudio文件夹下面的可执行文件,即可启动Nuclei
    Studio,如图 2‑1所示。

  • 第一次启动Nuclei
    Studio后,将会弹出对话框要求设置Workspace目录路径,该目录将用于存放后续创建的项目工程文件,如图
    2‑2所示。

  • 设置好Workspace目录之后,单击”Launch”按钮,将会启动Nuclei
    Studio。第一次启动后的Nuclei Studio界面如图 2‑3所示。

  • 2021.02版本Nuclei Studio默认关闭了Launch Bar,请参照9.1开启Nuclei
    Studio中的Launch Bar功能,方便快速编译调试和下载。

图 2‑1双击”NucleiStudio.exe”启动Nuclei Studio

图 2‑2设置Nuclei Studio的Workspace目录

图 2‑3第一次启动Nuclei Studio界面

3. Nuclei Studio更新说明

Nuclei Studio自2021.09版后,将IDE与SDK完全分离,将采用全新的Nuclei
Package(NPK)的包管理的方式进行模板工程的管理和使用,方便用户进行不同SDK的导入并且在IDE上创建示例工程并使用,针对Nuclei
SDK和HBird SDK以及我们公司的SoC
IP产品提供的SDK,均可以打包成Zip包的方式以通过Nuclei Package
Management方式进行导入使用。

4. Nuclei Studio NPK功能

Nuclei Studio 中内建了对Nuclei
Package(NPK)功能的完整支持,方便开发者或者创建不同的软件开发包,并且通过Nuclei
Package Management方式导入到Nuclei Studio中使用,如果是CPU
IP客户,可以将自己的芯片SDK略作改造以支持NPK,并导入到Nuclei
Studio中使用,如果是SoC
IP客户,可以将提供的SDK打包成Zip包,导入使用,如果是开发者,也可以依赖某个特定的NPK,创建对应的BSP包或者APP包并提供给第三方使用,关于NPK功能的详细介绍,以及后续更新说明参见
https://github.com/Nuclei-Software/nuclei-sdk/wiki/Nuclei-Studio-NPK-Introduction。通过在原有的SDK中引入npk功能,编写npk.yml可以达到Project
Wizard功能的部分定制化。

开发者要使用Nuclei Studio进行工程的创建,需先将对应的SDK NPK
Zip包安装到IDE中,方可根据不同的开发板快速新建不同的模板工程,并根据不同的模板添加需要的SDK源码,根据选项生成不同的编译链接选项设置。

本章将在RVSTAR开发板上,以新建和修改GD32VF103的工程为例快速介绍Nuclei
Studio功能,RVSTAR开发板开发需要使用nuclei_sdk的npk包,详细的流程请参考之后的章节。

图 4‑1下载SDK的zip包

  • 将下载到的sdk的zip包安装到Nuclei
    Studio中,在菜单栏选择”RV-Tools-->Nuclei Package
    Management”在弹出的Nuclei Package
    Management管理页执行导入操作,选择下载到的nuclei_sdk.zip导入结果如图3-2。您也可以在Nuclei
    Package Management管理页执行相关SDK包的删除。


图 4‑2进入SDK Manage


图 4‑3导入资源包


图 4‑4资源包管理

  • 新建一个工程,可以在菜单栏中,选择”File --> New --> New Nuclei
    RISC-V C/C++ Project”,如 图4‑1。也可以在Project
    Explorer视图中选中”New Nuclei RISC-V C/C++ Project”

图 4‑5使用菜单栏创建项目

图 4‑6从Project Explorer中创建项目

  • 如图3-8所示,在弹出的窗口中可以不同的厂商提供的不同版本的SDK,选种某一Board下的SDK,看到相关SoC及Board的介绍。这里以RVSTAR开发板为例,所以这一项选择”GigaDevice->GD32VF103->Nuclei
    GD32VF103 RVSTAR Board->sdk-nuclei_sdk@0.3.4-dev”
    。点击”Next”进入下一步。(注意:这里的sdk版本号会随着版本迭代做相应的更新,并且也可能依赖特定版本的Nuclei
    Studio使用)

图 4‑7选择建立项目类型

  • 进入具体的项目配置页如图3-9所示,因为RVSTAR的内核是固定的N205,其对应的arch和abi分别是rv32imac和ilp32,所以Core选项不能修改。同样,RVSTAR开发板仅支持一种FLASHXIP下载模式,所以DOWNLOAD这一选项也不能修改。点击”Finish”完成工程创建。


图 4‑8选择程序模板及相关设置项

  • Nuclei Studio可以根据不同的工程模板添加不同的SDK源码,例如FreeRTOS模板工程会添加对应的OS内容,Demo_dsp模板工程可以添加NMSIS库文件。关于NMSIS详细信息请参考(https://doc.nucleisys.com/nmsis/index.html)。这里以Demo_dsp为例,”Project Example”选择”baremetal_demo_dsp”。因为使用dsp工程,需要添加NMSIS库,所以”Libraries”选择”NMSIS DSP”。

  • Nuclei Studio可以根据新建工程时的选项自动设置工程的选项。这里选择不使用浮点打印,所以”NEWLIB”选择”newlib-nano without float”。编译优化等级”Optimization Level”选择”Optimize more(-O2)”。之后一直选择”Next”直到”Finish”。

  • Nuclei Studio可以快速修改工程的设置选项。新建好的工程如图3-10所示,单击要修改的工程名,右击打开右键菜单,选择”SDK Configuration Tools”打开设置选项工具。如图3-11,如果要修改编译优化等级,修改”Optimization Level”为”None(-O0)”,点击”Save”修改选项。如图3-12修改成功后在修改后的工程处右击打开右键菜单,选择”clean”清除一下工程,再点击锤子图标编译工程。

  • 注意:SDK Configuration Tools修改编译配置后对调试配置(Debug Configurations)不生效,请手动修改对应的调试配置。

图 4‑9打开SDK设置工具

图 4‑10修改工程设置

图 4‑11清理工程并重新编译

5. 创建项目

这里以开发板为Nuclei FPGA Evaluation
Board,评估处理器内核为N307(rv32imafc)为例,详细介绍Nuclei
Studio中创建项目的常见方式。

在Nuclei Studio IDE创建项目可以有以下几种常见方式:

  • 使用模板自动创建项目:

    • 这是最简单快捷的方式,目前模板项目功能依赖于Nuclei Studio
      NPK功能,在导入对应的SDK NPK Zip包,即可在Nuclei
      Studio上进行模板工程的创建。芯来科技提供了Nuclei SDK、HBird
      SDK、SoC IP SDK的NPK
      Zip包,均可导入到IDE中进行工程的创建和使用。
  • 从已有项目直接导入创建新项目:

    • 这是最常见的方式,譬如,用户A可以将已有项目的文件夹直接进行打包保存,然后进行分享传播,用户B可以在另外的电脑上直接导入该项目,从而以此为基础创建新的项目,在此基础上直接使用或者开发修改。
  • 无模板手动创建项目:

    • 这是最繁琐的方式,该方法除了创建项目之外,还需要手动设置各种选项和路径。由于该方式比较繁琐,所以在实际工作中较少使用,但是通过该方式的详细讲解,用户可以详细了解如何配置各中选项和路径。
  • 基于已有的Makefile创建项目:

    • 这种方式比较适合于已经采用Makefile或者其他编译工具的项目,提供一种在IDE中编译工程,清理工程,调试工程的方式。在不修改编译系统的基础上,提供良好的IDE调试环境。

下文将对这几种方式分别进行介绍。

5.1. 通过模板自动创建项目

本节将介绍如何使用模板自动创建项目的方式,在Nuclei Studio
IDE创建一个简单的Hello World项目,详细步骤如下。

  • 新建一个工程,可以在菜单栏中,选择”File --> New --> New Nuclei
    RISC-V C/C++ Project”,如图4-1。也可以在Project
    Explorer视图中选中”New Nuclei RISC-V C/C++ Project” ,如图4-2。

图 5‑1 从菜单创建项目

图 5‑2 Project Explorer视图创建项目

  • 如图4-3所示,在弹出的窗口中选择项目类型,这里我们在Nuclei
    FPGA板,内核是N307,SDK为nuclei_sdk@0.3.2-dev
    版本来做一个测试开发,选对对应的Board下的SDK, 点击”Next”进入下一步。

图 5‑3 选择建立项目模型

  • 如图 5‑2所示,在弹出的窗口中设定如下参数(注意:此页面是通过NPK
    Configuration字段自动解析并生成的页面,不同的SDK或者不同的开发板或者不同的例子都可能会有不同的选项页面,请注意
    )。

    • Project name:项目命名。这里设置为”1_helloworld”

    • Project Example:选Helloworld。

    • Toolchains:我们使用Nuclei GUN Toolchain。


  • 我们的内核是N307,所以”Core”选择”N307”。

  • 蜂鸟开发板支持三种下载模式,以下为每种下载模式的简介,这里我们选择ILM模式。


  • ILM下载模式程序将被直接
    下载在MCU的ILM中,并从ILM开始执行。ILM由SRAM组成,会掉电丢失。

  • FLASH下载模式程序代码段的物理地址约束Flash区间,将代码段的逻辑地址约束在ILM的地址区间,意味着程序将被直接下载在MCU的Flash中,但是上电后要通过引导程序将代码段搬运到ILM中,然后从ILM中开始执行。程序被烧写在Flash中,不会掉电丢失。

  • FLASHXIP下载模式程序代码段约束Flash区间,意味着程序将被直接下载在MCU的Flash中,并直接从Flash开始执行。程序被烧写在Flash中,不会掉电丢失。

    • 其他各项可以按需进行配置

    • 点击”Finish”完成工程创建。

图 5‑2新建项目及模板选择

  • 如图 5‑3所示,使用模板自动创建Hello World项目已经完成。

图 5‑3完成模板创建项目

  • 用户可以直接使用菜单栏”Project—-> Build
    Project”或”C:\\Users\\ADMINI\~1\\AppData\\Local\\Temp\\1544372178(1).png
    “按钮,来对该项目进行编译,编译后如图
    5‑4。

图 5‑4完成项目编译

  • 如图 5‑5所示,在Hello
    World项目自动生成过程中,其对应的OpenOCD配置已经同步完成。在项目编译完毕后,用户可以右键点击项目列表”Hello
    World”,点击”Debug As —->Debug
    Configurations”开启调试配置面板进行查看。Debug与Run使用相同的配置文件,所以也可通过”Run
    As —->Run Configurations”打开。

图 5‑5开启调试配置面板

  • 如图 5‑6所示,用于调试使用的配置文件”Hello
    World_Debug_OpenOCD”已经自动生成。关于使用芯来蜂鸟调试器结合OpenOCD进行下载和调试的方法,可以查看第7章进行详细了解。

图 5‑6自动生成的OpenOCD配置

5.2. 从已有项目直接导入创建新项目

本节将介绍如何使用IDE从已有项目直接导入创建新项目,本文以N307的项目包为例进行导入,项目包存放在(https://github.com/riscv-mcu/Nuclei-Studio_IDE-Project-Package)。如图
5‑7所示,如需其它项目包请与芯来科技联系。

在基于Windows的Nuclei Studio
IDE开发环境中,如果用户使用”无模板手动创建工程”,也需要加载此项目包中的nuclei-sdk文件夹,相关内容会在下一节中具体介绍。

图 5‑7 位于github上面的项目包

将nuclei-eclipse_demo.rar压缩包下载解压后,内容如图 5‑8所示,分别为:

图 5‑8 选择导入的项目

  • 项目包的描述文件.setting,.project和.cproject

  • 项目包的Debug设置文件*.launch

  • nuclei_sdk文件夹

该文件夹下存放部分SDK源代码。

  • application文件夹

此文件夹包含hello_world样例程序的main函数源代码。

下一步导入下载好的项目包,导入步骤如下:

  • 在菜单栏中选择”File—->import”。

  • 如图 5‑9所示,选择”Existing Project into WorkSpace”后,点击”Next”。

图 5‑9选择导入的方式

  • 点击”Browse”,选择需要导入的项目路径,如图 5‑10所示,

图 5‑10选择需要导入的项目

  • 需要的导入的项目成功被IDE识别,点击”Finish”如图 5‑11所示

图 5‑11识别出要导入的项目

  • 在IDE的项目资源管理器中显示导入项目的目录结构如图
    5‑12所示。已有项目默认为N307的编译选项,Nuclei
    SDK仅包含helloworld使用到的文件。需要更多的Nuclei
    SDK源码请访问Github(https://github.com/riscv-mcu/hbird-sdk)获取源码。

图 5‑12显示项目的文件结构

5.3. 无模板手动创建项目

本节将介绍如何使用手动方式在Nuclei Studio IDE创建一个用户自定义的Hello
World项目(不建议使用,建议使用NPK方式)。开发板为Nuclei FPGA
Evaluation
Board,内核为N307。该方法除了创建项目之外,还需要手动设置各种选项和路径,详细步骤如下。

5.3.1. 手动创建项目

  • 在菜单栏中选择”File—-> New —-> C/C++ Project”。如图 5‑13所示。

  • 如图 5‑14所示,在弹出的窗口中设定如下参数。

    • Project name:项目命名。

    • Use default
      location:如果勾选了此选项,则会使用默认Workspace文件夹存放此项目。

    • Project type:选择”Hello World RISC-V C Project”。

然后点击Next进入下一步

  • 如图 5‑15所示,在弹出的窗口中设置Hello World项目的基本信息。

    • 确保”Source”选项内容为空,直接单击”Next”进入下一步。
  • 如图 5‑16所示,在弹出的窗口中设置项目的调试或者发布属性。

    • 该步骤可以使用默认信息不做任何修改,直接单击”Next”进入下一步。
  • 在弹出的窗口中设置项目所使用的RISC-V工具链。

    • 此处不要配置,直接选择”Finish”,至此便完成了Hello
      World项目的创建。
  • 创建完成的Hello World项目界面如图 5‑17所示。

  • 新建一个application文件夹。如图 5‑18,在工程处右击选择New —->
    Folder,输入application,点击”Finish”完成新建工程,如图
    5‑19。将main.c拖入application文件夹完成文件分类。

图 5‑13新建C/C++ Project

图 5‑14设置C Project项目名和类型

图 5‑15设置Hello World项目的基本信息

图 5‑16设置项目的调试或者发布属性

图 5‑17创建完成Hello World项目的界面

图 5‑18打开新建文件夹

图 5‑19完成新建文件夹

5.3.2. 配置项目的nuclei_sdk

本节介绍如何将nuclei_sdk加入到项目中,SDK的具体内容本文不做详细介绍,可以参考https://doc.nucleisys.com/nuclei_sdk/index.html。如果需要使用SDK的其他源文件,请到Github获取全部的Nuclei
SDK源码(这里以0.3.0版本为例),链接如下:https://github.com/Nuclei-Software/nuclei-sdk/releases
。本节仅介绍将nuclei_sdk中helloworld需要的文件加入到项目的步骤,具体步骤如下:

  • 进入Nuclei
    Studio的2_helloworld项目,按照如下步骤添加nuclei_sdk源文件。

    • 如图 5‑20所示,在Project
      Explorer栏中选中2_helloworld项目,单击鼠标右键,选择”Properties”打开工程设置页面。

    • 如图
      5‑21所示,在弹出的窗口中单击”Resource”,在右侧的Location栏目中单击其最右侧的箭头图标
      ,则会弹出文件窗口进入2_helloworld项目的文件夹位置。

    • 将图
      5‑7中介绍的nuclei-eclipse_demo.rar压缩包中的nuclei_sdk文件夹复制放于2_helloworld项目的目录下,如图
      5‑22所示。

    • 回到Nuclei Studio,在Project
      Explorer栏中选中2_helloworld项目,单击鼠标右键,选择”Refresh”,如图
      5‑23所示。

    • Refresh之后2_helloworld项目的下便可以看到nuclei_sdk文件夹,如图
      5‑24所示,至此便完成了nuclei_sdk源文件的导入。

图 5‑20打开工程设置选项页面

图 5‑21在弹出窗口进入hello_world项目的文件夹位置

图 5‑22 添加nuclei_sdk文件夹

图 5‑23刷新工程

图 5‑24 新建项目目录下的文件夹

5.3.3. 配置项目的编译和链接选项

为了使项目源代码能够被正确编译,需要配置编译和链接选项。

注意:本节中设置的编译与链接选项均为GCC工具链的常用选项,与在Linux环境中使用时的同名选项含义一致,本节在此不做赘述介绍。

配置编译与连接选项的步骤如下:

  • 在Project
    Explorer栏中选中hello_world项目,单击鼠标右键,选择”Properties”。

  • 在弹出的窗口中,展开C/C++ Build菜单,单击”Setting”,在右侧的Tool
    Settings栏目中进行设置。

  • 如图 5‑25所示,选中Target
    Processor,我们的内核是N307,因此需要按照图所示勾选配置选项,分别如下。

    • Architecture:选择RV32I。

    • Multiply extension(RVM):需勾选。

    • Atomic extension(RVA):需勾选。

    • Compressed extension(RVC):需勾选。

    • Integer API:选择”ILP32”。

    • Floting Point ABI:选择single precision

    • Code model:选择”Medium Any”。

    • 单击右下角的”Apply”按钮。

图 5‑25配置Target Processor选项

  • 如图 5‑26所示,选中”Optimization”,按照图所示勾选配置选项。

    • Optimization Level:选择Optimization Most (-O2)。

    • 依次勾选:

      • Function Sections (-ffunction-sections)

      • Data Sections (-fdata-sections)

      • No common unitialized (-fno-common)

注意:上述选项均为通用的GCC编译优化选项,请用户自行查阅GCC手册了解其含义。

  • 单击右下角的”Apply”按钮。

图 5‑26配置Optimization选项

  • 如图 5‑27所示,选中Debugging,按照图中所示勾选配置选项,分别为:

    • Debug Level:选择Default (-g)。

    • 单击右下角的”Apply”按钮。

图 5‑27配置Debugging选项

  • 选中GNU RISC-V Cross C Linker的General。

    • 如图 5‑28所示,按照如下步骤设置链接器的所需的链接脚本。

      • 选中右上角的加号按键。

      • 在弹出的窗口中单击”Workspace”按钮。

      • 这里我们使用HummingBird评估板,所以可以选择ILM下载模式对应的gcc_hbird_ilm.ld文件。在弹出的窗口中选择NucleiStudio文件包中的nuclei_sdk/SoC/hbird/Board/hbird_eval/Source/GCC文件夹下
        gcc_hbird_ilm.ld文件。其他下载模式切换此处文件,各文件详细介绍如下,可根据自己的实际情况选择。

        • gcc_hbird_ilm.ld脚本将程序代码段约束在ILM的地址区间,意味着程序将被直接下载在MCU的ILM中,并从ILM开始执行。ILM由SRAM组成,会掉电丢失。

        • gcc_hbird_flash.ld脚本程序代码段的物理地址约束Flash区间,将代码段的逻辑地址约束在ILM的地址区间,意味着程序将被直接下载在MCU的Flash中,但是上电后要通过引导程序将代码段搬运到ILM中,然后从ILM中开始执行。

        • gcc_hbird_flashxip.ld脚本程序代码段约束Flash区间,意味着程序将被直接下载在MCU的Flash中,并直接从Flash开始执行。程序被烧写在Flash中,不会掉电丢失。

        • 用户可以按照自己的需求选择合适的链接脚本。本节示例选择gcc_hbird_ilm.ld作为演示。

      • 设置完毕请单击右下角的”Apply”按钮。

图 5‑28配置链接脚本

  • 如图 5‑29所示,按图所示勾选配置选项,分别如下。

    • Do not use standard start files (-nostartfiles) 。

    • Remove unused sections (--gc-sections)。

    • 单击右下角的”Apply”按钮。

    • 注意:上述选项均为通用的GCC链接选项,请用户自行查阅GCC手册了解其含义。

图 5‑29配置链接的General选项

  • 如图 5‑30所示,选中GNU RISC-V Cross C
    Linker的Miscellaneous,按照图所示勾选配置选项。

    • 勾选”Use newlib-nano”。

    • 因为Hello World程序的Printf不需要打印浮点数,所以不要勾选”Use
      float with nano printf”。

    • 单击右下角的”Apply”按钮。

图 5‑30配置链接的Miscellaneous选项

5.3.4. 配置项目的包含路径和文件

为了能够正确编译nuclei_sdk文件夹中的源文件,需要按照如下步骤配置项目的包含路径和包含文件。

  • 如图 5‑20所示,在Project
    Explorer栏中选中hello_world项目,点击鼠标右键,选择”Properties”。

  • 在弹出的窗口中,展开C/C++ Build菜单,单击”Setting”,在右侧的Tool
    Settings栏目中进行设置。

  • 如图 5‑31所示,选中GNU RISC-V Cross C
    Assembler的Includes,按照图中所示配置包含文件,步骤如下。

    • 在Include paths栏目单击加号键。

    • 在弹出的窗口中单击”Workspace”,弹出Folder selection窗口。

    • 在Folder selection窗口中选择项目的nuclei_sdk目录下的NMSIS>Core>Include文件夹。

    • 在右下角单击”Apply”完成配置。

  • 采用上述方法,依次添加nuclei_sdk目录下的SoC>hbird>Board>hbird_eval>Include,SoC>hbird>Common>Include和SoC>hbird>Common>Source>Stubs文件夹作为包含路径,并采用同样的方法为GNU
    RISC-V Cross C
    Compiler的Includes栏目设置包含路径。设置完成后的界面如图 5‑32所示。

图 5‑31设置GNU RISC-V Cross C Assembler的Includes栏目包含路径

图 5‑32设置GNU RISC-V Cross C Compiler的Includes栏目包含路径

5.4. 基于已有的Makefile创建项目

本节将介绍如何使用已有的Makefile在Nuclei Studio
IDE创建一个使用Makefile的Hello World项目。开发板为Nuclei FPGA Evaluation Board,内核为N307。请先下载Nuclei SDK,Github链接为:https://github.com/Nuclei-Software/nuclei-sdk。该方法除了创建项目之外,还需要手动设置各种选项和路径,这里以helloworld为例,详细步骤如下。

5.4.1. 手动新建项目

在菜单栏中选择”File—-> New —-> Makefile Project with Existing Code”。如图 5‑33所示。

如图 5‑34所示,在图标1处输入工程名,这里我们命名为nuclei-sdk。在图标2处输入SDK的实际路径。在图标3处选择”RISC-V Cross GCC”。点击图标4完成新建项目。

图 5‑33新建基于Makefile的工程

图 5‑34设置工程选项

5.4.2. 设置Makefile路径和Build选项

右击新建好的工程,选择”Properties”打开设置页面,如图 5‑35,选择”C/C++
Build”,在”Build
Location”中选择”Workspace”。在弹出的弹窗中选择”application —>
baremetal —> helloworld”点击”OK”再点击”Apply”保存。

图 5‑35配置Makefile路径

如图 5‑36,在”C/C++
Build”中选择”Behavior”栏目,确保勾选”Build(Incremental
Build)”选项并输入”all CORE=n307
DOWNLOAD=ilm”。其中”CORE”选项根据实际的内核变化,这里以n307为例。”DOWNLOAD”选项可以修改不同的下载模式,详细请参考5.1节,这里以ilm模式为例。因为例程使用HummingBird
Evaluation
Board,所以SoC和Board都不必修改,如果使用其他开发板,以RVSTAR为例,请在此处设置增加”SOC=gd32vf103
BOARD=gd32vf103v_rvstar”,并且由于RVSTAR仅支持FLASHXIP模式,需要将”DOWNLOAD”设置为”flashxip”,同时”CORE”修改为”n205”。完成后点击”Apply”保存修改。

图 5‑36配置Build选项

在完成上述操作后,打开工具链配置页,如图
5‑36,按图中配置,点击”Apply”保存修改。

图 5‑37 配置工具链路径

编译运行以及下载的详细内容请参考5、6章。

6. 编译项目

6.1. Nuclei SDK 工程设置工具

在Nuclei Studio中可以通过Nuclei SDK工程设置工具一键修改通过Nuclei SDK
Project Wizard创建的工程的编译链接选项。本工具目前仅支持Nuclei
SDK,HBird SDK,Nuclei SoC IP SDK,
不支持无模板手动创建的项目和基于Makefile创建的项目,
或者是自行创建维护的项目。
详细使用步骤如下:

单击选中需要修改的工程,之后如图 6‑1打开RV-Tools>SDK Configuration
Tools,可以打开修改编译选项的弹窗。也可以单击要修改的工程后,如图
6‑2,点击工具栏的工程设置工具图标。或者单击要修改的工程后,键盘按下ctrl+6。也可以单击要修改的工程后,如图
6‑3,右击打开右键菜单,选择SDK Configuration Tools。如图
6‑4为工程设置工具弹窗,各选项详细功能如下:

  • projectName为当前选中的工程名。

  • Core
    为当前工程对应的内核。由于工具根据ARCH和ABI选项反推出对应的内核,而不同的内核可能有相同的ARCH和ABI选项,所以显示上可能会有所偏差,只要ARCH与ABI为正确的选项即可。此选项为方便快速切换内核选项使用。

  • 四个勾选项:Bitmanipulation Extension(RVB), Cryptography
    Extension(RVK), Packed SIMD/DSP Extension, Vector Extension(RVV)
    用于选择对应的扩展指令集(B/K/P/V)

  • ARCH对应的当前工程的arch选项, 根据Core和勾选项自动组合。

  • ABI对应的当前工程的abi选项。

  • Tuning根据不同级别处理器优化的gcc选项,选择Core会自动选择正确的Tuning选项,不建议自己调整。

  • Code Model针对RV32处理器,自动选择为Medium
    Low,而针对RV64处理器自动选择为Medium
    High,选择Core以后会自动选择合适的Code
    Model,其中RV64处理器必须使用Medium High.

  • Download对应当前工程的下载模式,可以切换选择不同的下载模式,目前仅Nuclei
    FPGA评估开发板支持切换下载模式,RVSTAR仅有FLASHXIP模式。其中切换到flash模式会额外定义VECTOR_TABLE_REMAPPED宏,其他模式不会定义这个宏

  • Select C Runtime
    Library对应的使用标准C库。在工程创建的时候,如果创建的工程采用的是Newlib,则这里只能进行newlib版本的切换,如果创建的工程才用的是Nuclei
    C Runtime Library(libncrt),则这里只能进行libncrt版本的切换。

  • Optimization Level对应编译的优化等级。

  • Extra Common
    Flags对应的是额外的通用编译选项。可以添加额外的通用编译选项。

  • Extra C Flags对应的是额外的C编译选项。可以添加额外的C编译选项。

  • Extra C++
    Flags对应的是额外的C++编译选项。可以添加额外的C++编译选项。

  • Extra ASM
    Flags对应的是额外的汇编编译选项。可以添加额外的汇编编译选项。

  • Extra Link
    Flags对应的是额外的链接选项。如果此选项已经有默认选项并且需要增加编译选项,可以在编译选项开头或结尾处相隔一个空格字符再增加编译选项。

根据需要修改以上的选项,这里我们修改优化等级为-Os优化生成可执行文件大小。点击save一键修改编译选项,save以后一定要先clean
project,之后如图 6‑5,右击修改后的工程打开右键菜单,选择”Clean
Project”清理一下工程,再点击锤子图标即可完成修改编译选项后重新编译工程。

图 6‑1打开修改编译选项弹窗1

图 6‑2打开修改编译选项弹窗2

图 6‑3打开修改编译选项弹窗3

图 6‑4一键修改编译选项

图 6‑5清理工程并重新编译工程

这里的SDK Configuration Tool切换不会对Debug
Configuration选项做任何改动,因此如果切换了Core以后,对应的调试配置(OpenOCD/QEMU/JLink)也需要手动修改。

需要注意的是如果要切换工程从32位变为64位,需要打开调试设置页面,如图
7‑6,修改”command”中”set arch riscv:rv32”为”set arch
riscv:rv64”,从64位切换回32位也应当修改这里的参数为对应的数值。

6.2. 在Nuclei Studio中编译Hello World项目

在Nuclei Studio中编译的步骤如下。

  • 为了保险起见,建议先将项目清理一下。如图 6‑6所示,在Project
    Explorer栏中选中hello_world项目,单击鼠标右键,选择”Clean Project”。

  • 如图
    6‑7所示,单击菜单上的锤子按钮,开始对项目进行编译。如果编译成功,则显示如图
    6‑7所示,能够看到生成可执行文件的代码体积大小,包括text段、data段和bss段,以及总大小的十进制和十六进制数值。使用Makefile方式新建的工程需要在右键菜单中选择”Build
    Project”进行编译。

图 6‑6对hello_world项目单击右键选择”Clean Project”

图 6‑7单击锤子图标对hello_world项目进行编译

编译成功后可以看到增加了Debug文件夹,如图 6‑8,各文件作用如下:

  • hello_world.elf是生成的可执行文件。

  • hello_world.hex是生成的Hex文件。

  • hello_world.lst是生成的list文件,可以看到反汇编和简单的代码分部信息。

  • hello_world.map是生成的map文件,可以详细的看到生成的代码分布情况。

图 6‑8查看编译后的生成文件

7. 调试运行项目

7.1. 使用蜂鸟调试器结合OpenOCD调试运行项目

7.1.1. 安装蜂鸟调试器驱动

Nuclei
Studio自2021.02版本起openocd实现windows免驱功能,使用此版本及以上windows环境的用户可跳过此节,Linux环境仍需配置驱动。低于此版本的用户需按照以下方法安装驱动。

7.1.2.1在Windows系统中安装驱动 {#在windows系统中安装驱动 .标题5}

程序编译成功后,便可以将程序下载到FPGA原型开发板运行。首先将原型开发板与主机PC进行连接,步骤如下。

  • 将蜂鸟调试器的一端插入主机PC的USB接口,另一端与原型开发板连接。注意:如果是第一次使用蜂鸟调试器,为了使得主机PC的Windows系统能够识别蜂鸟调试器的USB,需要安装驱动,双击如图
    1‑2所示的NucleiStudio_IDE文件包中的HBird-Driver.exe即可完成此驱动的安装。

  • 由于蜂鸟调试器还包含了”将原型开发板输出的UART转换成USB”的功能,因此如果蜂鸟调试器被主机PC识别成功(且驱动安装成功),那么将能够被主机识别成为一个COM串口。

    • 如图
      7‑1所示,在主机PC的设备管理器中的”端口(COM和LPT)栏目”中可以查询到该COM的串口号(譬如COM11)。

    • 此串口在后续的程序运行过程中将充当原型开发板运行程序的printf输出显示接口。

图 7‑1在设备管理器中查询COM串口号

注意:在通过”蜂鸟调试器”下载之前,需要注意”蜂鸟调试器”被Windows正确识别,检验的标准即为本节中所述正确地安装了HBird-Driver.exe的驱动,且能够在设备管理器中查询到COM的串口号。

7.1.3.1在Linux系统中安装驱动 {#在linux系统中安装驱动 .标题5}

在Linux环境下安装驱动步骤如下:

  • 1:连接开发板到Linux中,确保USB被Linux识别出来。如果使用虚拟机,如图
    7‑2,确保开发板连到了虚拟机当中。

  • 2:在控制台中使用lsusb指令查看信息,参考的打印信息如下:

Bus 001 Device 010: ID 0403:6010 Future Technology Devices
International, Ltd FT2232xxxx

  • 3:控制台中输入sudo vi
    /etc/udev/rules.d/99-openocd.rules指令打开99-openocd.rules文件,输入如下内容,保存退出。

SUBSYSTEM==\”usb\”, ATTR{idVendor}==\”0403\”,

ATTR{idProduct}==\”6010\”, MODE=\”664\”, GROUP=\”plugdev\”

SUBSYSTEM==\”tty\”, ATTRS{idVendor}==\”0403\”,

ATTRS{idProduct}==\”6010\”, MODE=\”664\”, GROUP=\”plugdev\”

  • 4:断开调试器再重新连接到Linux系统中。

  • 5:使用ls
    /dev/ttyUSB*命令查看ttyUSB信息,参考输出如下:/dev/ttyUSB0
    /dev/ttyUSB1

  • 6:使用ls -l /dev/ttyUSB1命令查看分组信息,参考输出如下: crw-rw-r--
    1 root plugdev 188, 1 Nov 28 12:53 /dev/ttyUSB1

可以看到ttyUSB1已经加入plugdev组,接下来我们要将自己添加到plugdev组(不同环境可能名字不同,请根据实际情况修改)。使用whoami命令查看当前用户名,我们将其记录为\<
your_user_name >。

  • 7:使用sudo usermod -a -G plugdev
    \命令将自己添加进plugdev组。加入以后一定要重启或者注销操作系统。

  • 8:再次确认当前用户名已属于plugdev组,使用groups命令,可以看到打印信息中有plugdev即成功将当前用户添加至plugdev组。如果没有可以尝试重启。

图 7‑2开发板连接至虚拟机中

7.2.2. 新建并配置Debug Configuration

通过Nuclei Studio新建并配置Debug Configuration内容的步骤如下。

  • 如图 7‑3所示,在菜单栏中选择”Run—->Debug Configurations”。

  • 如图
    7‑4所示,在弹出的窗口中,如果没有当前工程的调试设置内容,右键单击”GDB
    OpenOCD
    Debugging”,选择”New”,将会为本项目新建出一个调试项目”hello_world_demo
    Debug”,如图 7‑5所示。确保”Project”是当前需要调试的工程,”C/C++
    Application”中选择了正确的需要调试的ELF文件。

  • 如图 7‑6所示,选择调试项目”hello_world_demo
    Debug”的Debugger菜单,在Config options栏目中填入-f
    \”nuclei_sdk/SoC/demosoc/Board/nuclei_fpga_eval/openocd_demosoc.cfg\”,以确保OpenOCD使用正确的配置文件。这里的配置文件(nuclei_sdk/SoC/demosoc/Board/nuclei_fpga_eval/openocd_demosoc.cfg)根据实际工程中openocd的配置文件路径而定。例如:如果使用makefile方式导入工程,修改此处的内容为-f
    “SoC/demosoc/Board/nuclei_fpga_eval/openocd_demosoc.cfg”

如果当前内核是RISC-V 32位内核,请确保Commands内容包含set arch
riscv:rv32

如果当前内核为64位,应确保替换为set arch riscv:rv64

  • 如图 7‑7所示,选择调试项目”hello_world_demo
    Debug”的Startup菜单,确保”Debug in RAM”,”Pre-run/Restart reset”,”Set
    Breakpoint at Main”和”Continue”被勾选。

  • 如图 7‑7,完成后点击右下方”Apply”保存设置。

图 7‑3单击”Run Configuration”进行下载

图 7‑4添加新的GDB OpenOCD Debugging

图 7‑5 GDB OpenOCD Debugging栏目下的hello_world项目Debug

图 7‑6配置hello_world_demo Debug的参数1

图 7‑7配置hello_world_demo Debug的参数2

7.2.3. 在原型开发板上调试程序

在开发板上调试之前,需要打开串口以便观察Printf函数打印信息。

使用Windows系统打开串口的方法如下:

  • 打开Nuclei Studio自带的串口打印通道,选择Window>Show
    View>Terminal,如图 7‑8所示,点击显示器图标打开串口设置选项。如图
    7‑9所示,在其窗口中设置Choose terminal(选择串口,即Serial
    Terminal)、”串口号”(这里以COM11为例)、”波特率(设置为115200)”等参数后,单击”OK”按钮。

图 7‑8通过Nuclei Studio打开串口调试助手并配置参数

图 7‑9设置串口参数

使用Linux系统打开串口方法如下:

  • 打开Nuclei Studio自带的Terminal终端,选择Window>Show
    View>Terminal,如图 7‑8所示,点击显示器图标打开串口设置选项。如图
    7‑10所示,choose terminal选择Local
    Terminal,点击OK打开Terminal终端。如图 7‑11所示,输入”minicom
    /dev/ttyUSB1 115200”打开串口,即可在Nuclei
    Studio中查看串口打印信息。

图 7‑10打开Terminal终端

图 7‑11打开串口

如果程序员希望能够调试运行于原型开发板中程序,可以使用Nuclei Studio
IDE进行调试。由于IDE运行于主机PC端,而程序运行于原型开发板上,因此这种调试也称为”在线调试”或者”远程调试”。

这里以1_helloworld为例,使用Nuclei Studio
IDE对Demosoc原型开发板进行在线调试的步骤如下。

  • 确保6.2节中的Debug设置内容正确,可以打开Debug设置选项确认。如图
    7‑12所示,在1_helloworld工程处右击,选择”Debug As —>Debug
    Configuration”打开Debug设置页面选择之前新建的设置进行检查。

  • 确定设置无误后,在图
    7‑13的下拉框选中Debug,之后左侧图标会变为甲虫图标,单击即可进入调试模式并下载程序进入开发板中。

图 7‑12 单击”Debug Configuration”进行下载

图 7‑13切换至Debug模式

  • 如果下载成功,则如图 7‑14所示,并且会启动调试界面。

    • 如图 7‑14的1号标注位置,这里功能包括单步,运行,汇编级调试等。

    • 如图 7‑14的2号标注位置,这个箭头表示当前程序运行位置。

    • 如图
      7‑14的3号标注位置,在代码的左侧双击即可在该行设置断点,再次双击可以取消断点。

    • 如图 7‑14的4号标注位置,这里可以切换编辑模式和调试模式。

    • 如图 7‑14的5号标注位置,这里是函数内变量显示的位置。

    • 如图
      7‑14的6号标注位置,这里是查看寄存器数值的位置。图中显示的是PC寄存器当前的数值。

    • 如图 7‑14的7号标注位置,点击这里红色按钮可以退出调试模式。

    • 如图
      7‑14的8号标注位置的下方,这里可以使用GDB控制台指令进行调试。

图 7‑14下载完成后进入调试界面

7.2.4. 下载运行程序

调试程序没有出现问题后,可以将程序下载进开发板。如图
7‑15,点击下拉框切换至运行模式,此时左侧图标会切换为绿色运行按键,单击即可将程序下载至开发板并运行。由于调试和下载运行使用相同的设置文件,所以不需要再次设置。如图
7‑16,可以看到串口正确打印出helloworld等信息。需要断开连接,如图
7‑17,在console栏目下点击红色按钮断开连接。

图 7‑15下载程序到开发板中运行

图 7‑16串口调试助手界面输出的Hello World

图 7‑17下载完成单击红色按钮断开连接

HummingBird Evaluation
Board也支持使用J-Link调试。前往SEGGER官网J-Link页面(https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack),根据自己的操作系统下载最新的J-Link驱动并安装。注意,J-Link的版本必须高于v6.62版本。

如果使用串口进行打印输出,则可以略过本节后续内容。如果想使用J-Link的RTT打印输出,请按照以下步骤配置。

打开当前工程的设置页面,如图
7‑18,在”Resource”选项点击红框标注的图标快速打开工程所在的目录。如图
7‑19,在”nuclei_sdk/SoC/demosoc/Common/Source/Stubs”路径下新建一个”SEGGER”文件夹,此文件夹用来存放RTT相关文件。

图 7‑18打开工程所在目录

图 7‑19新建”SEGGER”文件夹

安装完成后打开J-Link驱动的根目录,将”Samples ->
RTT”路径下的”SEGGER_RTT_V680d.zip”解压缩(具体压缩包名可能因版本不同而变化)。解压缩后文件内容如图
7‑20,将RTT文件夹下的”SEGGER_RTT.c”,”SEGGER_RTT.h”和”SEGGER_RTT_Conf.h”三个文件以及Syscalls文件夹下的”SEGGER_RTT_Syscalls_GCC.c”这些文件复制到之前新建的SEGGER文件夹中,最后如图
7‑21所示。在IDE中打开”SEGGER_RTT_Syscalls_GCC.c”,如图
7‑22,注释”#include \“所在的这一行。

图 7‑20压缩包内文件内容

图 7‑21复制后SEGGER文件夹内容

图 7‑22注释不使用的头文件

文件添加完成后添加SEGGER文件夹路径至include,如图
7‑23,打开当前工程的设置页面,添加SEGGER文件夹路径至include中。

}

图 7‑23添加SEGGER文件夹路径至Include中

接下来移除原有的write函数。如图
7‑24,在”nuclei_sdk/SoC/hbird/Common/Source/Stubs”下的”write.c”文件处右击,选择”Resource
Configurations —> Exclude from Build”。如图 7‑25,选择”Select
All”,点击”OK”。以后如果想切换回使用串口打印,可以使用相同的方式移除SEGGER文件夹并把”write.c”文件添加回工程。

图 7‑24打开Exclude from Build

图 7‑25移除write.c文件

7.2.2. 新建并配置Debug Configuration

新建并配置J-Link调试下载的Debug Configuration步骤如下:

  • 在菜单栏中选择”Run—->Debug Configurations”。

  • 如图
    7‑26,在弹出的窗口中,如果没有当前工程的调试设置内容,右键单击”GDB
    SEGGER J-Link Debugging”,选择”New
    Configuration”,将会为本项目新建出一个调试项目”1_helloworld
    Debug”,如图 7‑27。确保”Project”是当前需要调试的工程,”C/C++
    Application”中选择了正确的需要调试的ELF文件。

图 7‑26新建J-Link Debug Configuration

图 7‑27确保Project和C/C++ Application与工程一致

打开Debugger栏目,如图 7‑28。

确保1号位置”Start the J-Link GDB server locally”被选中。

2号位置正确指向JLinkGDBServerCL.exe的路径。

3号内是当前使用的内核,这里以N307为例,输入N307即可。如果使用RV-STAR开发板,这里输入GD32VF103VBT6。如果使用其他开发板请参考J-Link
Support
Device网页,链接如下:https://www.segger.com/downloads/supported-devices.php

4号选择”Interface”为JTAG,”initial speed”为Auto。

5号确认与使用的GDB设置一致。

如果有修改的内容,点击6号位置”Apply”保存。

图 7‑28设置Debugger栏目内容

打开”Startup”栏目,如图 7‑29,确保JTAG/SWD Speed为Auto,”set Breakpoint
at main”,”Continue”,”Pre-run/Restart reset”和”RAM
application”选项被勾选,并且取消勾选”Initial Reset and Halt”选项。

图 7‑29设置Startup栏目内容

以上设置内容完成后,如果有变动需要点击右下角Apply保存设置,如果没有变动点击close即可。

7.2.3. 在原型开发板上调试程序

使用J-Link在HummingBird Evaluation Board调试需要连接跳线。如图
7‑30,红框标注的部分是J-Link需要连接到板子的部分。其中VTref连接到板子上V3.3的接口,其他部分连接到JTAG接口,各引脚的丝印就在旁边,一一对应连接即可,最后实物连接如图
7‑31。

图 7‑30J-Link 引脚图

C:\\Users\\Bob Hu\\AppData\\Local\\Temp\\WeChatFiles\\a9e8caf94c154d388a7d69ad03c2f35.png

图 7‑31J-Link实物连接图

在开发板上调试之前,如果使用串口打印,需要连接JTAG上的串口引脚到自己的主机上,再打开串口以便观察Printf函数打印信息。如果使用RTT打印,需要打开J-Link
RTT Viewer查看printf打印信息。如图
7‑32,按照图中内容设置,选择USB方式连接。Specify Target
Device根据使用的内核来修改,这里以N307为例。Target Interface & Speed
设置为1000kHz,可根据实际使用情况来修改。RTT Control Block选择Auto
Detection。

图 7‑32设置RTT Viewer


7‑33中下拉框选中Debug,之后左侧图标会变为甲虫图标,单击即可进入调试模式并下载程序进入开发板中。

如果下载成功,则如图 7‑34所示,并且会启动调试界面。

  • 如图 7‑34的1号标注位置,这里功能包括单步,运行,汇编级调试等。

  • 如图 7‑34的2号标注位置,这个箭头表示当前程序运行位置。

  • 如图
    7‑34的3号标注位置,在代码的左侧双击即可在该行设置断点,再次双击可以取消断点。

  • 如图 7‑34的4号标注位置,这里可以切换编辑模式和调试模式。

  • 如图 7‑34的5号标注位置,这里是函数内变量显示的位置。

  • 如图 7‑34的6号标注位置,这里是查看寄存器数值的位置。

  • 如图 7‑34的7号标注位置,点击这里红色按钮可以退出调试模式。

  • 如图 7‑34的8号标注位置下方,这里可以使用GDB控制台指令进行调试。

图 7‑33切换至下载模式

图 7‑34下载完成后进入调试页面

7.2.4. 下载运行程序

调试程序没有出现问题后,可以将程序下载进开发板。如图
7‑35,点击下拉框切换至运行模式,此时左侧图标会切换为绿色运行按键,单击即可将程序下载至开发板并运行。由于调试和下载使用相同的设置文件,所以不需要再次设置。如图
7‑36,可以看到RTT
Viewer正确打印出helloworld等信息。如果需要断开连接,如图
7‑37,在console栏目下点击红色按钮即可断开连接。

图 7‑35下载程序到开发板中运行

图 7‑36打印输出Hello World

图 7‑37下载完成单击红色按钮断开连接

8. 导入旧版本Nuclei Studio创建的工程

Nuclei Studio从2020.08版本开始,官方工具链从GNU MCU RISC-V GCC
(riscv-none-embed-gcc)升级到RISC-V Nuclei GCC
(riscv-nuclei-elf-gcc),因为编译前缀发生变化,所以使用201909及其之前版本的IDE生成的工程,经过调整设置后才可以在新版本IDE中使用。这里以201909版本的Nuclei
Studio生成的helloworld工程为例,其导入及修改设置的详细步骤如下:

  • 导入201909版本生成的helloworld工程,详细的导入方式请参考5.2节,这里不做赘述。

  • 导入工程后右击选择”Properties”打开设置页面,选择”C/C++ Build
    Settings”,打开Toolchains栏目然后修改Name下拉选项为”RISC-V Nuclei
    GCC (riscv-nuclei-elf-gcc)”,如所示。修改后点击Apply保存修改。

图 8‑1修改Nuclei Studio工具链

  • 修改后右击工程选择”Clean Project”再选择”Build Project”即可。

9. 常见问题

9.1. Nuclei Studio启动慢

Nuclei
Studio是基于eclipse进行开发,继承了eclipse的可扩展性的特点的是同时,也存在着启动较慢的问题,第一次启动时,软件需要验证环境;生成常用的缓存文件;创建Workspace.在2021.09版的Nuclei
Studio中,我们针对启动做了优化,在电脑性能足够的前提下,第一次启动Nuclei
Studio能在一分钟内完成。

Nuclei Studio最佳运行环境:

  • Windows 10操作系统

  • 4G以上内存(2G可以被Nuclei Studio分配使用)

9.2. Nuclei Studio编译程序很慢

在测试使用过程中,我们发现Nuclei
Studio在编译项目时会出现很慢的现像,经过排查发现,当电脑安装360杀毒软件时,编译指令执行很慢,退出360杀毒软件时,编译指令可以按正常速度执行。为了保障Nuclei
Studio的正常使用,建议在使用时退出360等杀毒软件。

9.3. 打开/关闭Launch Bar

打开菜单栏”Window -> Preferences”,搜索”bar”,如图
9‑1,取消勾选第一个选项即可关闭Launch Bar。同理,想要使用Launch
Bar功能,请勾选此选项。

图 9‑1关闭Launch Bar

9.4. 使用Launch Bar

Smartchip Studio的Launch
Bar(下图中蓝色框内标注部分)是对后边下拉框中选中的调试配置对应的工程进行编译、调试和下载等操作,如需使用此部分请注意,图标是与下拉框中调试配置内容相绑定。下面详细介绍Launch
Bar各部分功能:

图 9‑2Launch Bar功能介绍

图标1:编译选中的调试配置对应的工程。此处选中的工程为5号下拉框选中的调试配置对应工程,并非Project
Explorer中选中的工程。

图标2:运行/调试选中的调试配置对应的工程。此处图标会根据下拉框4的内容变化。

图标3:退出下载/调试模式。

下拉框4:切换选择下载/调试模式。切换后会改变图标2的显示内容。

下拉框5:选中调试配置文件。此处的内容会影响图标1、2、3对应的工程。

齿轮图标6:打开当前选中的调试配置页面,可直接进行修改保存。

9.5. 不使用Launch Bar进行运行/调试

对于初次新建的工程,如果不使用Launch Bar功能,可以右键工程,选择”Debug
As -> Debug
Configurations”。在弹窗中选择工程对应的设置选项,这里以helloworld工程为例,如图
9‑3,选择”helloworld_debug_openocd”,之后选择”Debug”开始调试。

同理,初次运行需要右击工程,选择”Run As -> Run
Configurations”。在弹窗中选择工程对应的设置选项,之后选择”Run”开始运行。

图 9‑3不使用Launch Bar首次进行调试

若当前工程已按以上方式进行过调试或运行操作,可在上方按键中选择
的下拉选项,快速选择对应的工程设置进行调试。对于运行,可以在
的下拉选项,快速选择对应的设置。

9.6. Debug页面查看寄存器

进入Debug模式后,可能有些页面并不能第一时间找到,这里以查看寄存器栏目为例。在菜单栏选择”Window
-> Show View ->
Registers”打开寄存器栏目。同样,如果想查看内存,可以选择”Window -> Show
View -> Memory”,想打开调试控制台,可以选择”Window -> Show View ->
Debugger Console”,其他页面此处不做过多介绍,请用户自行体验。

9.7. Debug页面结束进程

在Debug页面要退出调试,可点击
退出调试。为防止打开多个进程导致报错,在Debug页面,右击Debug栏目中的进程,选择”Terminate
/ Disconnect All”关闭所有Debug进程。

9.8. Nuclei Studio工具栏中各按键功能

在Nuclei Studio中,常见的工具栏图标如下,本节将依次介绍各按键的功能。

新建按键
,包括新建各种文件和工程。

保存当前文件
和保存所有未保存文件

切换编译设置
,默认只有Debug和Release,用户可自行添加,这里不做介绍。

编译工程
,可以在下拉选项中编译Project
Explorer中选中的工程。

编译所有工程
,一次性编译所有Project Explorer中的工程。

新建功能
,包含工程创建,目录创建,文件创建和类创建。

调试
,可根据下拉选项选择不同调试设置来调试不同的工程。

运行
,可根据下拉选项选择不同的设置来选择不同的工程。

Profile
,使用Profile功能,暂不支持,此处不做介绍。

用户自定义工具
,此处不做介绍,用户可自己深入研究。

搜索工具
,可搜索任务,文本等。

文本阅读工具
,可以展开或折叠文本等功能。

控制台工具
,可选择打开各种控制台或串口等。

Debug用
,前者跳过所有断点,后者实现Restart功能。

查看CMSIS
,eclipse自带功能,暂不支持。

Nuclei SDK工程设置工具
,参见6.1。

文本阅读工具
,可设置快速跳转,具体功能此处不作过多介绍。

9.9. 显示其他窗口

在IDE的右上角
按键可以切换不同的显示模式,常用的是C/C++页面和Debug页面。其中,在进入Debug模式时,若不在Debug页面,会有弹窗提示,此时点击”Switch”选项可以切换至Debug页面。在菜单栏中选择”Window
-> Perspective -> Open Perspective”可以快速切换显示窗口。

在不同的窗口下,”Window -> Show View”显示的内容也不尽相同。如图
9‑4,在Debug窗口中可以选择显示如寄存器(Registers),内存(Memory)和调试控制台(Debugger
Console)。

图 9‑4Debug模式查看功能窗口

9.10. 恢复默认窗口布局

在菜单栏中选择”Window -> Perspective -> Reset
Perspective”,在弹窗中选择”Reset Perspective”可以恢复窗口默认布局。

9.11. 对比历史文件

右击要查看历史的文件,选择”Compare With -> Local
History”打开历史记录。如图
9‑5,在打开的History栏目双击选择要对比的文件历史版本,可以查看文件变动历史。

图 9‑5对比历史文件

9.12. 新建工程时可能出现报错

新建工程时IDE需要索引整个工程,根据主机性能其所用时间不同。如果主机性能较差,可能会看到索引时产生error,索引结束后error会消失。如出现以上现象,请以编译时是否报错为准。

9.13. 新增Include路径出现缓存

在include页面新增路径时,可能会出现缓存的路径内容,此时点击Workspace或File
System选中后可覆盖其内容。

9.14. 设置页面栏目找不到

有时可能因为弹窗大小,部分设置栏目被隐藏起来,如图
9‑6,可点击红框中左右方向图标显示隐藏栏目。

图 9‑6显示隐藏栏目

9.15. 开发板下载速度很慢

如果遇到开发板下载速度很慢,甚至出现超时的报错,请切换至使用USB3.0接口,如果使用虚拟机开发,也请同时将USB接口设置为3.0。

9.16. Linux环境下多用户使用Nuclei Studio

如果需要多用户同时使用Nuclei Studio(不推荐),用户在运行Nuclei
Studio时首先要打开菜单栏的”Window->Preferences”。在弹窗中需要修改三个地方:

  • 打开”MCU->Global OpenOCD
    Path”,”Executable”输入”openocd”,”Folder”输入”\${eclipse_home}/toolchain/openocd/bin”。

  • 打开”MCU->Global QEMU
    Path”,”Executable”输入”qemu-system-riscv32”,”Folder”输入”\${eclipse_home}/tools/qemu”。

  • 打开”MCU->Global RISC-V Toolchains Paths”,”Default
    toolchain”选中”RISC-V Nuclei GCC”,”Toolchain
    folder”输入”\${eclipse_home}/toolchain/gcc/bin”。

修改后点击”Apply and Close”保存并关闭设置弹窗。

9.17. 设备管理器中识别出两个串口

可能连接设备后在任务管理器中识别出两个串口,如图
9‑7,其中COM编号较大的是串口打印使用,可以使用串口调试助手等工具连接查看打印信息,但是请不要占用COM编号较小的串口。

图 9‑7设备管理器中显示两个串口

10. Nuclei Studio升级

一般情况下,如果Nuclei Studio没有大的版本变动,Nuclei
Studio升级工作可以由用户下载最新的GNU工具链以及其他相关工具和升级IDE
Plugins的方式来完成。

10.1. GCC/OpenOCD等工具链的安装

Nuclei
Studio已经把工具链集成在IDE内部,工具链存放在NucleiStudio_IDE_XXX文件夹内,路径为:NucleiStudio_IDE_XXX\NucleiStudio\toolchain。IDE默认使用此路径的工具链,所以请不要移动”toolchain”此文件夹,使用IDE创建工程后也不需要进行工具链的相关配置。

由于工具链升级的速度会比IDE快,所以后期需要用户手动升级工具链,工具链升级方法如下:

  • 首先删除需要更新的GCC或者OpenOCD文件内的内容,然后在芯来科技官网下载最新版本的GCC或者OpenOCD。

  • 将GCC或者OpenOCD的内容复制到对应的文件夹下,即可完成IDE工具链的更新,IDE自带的工具链的版本号记录在ReadMe.txt中,如图
    10‑1所示。注意:要保证gcc所在的这一级目录文件夹名字不变,替换后保证bin文件夹所在层级是图中文件夹的子目录,中间不要有其他文件夹。

}

图 10‑1IDE工具链路径

10.2. IDE Plugins升级

Nuclei Studio支持IDE内在线升级,步骤如下。

  • 如图 10‑2,打开安装软件弹窗,在菜单栏选择”Help Install New
    Software”。

  • 如图 10‑3,点击”already installed”打开已安装界面。

  • 如图 10‑4,选择”Nuclei Studio”,点击”update”即可自动完成在线更新。

图 10‑2打开安装软件弹窗

图 10‑3打开已安装界面

图 10‑4选择”Nuclei Studio”更新

11. 使用QEMU仿真调试

最新版本的Nuclei
Studio整合了QEMU,支持GD32VF103和芯来全系列Core的工程实现仿真调试功能,这里以RVSTAR工程为例。

按照前文的内容新建一个RVSTAR工程,这里以helloworld工程为例,我们新建一个名为helloworld的工程。

右击新建的工程,选择”Debug As -> Debug
Configurations”打开调试设置弹窗。如图 11‑1,在弹窗中选择”GDB QEMU
Debugging”下带有”qemu”后缀的设置选项。我们工程为”helloworld”,所以此处选择”helloworld_debug_qemu”,选中后点击右下方的”Debug”开始仿真调试。

图 11‑1选择QEMU进行仿真调试

QEMU的详细配置页,新增了Machine Bit、Board name、Nuclei RISC-V
Core、Download选项,用户可以在这里对QEMU进行自定义配置。

  • Machine Bit QEMU可以仿真32位和64位两种设备

  • Board name 针对不同的Board有不同的外设及配置

  • Nuclei RISC-V Core
    QEMU已经支持当前nuclei大多数的处理器型号,并会持续更新,支持更多的最新处理器的型号。下面展示了支持的CPU型号的情况。

  • Download QEMU仿真了不同的下载模式

备注:2021.09版的Nuclei Studio对之前版本的Nuclei
Studio创建的工程的qemu部分不兼容

如图
11‑2所示,仿真调试页面与一般的调试页面完全相同,其中,串口打印信息可直接在Console中查看。寄存器可能有部分未实现的会报错,属于正常现象。

图 11‑2QEMU仿真调试界面

仿真运行流程与仿真调试相类似,右击RVSTAR工程选择”Run As -> Run
Configurations”,弹窗中选择”GDB QEMU
Debugging”下带有”qemu”后缀的设置选项。选中后点击”Run”,可以在控制台(Console栏)看到运行的打印输出。