update evb_lx doc

This commit is contained in:
Supowang
2022-05-15 11:36:31 +08:00
parent 60c16485e6
commit 10816214f3
39 changed files with 657 additions and 40 deletions

View File

@@ -1,17 +1,19 @@
# TencentOS tiny定制开发板EVB_LX快速入门指南
# GD32V-RISC-V物联网操作系统TencentOS-Tiny案例实践指南
| Revision | Date | Description |
| -------- | --------- | ----------- |
| 1.0 | 2020-2-12 | 文档初版 |
| 2.0 | 2021-12-20 | GD32V-RISC-V物联网操作系统TencentOS-Tiny案例实践指南 |
## 1. 定制开发板EVB_LX硬件简介
## 一、定制开发板EVB_LX硬件简介
### 1.1 开发板简介
EVB_LX+是腾讯物联网操作系统TencentOS tiny 团队联合兆易创新GD32、南京厚德物联网有限公司三方合作设计的一款物联网评估板用于TencentOS tiny 基础内核、RISC-V新IP核架构和IoT组件功能体验和评估。
开发板功能图如下所示:
![](image/EVB_LX_guide/EVB_LX.png)
### 1.2 开发板特性
**CPU** GD32VF103RBT6, 108MHz128K Flash32KB SRAM
@@ -102,64 +104,679 @@ OLED液晶显示模块用来向用户显示系统状态、参数或者要输入
Micro USB线的功能是供电及调试将线一头与开发板的Micro接口(GD-Link)连接另一头接到电脑的USB口上。(程序下载完了也可以把usb线接到pc uart的端口用于打印日志)
![](image/EVB_LX_guide/usb_install.png)
## 二、 定制开发板EVB_LX软件开发环境准备
### 2.1 MounRiver Studio IDE下载与安装
MounRiver StudioMRS是一款面向RISC-V、ARM等内核MCU的集成开发环境提供专业嵌入式项目所需的开发、调试环境、烧录工具已经完善的项目管理能力是目前使用相对方便的GD32V开发环境。这里我们使用该IDE来进行risc-v相关应用开发。首先我们到MounRiver Studio官网下载软件安装包下载地址http://www.mounriver.com/download
![](image/EVB_LX_guide/MRS_install.png)
安装完成后打开软件可以进入到欢迎界面
![](image/EVB_LX_guide/MRS_welcome.png)
### 2.2 新建GD32V工程
菜单栏点击File->New->MounRiver project 开始创建工程
![](image/EVB_LX_guide/PR_001.png)
进入工程向导后,按照如下图所示选择芯片,填写工程信息。
![](image/EVB_LX_guide/PR_002.png)
完成后会生成工程,如图所示:
![](image/EVB_LX_guide/PR_003.png)
### 2.3 编译下载调试GD32V工程
MRS IDE导入的是默认的LED闪灯程序由于我们开发板EVB LX的LED灯跟兆易创新官方评估板的GPIO不一样使用的GPIOBPin2这里我们修改下main.c中的led初始化代码。
将如下代码复制替换main.c文件中的全部代码
```
#include "gd32vf103.h"
#include "gd32vf103r_start.h"
#include "systick.h"
void led_init(void);
/*!
\brief main function
\param[in] none
\param[out] none
\retval none
*/
int main(void)
{
led_init();
while(1){
/* turn on LED */
gpio_bit_set(GPIOB, GPIO_PIN_2);
/* insert 200 ms delay */
delay_1ms(200);
/* turn off LED */
gpio_bit_reset(GPIOB, GPIO_PIN_2);
/* insert 200 ms delay */
delay_1ms(200);
}
}
/*!
\brief initialize the LEDs
\param[in] none
\param[out] none
\retval none
*/
void led_init(void)
{
/* enable the LED clock */
rcu_periph_clock_enable(RCU_GPIOB);
/* configure LED GPIO port */
gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
/* turn off LED */
gpio_bit_reset(GPIOB, GPIO_PIN_2);
}
```
完成代码拷贝覆盖后,点击如下图所示图标编译工程,编译完成后可以在控制台输出看到编译结果。
![](image/EVB_LX_guide/PR_004.png)
如下图所示点击debug按钮就可以进入调试模式程序下载到开发板上可以打断点、单步、跳步执行全速执行查看寄存器反汇编、内存等
![](image/EVB_LX_guide/PR_005.png)
执行全速运行后可以看到开发板上的用户LED灯间隔闪烁。
除了调试按钮外,我们也可以点击下载按钮直接将程序烧写到开发板上,如下图所示:
![](image/EVB_LX_guide/PR_006.png)
本实验代码下载链接https://share.weiyun.com/4XXWaOzU 密码cy4m5f
GD32V-RISC-V物联网操作系统TencentOS-Tiny案例实践指南(20211220)\SourceCode\EVB_LX_GD32V_LED.rar
## 三、TencentOS Tiny内核移植
### 3.1 准备裸机工程
移植TencentOS Tiny内核前我们先准备一个简单的点灯工程这里跟前面的步骤一样我们先使用MounRiver Studio IDE 基于GD32V生成基础工程
基础的裸机工程包含LED、串口、液晶显示屏驱动。这里我把裸机工程给大家准备好了大家下载EVB_LX_GD32V_Printf_Lcd.rar 解压后使用IDE打开即可。
裸机工程代码下载链接https://share.weiyun.com/4XXWaOzU 密码cy4m5f
GD32V-RISC-V物联网操作系统TencentOS-Tiny案例实践指南(20211220)\SourceCode\EVB_LX_GD32V_Printf_Lcd.rar
### 3.2 准备内核源码
在TencentOS Tiny 官方项目仓下载内核代码,下载地址: https://github.com/Tencent/TencentOS-tiny
拷贝如下目录的内核代码到新建的TencentOS-Tiny文件夹备用请严格按照一下目录拷贝不需要拷贝多余的
| 一级目录 | 二级目录 | 三级目录 | 四级目录 | 五级目录 | 说明 |
| ---------- | -------- | -------- | --------- | -------- | ---------------------------------------------------- |
| arch | arm | risc-v | common | | TencentOS tiny 中断tick相关代码 |
| | | | rv32i | gcc | TencentOS Tiny risc-v调度汇编 GCC |
| | | | bumblebee | gcc | GD32V 中断配置相关代码 |
| kernel | core | | | | TencentOS tiny内核源码 |
| | hal | | | | TencentOS tiny驱动抽象层 |
| | pm | | | | TencentOS tiny低功耗源码 |
| TOS_CONFIG | | | | | TencentOS tiny配置头文件用户自定义从模板修改过来 |
这里只介绍TencentOS tiny的内核移植所以这里只需要用到 arch、kernel两个目录下的源码。
将全部内核源码复制到工程目录下,如下图:
![](image/EVB_LX_guide/port_001.png)
然后我们在工程界面按F5刷新工程就可以在源码目录看到TencentOS Tiny的内核源码了如图所示
![](image/EVB_LX_guide/port_002.png)
### 3.3 添加内核初始化和相关任务代码
1首先在main.c 中包含内核头文件 #include "tos_k.h"
2添加Tick处理函数 eclic_mtip_handler
```
void eclic_mtip_handler() {
port_systick_config((uint32_t)k_cpu_cycle_per_tick);
if (tos_knl_is_running()) {
tos_knl_irq_enter();
tos_tick_handler();
tos_knl_irq_leave();
}
}
```
3) 新建两个测试任务
```
#define TASK1_STK_SIZE 1024
k_task_t task1;
uint8_t task1_stk[TASK1_STK_SIZE];
#define TASK2_STK_SIZE 1024
k_task_t task2;
uint8_t task2_stk[TASK2_STK_SIZE];
void task1_entry(void *arg)
{
int count = 0;
while (1) {
printf("###I am task1,count is %d\r\n",count++);
tos_task_delay(2000);
}
}
void task2_entry(void *arg)
{
int count = 0;
while (1) {
printf("***I am task2,count is %d\r\n",count++);
tos_task_delay(1000);
}
}
```
4 在main函数中while1前面增加操作系统初始化函数
```
printf("Welcome to TencentOS tiny(%s)\r\n", TOS_VERSION);
tos_knl_init(); // TencentOS Tiny kernel initialize
tos_task_create(&task1, "task1", task1_entry, NULL, 4, task1_stk, TASK1_STK_SIZE, 0); // Create task1
tos_task_create(&task2, "task2", task2_entry, NULL, 3, task2_stk, TASK2_STK_SIZE, 0);// Create task2
tos_knl_start();
```
5在工程里面配置TencentOS Tiny 头文件编译目录
如图需要在IDE里面配置TencentOS Tiny的编译头文件目录按如图所示配置即可
![](image/EVB_LX_guide/port_003.png)
除了增加C编译的头文件还要增加汇编文件的头文件目录如下图所示
![](image/EVB_LX_guide/port_004.png)
6 修改tos_config.h文件
我们在TencentOS_Tiny文件下新建TOS_CONFIG文件夹在改文件夹下面新建tos_config.h代码如下
```
#ifndef INC_TOS_CONFIG_H_
#define INC_TOS_CONFIG_H_
#include "gd32vf103.h"
#include "stddef.h"
#define TOS_CFG_TASK_PRIO_MAX 10u // 配置TencentOS tiny默认支持的最大优先级数量
#define TOS_CFG_ROUND_ROBIN_EN 0u // 配置TencentOS tiny的内核是否开启时间片轮转
#define TOS_CFG_OBJECT_VERIFY 0u // 配置TencentOS tiny是否校验指针合法
#define TOS_CFG_TASK_DYNAMIC_CREATE_EN 0u // TencentOS tiny 动态任务创建功能宏
#define TOS_CFG_EVENT_EN 1u // TencentOS tiny 事件模块功能宏
#define TOS_CFG_MMBLK_EN 1u //配置TencentOS tiny是否开启内存块管理模块
#define TOS_CFG_MMHEAP_EN 1u //配置TencentOS tiny是否开启动态内存模块
#define TOS_CFG_MMHEAP_DEFAULT_POOL_EN 1u // TencentOS tiny 默认动态内存池功能宏
#define TOS_CFG_MMHEAP_DEFAULT_POOL_SIZE 0x1000 // 配置TencentOS tiny默认动态内存池大小
#define TOS_CFG_MUTEX_EN 1u // 配置TencentOS tiny是否开启互斥锁模块
#define TOS_CFG_MESSAGE_QUEUE_EN 1u // 配置TencentOS tiny是否开启消息队列模块
#define TOS_CFG_MAIL_QUEUE_EN 1u // 配置TencentOS tiny是否开启消息邮箱模块
#define TOS_CFG_PRIORITY_MESSAGE_QUEUE_EN 1u // 配置TencentOS tiny是否开启优先级消息队列模块
#define TOS_CFG_PRIORITY_MAIL_QUEUE_EN 1u // 配置TencentOS tiny是否开启优先级消息邮箱模块
#define TOS_CFG_TIMER_EN 0u // 配置TencentOS tiny是否开启软件定时器模块
#define TOS_CFG_PWR_MGR_EN 0u // 配置TencentOS tiny是否开启外设电源管理模块
#define TOS_CFG_TICKLESS_EN 0u // 配置Tickless 低功耗模块开关
#define TOS_CFG_SEM_EN 1u // 配置TencentOS tiny是否开启信号量模块
#define TOS_CFG_TASK_STACK_DRAUGHT_DEPTH_DETACT_EN 0u // 配置TencentOS tiny是否开启任务栈深度检测
#define TOS_CFG_IDLE_TASK_STK_SIZE 512u // 配置TencentOS tiny空闲任务栈大小
#define TOS_CFG_CPU_SYSTICK_PRIO 0xF
#define TOS_CFG_IRQ_STK_SIZE 128u
#define TOS_CFG_CPU_TICK_PER_SECOND 1000u // 配置TencentOS tiny的tick频率
#define TOS_CFG_CPU_CLOCK (SystemCoreClock) // 配置TencentOS tiny CPU频率
#define TOS_CFG_TIMER_AS_PROC 1u // 配置是否将TIMER配置成函数模式
#endif /* INC_TOS_CONFIG_H_ */
```
7编译下载测试
编译完成下载到开发板通过串口助手我们可以看到两个任务交替运行打印task信息说明内核移植成功如下图所示
![](image/EVB_LX_guide/port_005.png)
本实验代码下载链接https://share.weiyun.com/4XXWaOzU 密码cy4m5f
GD32V-RISC-V物联网操作系统TencentOS-Tiny案例实践指南(20211220)\SourceCode\EVB_LX_GD32V_TencentOS_Tiny.rar
## 四、 基于TencentOS Tiny 和E53_SC1模块采集光照强度实验
1 E53_SC1 扩展模块介绍
E53_SC1扩展模块包含一个BH1750 传感器和一个高亮LED灯功能示意图如下
![](image/EVB_LX_guide/light_001.png)
将模块插到开发板的E53接口即可
2 编写BH1750驱动
BH1750FIV是一个采用标准IIC总线接口的环境光强传感器共有六种工作模式分为连续型和一次型连续型又分为高精度1、2和低精度模式单次型同样分为高精度1、2和低精度模式。单次型与连续型的区别在于单次型读完一次数据就会自动转为PowerDown模式。
比如一次型低分辨率模式的时序图如下图所示:
![](image/EVB_LX_guide/light_002.png)
根据时序编写的核心驱动程序如下对BH1750 传感器进行初始化、启动测量,等待测量结果,读取测量值。
```
void Init_BH1750(void)
{
uint8_t t_Data = 0x01;
/* configure GPIO */
gpio_config();
/* configure I2C */
i2c_config();
BH1750_I2C_Master_Transmit(BH1750_Addr,&t_Data,1);
}
void Start_BH1750(void)
{
uint8_t t_Data = 0x10;
BH1750_I2C_Master_Transmit(BH1750_Addr,&t_Data,1);
}
void Init_E53_SC1(void)
{
Init_Light();
Init_BH1750();
}
void E53_SC1_Read_Data(void)
{
Start_BH1750();
delay_ms(180);
BH1750_I2C_Master_Receive(BH1750_Addr+1,BUF,2);
result=BUF[0];
result=(result<<8)+BUF[1];
E53_SC1_Data.Lux=(float)(result/1.2);
}
```
3基于上个章节移植好的TencentOS Tiny工程在其中一个任务1中添加E53_SC1初始化获取光照强度打印在串口并显示在液晶屏OLED上
详细代码如下:
```
void task1_entry(void *arg)
{
int count = 1;
Init_E53_SC1();
E53_SC1_LED_StatusSet(OFF);
while (1) {
printf("###I am task1,count is %d\r\n",count++);
if (count/10==1)
{
E53_SC1_LED_StatusSet(ON);// Open E53 led
}
else if (count/10==6) {
E53_SC1_LED_StatusSet(OFF);// Open E53 led
}
E53_SC1_Read_Data();
printf("\r\n********E53_SC1_BH1750 Value is %d\r\n",(int)E53_SC1_Data.Lux);
memset(payload, 0, sizeof(payload));
snprintf(payload,sizeof(payload),"%d ",(int)E53_SC1_Data.Lux);
OLED_ShowString(48, 3, (uint8_t*)payload, 8);
tos_task_delay(100);
}
}
```
编译完成可以在开发板上看到液晶屏实时显示了光照强度值单位LUX
![](image/EVB_LX_guide/light_003.png)
同时串口会打印相应的logo如下图
![](image/EVB_LX_guide/light_004.png)
本实验代码下载链接https://share.weiyun.com/4XXWaOzU 密码cy4m5f
GD32V-RISC-V物联网操作系统TencentOS-Tiny案例实践指南(20211220)\SourceCode\EVB_LX_GD32V_TencentOS_Tiny_BH1750.rar
## 五、基于TencentOS Tiny 将 BH1750传感器采集的光照强度数据上传到腾讯云物联网平台和腾讯连连小程序
基于TencentOS Tiny EVB LX RISC-V开发板要完成腾讯云IoT Explorer对接需要完成两个部分的工作。
一是腾讯云IoT explorer 上完成项目、产品、设备创建、参数配置
二是基于TencentOS Tiny完成应用开发向腾讯云上报业务数据。
### 1. 云端操作步骤
1.1. 新建项目
登录[腾讯云物联网开发平台](https://cloud.tencent.com/product/iotexplorer),点击新建项目,填写项目名称和简介:
![](image/EVB_LX_guide/c001.png)
1.2. 新建产品
点击项目名称进入到该项目中,点击新建产品:
![](image/EVB_LX_guide/c002.png)
产品新建成功后,可在产品列表页查看到:
![](image/EVB_LX_guide/c003.png)
1.3. 数据模板
进入产品点击【数据模板】点击【导入JSON】导入下面的JSON代码
```json
{
"version": "1.0",
"properties": [
{
"id": "power_switch",
"name": "电灯开关",
"desc": "控制电灯开灭",
"required": true,
"mode": "rw",
"define": {
"type": "bool",
"mapping": {
"0": "关",
"1": "开"
}
}
},
{
"id": "brightness",
"name": "光照强度",
"desc": "",
"mode": "r",
"define": {
"type": "int",
"min": "0",
"max": "20000",
"start": "0",
"step": "1",
"unit": "lx"
},
"required": false
}
],
"events": [],
"actions": [],
"profile": {
"ProductId": "TCC64FUFGD",
"CategoryId": "3"
}
}
```
导入之后自动根据json文件创建的属性如下
![](image/EVB_LX_guide/c004.png)
1.4. 创建设备
点击【设备调试】,进入后点击【新建设备】,创建真实设备:
![](image/EVB_LX_guide/c005.png)
创建成功之后进入设备查看到产品ID、设备名称、设备秘钥,记录下来,一会终端程序会使用到。
![](image/EVB_LX_guide/c006.png)
### 2. 基于TencentOS Tiny 完成设备侧应用开发
本实验代码下载链接https://share.weiyun.com/4XXWaOzU 密码cy4m5f
GD32V-RISC-V物联网操作系统TencentOS-Tiny案例实践指南(20211220)\SourceCode\EVB_LX_GD32V_TencentOS_Tiny_IoT_Explorer.rar
进入 < EVB_LX_GD32V_TencentOS_Tiny_IoT_Explorer> 目录打开EVB_LX_GD32V_TencentOS_Tiny_IoT_Explorer工程。
![](image/EVB_LX_guide/c007.png)
2.1. 修改WIFI接入信息
打开`main.c`文件编辑在application_entry函数中修改要接入WIFI的名称和密码建议使用手机热点不要有特殊字符
![](image/EVB_LX_guide/c008.png)
2.2. 修改云端对接信息
终端的MQTT客户端需要对应的产品ID、设备ID密码我们使用前面从云端获取到的产品ID、设备名称、设备密钥然后利用如下的python脚本来生成mqtt 用户名 密码等信息:
python脚本如下也可以到https://github.com/OpenAtomFoundation/TencentOS-tiny/blob/master/tools/mqtt_config_gen.py 获取。
```
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import base64
import hashlib
import hmac
import random
import string
import time
from string import Template
# bind raw_input to input in Python 2
try:
input = raw_input
except NameError:
pass
product_id = input("product id:")
dev_name = input("device name:")
passwd = input("password:")
sub = input("subscribe topic:[default:control]")
if sub == "":
sub = "control"
pub = input("publish topic:[default:event]")
if pub == "":
pub = "event"
client_id = product_id + dev_name
# expire time: 2^32 - 1 = 4294967295
username = client_id+";21010406;12365;{}".format(4294967295)
def hmacsha1(content, passwd):
passwd_byte = base64.b64decode(passwd)
return hmac.new(passwd_byte, content, digestmod=hashlib.sha1).hexdigest()
username = username.encode("utf-8")
passwd = passwd.encode("utf-8")
sign = hmacsha1(username, passwd)
template = ('#ifndef TOS_MQTT_CONFIG_H\n'
'#define TOS_MQTT_CONFIG_H\n'
'\n'
'#define MQTT_SERVER_IP "111.230.189.156"\n'
'#define MQTT_SERVER_PORT "1883"\n'
'#define MQTT_PRODUCT_ID "$product"\n'
'#define MQTT_DEV_NAME "$dev"\n'
'#define MQTT_CLIENT_ID "$product$dev"\n'
'#define MQTT_USR_NAME "$product$dev;21010406;12365;4294967295"\n'
'#define MQTT_PASSWORD "$sign;hmacsha1"\n'
'#define MQTT_SUBSCRIBE_TOPIC "$product/$dev/$sub"\n'
'#define MQTT_PUBLISH_TOPIC "$product/$dev/$pub"\n'
'\n'
'#endif\n'
'\n')
src = Template(template)
d = {
'product':product_id,
'dev':dev_name,
'sign':sign,
'sub':sub,
'pub':pub
}
#do the substitution
dst = src.substitute(d)
print("===============Generate mqtt_config.h==================")
print(dst)
with open('mqtt_config.h', 'w') as f:
f.write(dst)
```
运行python脚本一次输入产品ID、设备名称、设备密钥就可以生成对用的mqtt信息了如下图所示
![](image/EVB_LX_guide/c009.png)
同样在main.c文件内修改云端配置信息使用上面脚本生成的信息替换
![](image/EVB_LX_guide/c010.png)
2.3. 编译工程
点击编译按钮编译整个工程并将程序下载到开发板由于GD-Link的设计问题这里下载到RISC-V开发板会非常慢大家耐心等待一下。
下载完成打开热点复位开发板我们可以看到终端输出相关log如下图
![](image/EVB_LX_guide/c011.png)
![](image/EVB_LX_guide/c012.png)
### 3. 云端平台查看设备数据
回到腾讯云物联网开发平台,可以看到设备状态变为【在线】:
![](image/EVB_LX_guide/c013.png)
点击【设备日志】一栏,可以看到设备上报的光照强度:
![](image/EVB_LX_guide/c014.png)
点击【在线调试】一栏,修改属性【期望值】后点击【发送】,可以对灯泡进行远程控制。
![](image/EVB_LX_guide/c015.png)
### 4、腾讯连连小程序操作步骤
1. 添加家庭
手机端在【微信】搜索【腾讯连连】小程序,首次使用需要进入后点击【我的】->【家庭管理】,添加一个你喜欢的名称即可。
2. 添加调试设备
返回【首页】,点击右上角“加号”图标:
![](image/EVB_LX_guide/a001.png)
进入后点击右上角扫码图标:
![](image/EVB_LX_guide/a002.png)
在腾讯云物联网开发平台进入【设备调试】,点击对应设备后的【二维码】:
![](image/EVB_LX_guide/a003.png)
腾讯连连扫描此二维码即可成功添加设备,添加成功之后如图:
![](image/EVB_LX_guide/a004.png)
点击此设备即可实时查看数据,并下发控制指令:
![](image/EVB_LX_guide/a005.png)
3. 修改腾讯连连显示面板
进入【交互开发】,点击【面板配置】一栏:
![](image/EVB_LX_guide/a006.png)
在此页面中可以自己根据喜好配置小程序显示面板,保存之后,在腾讯连连小程序删除设备,重新扫描绑定设备即可生效。
## 2. 定制开发板EVB_LX软件开发环境准备
### 2.1 Nuclei Studio IDE下载
目前GD32V成熟的集成开发环境是由芯来科技提供的Nuclei Studio IDETencentOS tiny中的RISC-V项目也是基于Nuclei Studio IDE。首先我们下载Nuclei Studio IDE软件开发包下载链接为https://www.nucleisys.com/download.php 如下图所示。
![](image/EVB_LX_guide/nuclei_studio_ide.png)
单击“Nuclei Studio芯来集成开发环境Nuclei Studio IDE”即可进入下载页面。
### 2.2 Nuclei Studio IDE安装
下载下来的芯来集成开发环境IDENuclei Studio压缩包解压后包含若干个文件。
Nuclei Studio软件包该软件包中包含了Nuclei Studio IDE的软件。注意具体版本以及文件名可能会不断更新
HBird_Driver.exe此文件为芯来蜂鸟调试器的USB驱动安装文件调试时需要安装此驱动使得其USB能够被识别
JDK安装文件jdk-8u512-windows-x64.exe
* 1.Nuclei Studio IDE是基于eclipse的eclipse需要jdk环境支持你的电脑如果没有安装jdk环境需要先安装jdk-8u512-windows-x64.exe直接双击安装即可如果已经安装可以跳过
* 2.安装HBird_Driver.exe
* 3.Nuclei Studio软件本身为绿色软件无需安装安装好JDK运行环境后直接单击Nuclei Studio文件夹中eclipsec.exe即可启动Nuclei Studio。
![](image/EVB_LX_guide/nuclei_studio_file.png)
直接单击NucleiStudio_IDE文件包中NucleiStudio文件夹下面的eclipse.exe可执行文件即可启动Nuclei Studio
第一次启动Nuclei Studio后将会弹出对话框要求设置Workspace目录该目录将用于放置后续创建项目的文件夹如图所示
![](image/EVB_LX_guide/nuclei_studio_workspace.png)
设置好Workspace目录之后确保Workspace的路径中没有中文单击“Launch”按钮将会启动Nuclei Studio。第一次启动后的Nuclei Studio界面如图所示。
![](image/EVB_LX_guide/nuclei_studio_welcome.png)
### 2.3 导入基于TencentOS tiny的RISC-V工程
先下载TencentOS tiny项目下载地址为
https://github.com/Tencent/TencentOS-tiny
官方地址直接下载zip包或者直接使用下面的命令clone下来
git clone https://github.com/Tencent/TencentOS-tiny.git
在菜单栏选择”File->Import“出现如图对话框选择”General“菜单下”Exit Project into Workspace“设置导入方式然后点击按钮”Next“。
![](image/EVB_LX_guide/project_import.png)
选择导入的方式后,点击” Browse“按钮选择TencentOS tiny项目中GD32V工程路径。注意进入到” TencentOS-tiny\board\TencentOS_tiny_EVB_LX\eclipse"这一级目录即可,如图所示。
![](image/EVB_LX_guide/project_import01.png)
### 2.4 编译下载调试基于TencentOS tiny的RISC-V工程
导入之后就可看到TencentOS tiny的hello_world工程了如图所示
![](image/EVB_LX_guide/project_hello_world.png)
Hello_world工程文件夹上右键 Debug As选择Debug Configuration配置调试参数如下图所示
![](image/EVB_LX_guide/project_debug_set.png)
![](image/EVB_LX_guide/project_debug_set01.png)
![](image/EVB_LX_guide/project_debug_set02.png)
然后点击Debug即可进入调试窗口如下图所示可以进行单步、跳步执行设置断点等
![](image/EVB_LX_guide/project_run.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB