1# RV-STAR开发板LiteOS使用说明 2 3## RV-STAR开发板简介 4 5RV-STAR是一款基于GD32VF103 MCU的RISC-V评估开发板,提供了板载调试器、Reset和Wakeup用户按键、RGB LED、USB OTG,以及EXMC、Arduino和PMOD扩展接口等资源。 6 7开发板资料链接: 8 9- [RV-STAR开发板电路原理图](https://www.rvmcu.com/quickstart-doc-u-pdf-id-235.html) 10- [RV-STAR开发板用户手册(Segger Embedded Studio IDE版)](https://www.rvmcu.com/quickstart-doc-u-pdf-id-236.html) 11- [RV-STAR开发板用户手册(Nuclei Studio IDE版)](https://www.rvmcu.com/quickstart-doc-u-pdf-id-531.html) 12- [RV-STAR板载GD32VF103芯片资料](https://www.rvmcu.com/quickstart-doc-u-gd32vf103.html) 13- [芯来RISC-V Bumblebee内核指令集手册](https://www.rvmcu.com/quickstart-doc-u-pdf-id-8.html) 14 15## 文件结构 16 17``` 18├── components # 可选组件 19│ ├── cppsupport # C++支持 20│ └── cpup # CPUP功能 21├── kal # 内核抽象层 22│ └── posix # posix标准接口支持 23├── arch # 内核指令架构层代码 24│ ├── risc-v # risc-v架构的代码 25│ │ └── nuclei # nuclei内核相关代码 26│ │ └── gcc # gcc编译器相关代码 27│ │ └── nmsis # nmsis内核标准 28│ └── include # 对外接口存放目录 29│ ├── los_atomic.h # 定义通用arch的原子操作 30│ ├── los_context.h # 定义通用arch的上下文切换 31│ ├── los_arch.h # 定义通用arch初始化 32│ └── los_interrupt.h # 定义通用arch中断 33├── kernel # 内核最小功能集支持 34│ ├── include # 对外接口存放目录 35│ │ ├── los_config.h # 功能开关和配置参数 36│ │ ├── los_event.h # 事件 37│ │ ├── los_liteos.h # liteos最小功能集对外提供的头文件 38│ │ ├── los_memory.h # 堆内存管理 39│ │ ├── los_mutex.h # 互斥锁 40│ │ ├── los_queue.h # 队列 41│ │ ├── los_scheduler.h # 调度算法 42│ │ ├── los_sem.h # 信号量 43│ │ ├── los_task.h # 任务 44│ │ └── los_timer.h # 定时器 45│ └── src # 内核最小功能集源码 46├── targets # 板级工程目录 47│ └── riscv_nuclei_gd32vf103_soc_gcc # RV-STAR开发板相关代码 48│ ├── GCC # 编译相关 49│ ├── OS_CONFIG # 开发板配置功能开关和配置参数 50│ ├── SoC # gd32vf103 SOC相关代码 51│ └── Src # application相关代码 52└── utils # 通用公共目录 53 ├── include 54 │ ├── los_compiler.h # 编译工具配置,类型定义 55 │ ├── los_debug.h # debug,printf相关 56 │ ├── los_error.h # 错误定义 57 │ └── los_list.h 58 └── src 59``` 60 61## 使用说明 62 63软件需求:linux环境 64 65硬件需求:RV-STAR开发板 66 67[环境配置](#sectionb1) 68 69[编译源码](#sectionb2) 70 71[下载调试、运行](#sectionb3) 72 73本示例将新建并运行两个任务,PA0按键为外部中断,按下后可以查看任务列表信息。 74 75### 环境配置<a name="sectionb1"></a> 76 77- **工具链配置** 78 79请先确认您使用的是centos系统或Ubuntu 64bit。 80 811. 新建一个`Nuclei` 文件夹,比如`~/Software/Nuclei` 822. 参考下图,从[Nuclei Download Center](https://nucleisys.com/download.php)下载工具链和OpenOCD。 83 - CentOS或Ubuntu系统请点击图中红框1下载RISC-V GNU工具链 84 - 点击图中蓝框2-1下载64bit的OpenOCD 85 - **确保Make工具版本不低于3.82**: ubuntu系统使用`sudo apt-get install make`指令安装`make`工具, CentOS系统使用`sudo yum install make`指令安装。 86 87图1 Linux环境要下载的Nuclei Tools 88 89 90 91 92 933. 在之前新建的`Nuclei`文件夹中新建`gcc`文件夹和`openocd`文件夹。 94 - 解压缩之前下载的**gnu工具链**到任意文件夹中,复制其中`bin`文件件所在层级的所有内容到`gcc`文件夹中。 95 - 同样解压缩之前下载的**OpenOCD**到任意文件夹中,复制其中`bin`文件件所在层级的所有内容到`openocd`文件夹中。 96 97> 注意: 98> 99> 请务必下载并解压缩Linux版本的工具,不要下载windows版本工具。 100 101- **驱动配置** 102 103驱动配置步骤如下: 104 1051. 连接开发板到Linux中,确保USB被Linux识别出来。 106 1072. 在控制台中使用lsusb指令查看信息,参考的打印信息如下: 108 109 ``` 110 Bus 001 Device 010: ID 0403:6010 Future Technology Devices International, Ltd FT2232xxxx 111 ``` 112 1133. 将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指令复制文件到指定路径下。 114 1154. 断开调试器再重新连接到Linux系统中。 116 1175. 使用ls /dev/ttyUSB*命令查看ttyUSB信息,参考输出如下: 118 119 ``` 120 /dev/ttyUSB0 /dev/ttyUSB1 121 ``` 122 1236. 使用ls -l /dev/ttyUSB1命令查看分组信息,参考输出如下: 124 125 ``` 126 crw-rw-r-- 1 root plugdev 188, 1 Nov 28 12:53 /dev/ttyUSB1 127 ``` 128 129 可以看到ttyUSB1已经加入plugdev组,接下来我们要将自己添加到plugdev组。使用whoami命令查看当前用户名,我们将其记录为\< your_user_name >。 130 1317. 使用sudo usermod -a -G plugdev \<your_user_name>命令将自己添加进plugdev组。 132 1338. 再次确认当前用户名已属于plugdev组,使用groups命令,可以看到打印信息中有plugdev即成功将当前用户添加至plugdev组。 134 135### 编译源码<a name="sectionb2"></a> 136 137使用`git clone`复制代码到任意目录下,打开进入到工程根目录下,输入`git submodule update --init --recursive`下载更新子模块。 138 139编译前请在当前控制台中配置`NUCLEI_TOOL_ROOT`路径,假设`Nuclei`文件夹所在路径为`/home/Nuclei`,输入`export NUCLEI_TOOL_ROOT=/home/Nuclei` 。或者使用时make选项增加`NUCLEI_TOOL_ROOT=/home/Nuclei`。 140 141配置路径后打开至代码根目录下的/target/riscv_nuclei_gd32vf103_soc_gcc/GCC位置,输入如下指令开始编译: 142 143``` 144make all 145``` 146 147编译结束后部分参考输出如下: 148 149``` 150 text data bss dec hex filename 151 24330 112 16768 41210 a0fa build/Nuclei-rvstar-gd32vf103-soc.elf 152``` 153 154若编译前想清理工程,请使用如下指令: 155 156``` 157make clean 158``` 159 160### 下载调试、运行<a name="sectionb3"></a> 161 162调试或运行前请先连接RV-STAR开发板,确保已按照[环境配置](#sectionb1)中驱动配置部分配置完成。 163 164同样配置好`NUCLEI_TOOL_ROOT`路径并打开至代码根目录下的/target/riscv_nuclei_gd32vf103_soc_gcc/GCC位置,输入如下指令进入GDB调试: 165 166``` 167make debug 168``` 169 170等待到进入GDB调试界面时,输入`load`指令下载编译好的elf文件,就可以开始调试。 171 172若想直接运行,请在调试时所在位置输入如下指令: 173 174``` 175make upload 176``` 177 178运行时可以查看串口打印内容,使用串口查看工具,这里以`minicom`为例,若未安装此工具可自行安装或使用其他串口查看工具。打开控制台,输入`minicom -D /dev/ttyUSB1 -b 115200`指令打开串口查看工具。 179 180运行时参考输出如下: 181 182``` 183Nuclei SDK Build Time: Mar 30 2021, 18:26:53 184Download Mode: FLASHXIP 185CPU Frequency 108540000 Hz 186entering kernel init... 187TaskSampleEntry1 running... 188TaskSampleEntry1 running... 189TaskSampleEntry1 running... 190TaskSampleEntry1 running... 191TaskSampleEntry2 running... 192TaskSampleEntry1 running... 193TaskSampleEntry1 running... 194EXTI0_IRQHandler running... 195ID Pri Status name 196-- --- --------- ---- 1970 0 QueuePend Swt_Task 1981 31 Running IdleCore000 1992 6 Delay TaskSampleEntry1 2003 7 Delay TaskSampleEntry2 201TaskSampleEntry1 running... 202TaskSampleEntry1 running... 203TaskSampleEntry1 running... 204TaskSampleEntry2 running... 205``` 206