Nuclei Studio用户手册

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包,详细的流程请参考之后的章节。

  • 在Nuclei Studio 2022.04版中最大的更新,就是将npk云端化,用户直接在Nuclei Studio中就可以下查看到所有的npk并自行安装,在菜单栏选择“RV-Tools—>Nuclei Package Management”在弹出的Nuclei Package Management管理页进行npk管理如图4-3。在Nuclei Package Management页面,先点击一下Refresh获取最新的npk信息,npk安装前状态为Not Installed然后选中自己想要安装的npk,点击Download进行安装,本教程安装sdk-nuclei_sdk的最新版本0.3.7,安装完成后npk状态变为。

图片alt
图片alt
图片alt

  • 新建一个工程,可以在菜单栏中,选择“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中创建项目

  • 因为NucleiStudio的个性化设置的配置存放在workspace中,而202204版之前的NucleiStudio中没有“File —> New —> New Nuclei RISC-V C/C++ Project“,所以会找不到,如果找不到,可以通过找到“File —> New —>Project“,然后在弹出框中选中C/C++中可以找到“New Nuclei RISC-V C/C++ Project“
    图片alt

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

图片alt

图 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.7 版本来做一个测试开发,选对对应的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:UsersADMINI~1AppDataLocalTemp1544372178(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:UsersBob HuAppDataLocalTempWeChatFilesa9e8caf94c154d388a7d69ad03c2f35.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“即可。