NucleiStudio的快速上手
修订历史
版本号 | 修订日期 | 修订的章节 | 修订的内容 |
---|---|---|---|
1.0.0 | 2020/09/22 | N/A | 初始版本 |
1. Nuclei Studio简介与安装
一款高效易用的集成开发环境(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项目的不同插件来扩展平台功能,也可利用其他开发人员提供的插件。一个插件可以插入另一个插件,从而实现最大程度的集成。
RV-STAR开发板是芯来科技使用RISC-V通用MCU芯片GD32VF103定制的嵌入式MCU学习开发板。有关RV-STAR开发板的更多信息,请参阅网站http://www.riscv-mcu.com/quickstart.html。
为了方便用户快速上手使用,本文档推荐使用预先整理好的Nuclei Studio IDE软件压缩包。芯来公司已经将该软件压缩包上传至公司网站,具体地址为https://www.nucleisys.com/download.php,如图 1‑1所示。
用户可以在芯来科技公司网站的“下载中心”,根据用户开发环境,下载对应Windows或Linux的NucleiStudio压缩包(注意:芯来科技公司网站的下载中心,其内容会不断更新,用户请自行选择使用最新版本或继续使用当前版本)。
解压后包含若干文件如图 1‑2(解压路径中不可包含中文),分别介绍如下。
-
NucleiStudio软件包
- 该软件包中包含了Nuclei Studio IDE的软件。注意:具体版本以及文件名可能会不断更新。
-
HBird_Driver.exe
-
仅Windows版提供,此文件为芯来蜂鸟调试器的USB驱动安装文件。
-
当在Windows环境下,使用该调试器时,需要安装此驱动使该USB设备能够被系统识别。
-
-
SerialDebugging_Tool
- 仅Windows版提供,此文件为“串口调试助手”软件。此软件可以用于后续软件示例调试时通过串口打印信息。
2. 启动Nuclei Studio
启动Nuclei Studio的要点如下:
-
直接双击NucleiStudio IDE文件包中NucleiStudio文件夹下面的可执行文件(Windows : eclipse.exe ; Linux : eclipse),即可启动Nuclei Studio,如图 2‑1所示。
-
第一次启动Nuclei Studio后,将会弹出对话框要求设置Workspace目录路径,该目录将用于存放后续创建的项目工程文件,如图 2‑2所示。
-
设置好Workspace目录之后,单击“Launch”按钮,将会启动Nuclei Studio。第一次启动后的Nuclei Studio界面如图 2‑3所示。
3. 创建项目
3.1. 概述
在Nuclei Studio IDE创建项目可以有以下几种常见方式:
-
使用模板自动创建项目:
- 这是最简单快捷的方式,但前提是IDE里面已经预先做了模板项目,Nuclei Studio已经充分整合Nuclei SDK。如需对特定芯片产品构建项目模板,请与芯来科技联系。
-
从已有项目直接导入创建新项目:
- 这是最常见的方式,譬如,用户A可以将已有项目的文件夹直接进行打包保存,然后进行分享传播,用户B可以在另外的电脑上直接导入该项目,从而以此为基础创建新的项目,在此基础上直接使用或者开发修改。
-
无模板手动创建项目:
- 这是最繁琐的方式,该方法除了创建项目之外,还需要手动设置各种选项和路径。由于该方式比较繁琐,所以在实际工作中较少使用,但是通过该方式的详细讲解,用户可以详细了解如何配置各中选项和路径。
-
基于已有的Makefile创建项目:
- 这种方式比较适合于已经采用Makefile或者其他编译工具的项目,提供一种在IDE中编译工程,清理工程,调试工程的方式。在不修改编译系统的基础上,提供良好的IDE调试环境。
下文将详细介绍如何从已有项目直接导入创建新项目,有关其他方式请参考进阶部分第1,2,4章。
3.2. 通过模板自动创建项目
本节将介绍如何使用模板自动创建项目的方式,在Nuclei Studio IDE创建一个简单的Hello World项目,详细步骤如下。
- 在“Welcome”界面中,选择“Create a new C project”。如图 3‑1所示。如果客户不希望每次启动时都显示“Welcome”界面,可以取消页面右下角“Always show Welcome at start up”的选择。
注意:也可以在菜单栏中,选择“File—> New —> C/C++ Project”。
- 如图 3‑2所示,在弹出的窗口中选择项目类型,根据需要选择c或c++。
-
如图 3‑3所示,在弹出的窗口中设定如下参数。
-
Project name:项目命名。这里设置为“1_helloworld”。
-
Use default location:如果勾选了此选项,则会使用默认Workspace文件夹存放此项目文件。
-
Project type:根据使用的SoC来选择,这里我们RV-STAR使用的是GD32VF103 SoC,所以选择“Nuclei SDK Project For GD32VF103 SoC”。
-
Toolchains:我们使用GCC工具链,所以这里选择“RISC-V Cross GCC”。
-
点击“Next”进入下一步。
-
-
如图 3‑4所示,选择需要创建项目评估板类型。
-
我们使用的板子是RV-STAR,所以“Board”这里选择“gd32vf103v_rvstar”。
-
我们的内核以及下载模式不需要修改,点击Next。
- 如图 3‑5所示,选择程序模板及相关设置项,这里以新建helloworld工程为例。选择工程模板,“project example”选择“baremetal_helloworld”;选择链接库,这里helloworld不使用NMSIS的DSP库或NN库,所以选择None;选择使用NEWLIB打印,因为helloworld不用浮点打印,所以这里选择“newlib-nano without float”;选择编译优化等级,这里选Optimize more(-O2)。某些例程因为其自身要求,新建时会自动设置一些编译选项,覆盖这里的选项。默认的配置选项可以参见Nuclei SDK application目录下各应用的Makefile。然后点击“Next”进入下一步。
-
后续内容不需修改,直接点击“Next”直到结束。
-
如图 3‑6所示,使用模板自动创建Hello World项目已经完成。有关各文件夹详细内容,请参考进阶教程第5章
4. 编译项目
4.1. 编译选项设置
使用模板创建的工程不需要修改编译选项,有关修改编译选项的详细内容,请参考进阶教程第3章。
4.2. Nuclei SDK 工程设置工具
在Nuclei Studio中可以通过Nuclei SDK工程设置工具一键修改通过Nuclei SDK Project Wizard创建的工程的编译链接选项。本工具不支持无模板手动创建的项目和基于Makefile创建的项目。详细使用步骤如下:
单击选中需要修改的工程,之后打开RV-Tools>SDK Configuration Tools,可以打开修改编译选项的弹窗。也可以单击要修改的工程后,点击工具栏的工程设置工具图标。或者单击要修改的工程后,键盘按下ctrl+6。也可以单击要修改的工程后,右击打开右键菜单,选择SDK Configuration Tools。如图 4‑1为工程设置工具弹窗,各选项详细功能如下:
-
projectName为当前选中的工程名。
-
Configuration为当前工程正在使用的设置名称。
-
Core 为当前工程对应的内核。由于工具根据ARCH和ABI选项反推出对应的内核,而不同的内核可能有相同的ARCH和ABI选项,所以显示上可能会有所偏差,只要ARCH与ABI为正确的选项即可。此选项为方便快速切换内核选项使用。
-
ARCH对应的当前工程的arch选项。
-
ABI对应的当前工程的abi选项。
-
Download对应当前工程的下载模式,可以切换选择不同的下载模式,RV-STAR仅支持FLASHXIP模式。
-
NewLIB对应的使用NEWLIB库。可以选择是否使用nano库,是否使用浮点打印。
-
Optimization Level对应编译的优化等级。
-
Extra Common Flags对应的是额外的通用编译选项。可以添加额外的通用编译选项。
-
Extra C Flags对应的是额外的C编译选项。可以添加额外的C编译选项。
-
Extra C++ Flags对应的是额外的C++编译选项。可以添加额外的C++编译选项。
-
Extra ASM Flags对应的是额外的汇编编译选项。可以添加额外的汇编编译选项。
-
Extra Link Flags对应的是额外的链接选项。如果此选项已经有默认选项并且需要增加编译选项,可以在编译选项开头或结尾处相隔一个空格字符再增加编译选项。
根据需要修改以上的选项,这里我们修改优化等级为-Os优化生成可执行文件大小。点击save一键修改编译选项,之后如图 4‑2,右击修改后的工程打开右键菜单,选择“Clean Project”清理一下工程,再点击锤子图标即可完成修改编译选项后重新编译工程。
需要注意的是如果要切换工程从32位变为64位,需要打开调试设置页面,如图 4‑3,修改“command”中“set arch riscv:rv32”为“set arch riscv:rv64”,从64位切换回32位也应当修改这里的参数为对应的数值。
4.3. 在Nuclei Studio中编译helloworld项目
在Nuclei Studio中编译的步骤如下。
-
为了保险起见,建议先将项目清理一下。如图 4‑4所示,在Project Explorer栏中选中1_helloworld项目,单击鼠标右键,选择“Clean Project”。
-
如图 4‑5所示,单击菜单上的锤子按钮,开始对项目进行编译。如果编译成功,则显示如图 4‑5所示,能够看到生成可执行文件的代码体积大小,包括text段、data段和bss段,以及总大小的十进制和十六进制数值。
编译成功后可以看到增加了Debug文件夹,如图 4‑6,各文件作用如下:
-
1_helloworld.elf是生成的可执行文件。
-
1_helloworld.hex是生成的Hex文件。
-
1_helloworld.lst是生成的list文件,可以看到反汇编和简单的代码分部信息。
-
1_helloworld.map是生成的map文件,可以详细的看到生成的代码分布情况。
5. 调试运行项目
5.1. 使用蜂鸟调试器结合OpenOCD调试运行项目
5.1.1. 安装蜂鸟调试器驱动
5.1.2.1在Windows系统中安装驱动
程序编译成功后,便可以将程序下载到FPGA原型开发板运行。首先将原型开发板与主机PC进行连接,步骤如下。
-
将蜂鸟调试器的一端插入主机PC的USB接口,另一端与原型开发板连接。为了使得主机PC的Windows系统能够识别蜂鸟调试器的USB,需要安装驱动,双击NucleiStudio_IDE文件包中的HBird-Driver.exe即可完成此驱动的安装。
-
由于蜂鸟调试器还包含了“将原型开发板输出的UART转换成USB”的功能,因此如果蜂鸟调试器被主机PC识别成功(且驱动安装成功),那么将能够被主机识别成为一个COM串口。
-
如图 5‑1所示,在主机PC的设备管理器中的“端口(COM和LPT)栏目”中可以查询到该COM的串口号(譬如COM11)。
-
此串口在后续的程序运行过程中将充当原型开发板运行程序的printf输出显示接口。
-
5.1.3.1在Linux系统中安装驱动
在Linux环境下安装驱动步骤如下:
-
连接开发板到Linux中,确保USB被Linux识别出来。如果使用虚拟机,如图 5‑2,确保开发板连到了虚拟机当中。
-
在控制台中使用lsusb指令查看信息,参考的打印信息如下:
Bus 001 Device 010: ID 0403:6010 Future Technology Devices International, Ltd FT2232xxxx
-
将github(https://github.com/riscv-mcu/ses_nuclei_sdk_projects/blob/master/misc/99-openocd.rules)上misc文件夹内99-openocd.rules文件复制到当前路径下,控制台中输入sudo cp 99-openocd.rules /etc/udev/rules.d/99-openocd.rules指令复制文件到指定路径下。
-
断开调试器再重新连接到Linux系统中。
-
使用ls /dev/ttyUSB*命令查看ttyUSB信息,参考输出如下:/dev/ttyUSB0 /dev/ttyUSB1
-
使用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 >。
-
使用sudo usermod -a -G plugdev \<your_user_name>命令将自己添加进plugdev组。
-
再次确认当前用户名已属于plugdev组,使用groups命令,可以看到打印信息中有plugdev即成功将当前用户添加至plugdev组。
5.2.2. 新建并配置Debug Configuration
使用模板新建的工程不需要再修改设置内容,有关如何新建并配置Debug Configuration内容的请参考进阶教程第6章。
5.2.3. 在原型开发板上调试程序
在开发板上调试之前,需要打开串口以便观察Printf函数打印信息。
使用Windows系统打开串口的方法如下:
- 打开Nuclei Studio自带的串口打印通道,选择Window>Show View>Terminal,如图 5‑3所示,点击显示器图标打开串口设置选项。如图 5‑4所示,在其窗口中设置Choose terminal(选择串口,即Serial Terminal)、“串口号”(这里以COM11为例)、“波特率(设置为115200)”等参数后,单击“OK”按钮。
使用Linux系统打开串口方法如下:
- 打开Nuclei Studio自带的Terminal终端,选择Window>Show View>Terminal,如图 5‑3所示,点击显示器图标打开串口设置选项。如图 5‑5所示,choose terminal选择Local Terminal,点击OK打开Terminal终端。如图 5‑6所示,输入“minicom /dev/ttyUSB1 115200”打开串口(需自行安装minicom,可使用sudo apt-get install minicom指令),即可在Nuclei Studio中查看串口打印信息。
如果程序员希望能够调试运行于原型开发板中程序,可以使用Nuclei Studio IDE进行调试。由于IDE运行于主机PC端,而程序运行于原型开发板上,因此这种调试也称为“在线调试”或者“远程调试”。
这里以1_helloworld为例,确保使用的debug configuration与当前工程对应。确定设置无误后,在图 5‑8的下拉框选中Debug,之后左侧图标会变为甲虫图标,单击即可进入调试模式并下载程序进入开发板中。
-
如果下载成功,则如图 5‑9所示,并且会启动调试界面。
-
如图 5‑9的1号标注位置,这里功能包括单步,运行,汇编级调试等。
-
如图 5‑9的2号标注位置,这个箭头表示当前程序运行位置。
-
如图 5‑9的3号标注位置,在代码的左侧双击即可在该行设置断点,再次双击可以取消断点。
-
如图 5‑9的4号标注位置,这里可以切换编辑模式和调试模式。
-
如图 5‑9的5号标注位置,这里是函数内变量显示的位置。
-
如图 5‑9的6号标注位置,这里是查看寄存器数值的位置。图中显示的是PC寄存器当前的数值。
-
如图 5‑9的7号标注位置,点击这里红色按钮可以退出调试模式。
-
5.2.4. 下载运行程序
调试程序没有出现问题后,可以将程序下载进开发板。如图 5‑10,点击下拉框切换至运行模式,此时左侧图标会切换为绿色运行按键,单击即可将程序下载至开发板并运行。由于调试和下载运行使用相同的设置文件,所以不需要再次设置。如需要断开连接,如图 5‑11,在console栏目下点击红色按钮断开连接。
5.2. 使用J-Link调试运行项目
5.2.1. 安装J-Link驱动并导入RTT文件
如果使用J-Link,则J-Link具有的RTT功能也可以重定向printf的打印输出(不必占用SoC的UART输出),详细步骤请参考进阶教程第7章。
5.2.2. 新建并配置Debug Configuration
新建并配置J-Link调试下载的Debug Configuration步骤如下:
-
在菜单栏中选择“Run—>Debug Configurations”。
-
如图 5‑12,在弹出的窗口中,如果没有当前工程的调试设置内容,右键单击“GDB SEGGER J-Link Debugging”,选择“New Configuration”,将会为本项目新建出一个调试项目“1_helloworld Debug”,如图 5‑13。确保“Project”是当前需要调试的工程,“C/C++ Application”中选择了正确的需要调试的ELF文件。
打开Debugger栏目,如图 5‑14。
确保1号位置“Start the J-Link GDB server locally”被选中。
2号位置正确指向JLinkGDBServerCL.exe的路径。
3号内是当前使用的内核,这里输入GD32VF103VBT6。如果使用其他开发板请参考J-Link Support Device网页,链接如下:https://www.segger.com/downloads/supported-devices.php
4号选择“Interface”为JTAG,“initial speed”为Auto。
5号确认与使用的GDB设置一致。
如果有修改的内容,点击6号位置“Apply”保存。
打开“Startup”栏目,如图 5‑15,确保JTAG/SWD Speed为Auto,“set Breakpoint at main”,“Continue”,“Pre-run/Restart reset”和“RAM application”选项被勾选,并且取消勾选“Initial Reset and Halt”选项。
以上设置内容完成后,如果有变动需要点击右下角Apply保存设置,如果没有变动点击close即可。
5.2.3. 在原型开发板上调试程序
RV-STAR开发板也支持通过J-Link连接,请至少准备5根双母头杜邦线和一根公母头杜邦线。
J-Link连接需要用杜邦线连接串口,移除开发板短接串口自下而上的五个短接冒,移除后如图 5‑16,这五个接口自下而上分别是GND,JTCK,JTDI,JTDO,JTMS。
图 5‑17是J-Link的引脚图,红框标注为需要连接的引脚,连接对应名字即可,其中J-Link的1脚(VTref)先不连。
连接完成后用公母头将J-Link的1脚连接到开发板上VCC3V3的插孔中,最终J-Link硬件连接如图 5‑18所示。
下拉框选中Debug,之后左侧图标会变为甲虫图标,单击即可进入调试模式并下载程序进入开发板中。
如果下载成功,则如图 5‑19所示,并且会启动调试界面。
-
如图 5‑19的1号标注位置,这里功能包括单步,运行,汇编级调试等。
-
如图 5‑19的2号标注位置,这个箭头表示当前程序运行位置。
-
如图 5‑19的3号标注位置,在代码的左侧双击即可在该行设置断点,再次双击可以取消断点。
-
如图 5‑19的4号标注位置,这里可以切换编辑模式和调试模式。
-
如图 5‑19的5号标注位置,这里是函数内变量显示的位置。
-
如图 5‑19的6号标注位置,这里是查看寄存器数值的位置。
-
如图 5‑19的7号标注位置,点击这里红色按钮可以退出调试模式。
5.2.4. 下载运行程序
调试程序没有出现问题后,可以将程序下载进开发板。如图 5‑20,点击下拉框切换至运行模式,此时左侧图标会切换为绿色运行按键,单击即可将程序下载至开发板并运行。由于调试和下载使用相同的设置文件,所以不需要再次设置。如果需要断开连接,如图 5‑21,在console栏目下点击红色按钮即可断开连接。