前言

Windows环境下搭建基于Eclipse + RISC-V gcc编译器的RISC-V开发环境,配合openocd调试软件,可以实现RISC-V内核程序的编译、下载和调试。

准备工作

工欲善其事,必先利其器,RISC-V开发环境搭建之前,要先准备好所需要的软件,如下:

  • jdk-8u101-windows-x64.exe
  • Eclipse IDE for C/C++ developers
  • GNU MCU Eclipse Windows Build Tools
  • openocd
  • riscv32-unknown-elf-gcc

其中, jdk软件是在Eclipse不能打开时,才需要安装,如果能正常打开Eclipse则不需要安装,后面的几个软件都是压缩包形式,只需要解压到对应的位置,就可以直接使用,不需要安装。

安装Eclipse及工具链、调试工具

由于这些软件都是解压后就可以直接使用的,为了简化操作步骤,我已经把这些软件放在了一起,并压缩成了一个文件,直接解压就可以使用。

Eclipse.rar下载链接

链接:https://pan.baidu.com/s/1TvM_do0hdHHmJw2ARJNMWg 提取码:zj5f

包含:

  • Eclipse
  • GNU MCU Eclipse WindowsBuild Tools
  • openocd
  • riscv32-unknown-elf-gcc
  • Boot_Config

压缩包里,我添加了上一个帖子织女星开发板启动模式修改中介绍的用于切换启动模式的两个批处理文件,可以方便的对RV32M1的启动模式进行切换。

下载eclipse.rar文件之后,解压到本地,我的是解压到 F:\VEGA_Board\IDE\

其中GNU MCU Eclipse目录结构如下:

安装JAVA运行环境JRE

如果Eclipse.exe可以正常打开,就不用安装JAVA运行环境。我的电脑在运行Eclipse.exe,不能打开,出现A Java Runtime Environment or Java Development Kit(dkmust be available in order to run eclipse. balabala......,如下图

网上搜索一番,发现是没有安装JAVA运行环境,而Eclipse是基于JAVA运行的,然后找了一个jdk安装,再打开就好了。

jdk-8u101-windows-x64.exe下载

链接:https://pan.baidu.com/s/1AhZPEW03y90M2usa2L3c3w 提取码:umsr

下载完成之后,双击安装,一路Next就行,安装目录选择和Eclipse同一级。

如果还不能正常打开,可以尝试在环境变量中添加JAVA_HOME变量,变量值为jre目录下的bin文件夹,我的是在:F:\VEGA_Board\IDE\jre\bin,然后重新打开Eclipse。

主界面

配置编译链路径

Eclipse正常打开后,还需要配置编译工具和调试软件的路径。

1.配置全局编译工具路径

选择Windows->Preferences,选择MCU->Global Build Tools Path,设置全局编译工具的路径为[INSTALL_DIR]\eclipse\GNU MCU Eclipse\Build Tools\2.12-20190422-1053\bin

2.配置openocd调试软件路径

选择MCU-> Global OpenOCD Path,设置全局openocd调试软件路径[INSTALL_DIR]\eclipse\GNU MCU Eclipse\openocd\bin

3.配置RISC-V编译工具链

选择MCU-> Global RISC-V Toolchains Path,设置全局openocd调试软件路径[INSTALL_DIR]\eclipse\GNU MCU Eclipse\riscv32-unknown-elf-gcc\bin

升级板载调试器固件

为了能直接使用板载调试来直接调试RISC-V内核,需要把板子默认的CMSIS-DAP固件升级为JLink固件,并升级Jlink驱动,详情可以参考这篇帖子:织女星开发板调试器升级为Jlink固件,并把Jlink调试口和RISC-V调试口连接。

编译下载Demo工程

1.导入Demo工程

选择File->Import,或者是按快捷键Alt+F,然后再按I键,选择导入已经存在的工程,

这里我们选择RISC-V核SDK下的GPIO点灯程序,所在的位置:\rv32m1_sdk_riscv\boards\rv32m1_vega\driver_examples\gpio\led_output\ri5cy\riscveclipse

在弹出的界面,输入工程所在的目录,点击完成。

2.编译下载

示例程序很简单,就是让RGB中红色LED闪烁。

工程名称右键选择Build Project,或者是按快捷键Ctrl+B,编译整个工程。

如果没有错误,会显示

Info: Internal Builder is used for build
Info: Parallel threads used: 0 20:38:19 Build Finished. 0 errors, 0 warnings. (took 1s.876ms)

默认是编译的Debug版本,还可以选择编译Release版本。

编译无误后,点击Run->Run As->2 Local C/C++ Application

选择下载Debug还是Release版本的编程文件

下载日志。

Open On-Chip Debugger 0.10.0+dev-00433-g849f49ca (2019-01-04-07:48)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
adapter speed: 1000 kHz
srst_only separate srst_gates_jtag srst_open_drain connect_deassert_srst
Info : mohor tap selected
Info : adv debug unit selected
Info : Option 1 is passed to adv debug unit
Info : core 0 selected
Info : add flash_bank rv32m1 rv32m1.flash0
Info : add flash_bank rv32m1 rv32m1.flash1
Warn : Failed to open device: LIBUSB_ERROR_NOT_SUPPORTED.
Info : J-Link LPCXpresso V2 compiled Sep 23 2016 12:14:15
Info : Hardware version: 1.00
Info : VTarget = 3.300 V
Info : clock speed 1000 kHz
Info : JTAG tap: rv32m1.cpu tap/device found: 0x249511c3 (mfg: 0x0e1 (Wintec Industries), part: 0x4951, ver: 0x2)
Info : adv debug unit is configured with option ADBG_USE_HISPEED
Info : Listening on port 3333 for gdb connections
Started by GNU MCU Eclipse
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : accepting 'gdb' connection on tcp/3333
Info : JTAG tap: rv32m1.cpu tap/device found: 0x249511c3 (mfg: 0x0e1 (Wintec Industries), part: 0x4951, ver: 0x2)
Info : JTAG tap: rv32m1.cpu tap/device found: 0x249511c3 (mfg: 0x0e1 (Wintec Industries), part: 0x4951, ver: 0x2)
Info : JTAG tap: rv32m1.cpu tap/device found: 0x249511c3 (mfg: 0x0e1 (Wintec Industries), part: 0x4951, ver: 0x2)
Info : JTAG tap: rv32m1.cpu tap/device found: 0x249511c3 (mfg: 0x0e1 (Wintec Industries), part: 0x4951, ver: 0x2)
Info : Flash write discontinued at 0x00001424, next section at 0x000fff00
Info : JTAG tap: rv32m1.cpu tap/device found: 0x249511c3 (mfg: 0x0e1 (Wintec Industries), part: 0x4951, ver: 0x2)
Info : JTAG tap: rv32m1.cpu tap/device found: 0x249511c3 (mfg: 0x0e1 (Wintec Industries), part: 0x4951, ver: 0x2)
Info : JTAG tap: rv32m1.cpu tap/device found: 0x249511c3 (mfg: 0x0e1 (Wintec Industries), part: 0x4951, ver: 0x2)
===== RI5CY registers
(0) zero (/32): 0x00000000
(1) ra (/32): 0x00000000

3.显示效果

参考资料

历史精选


欢迎关注我的个人博客www.wangchaochao.top

或微信扫码关注我的公众号

手把手教你搭建织女星开发板RISC-V开发环境的更多相关文章

  1. 庐山真面目之十一微服务架构手把手教你搭建基于Jenkins的企业级CI/CD环境

    庐山真面目之十一微服务架构手把手教你搭建基于Jenkins的企业级CI/CD环境 一.介绍 说起微服务架构来,有一个环节是少不了的,那就是CI/CD持续集成的环境.当然,搭建CI/CD环境的工具很多, ...

  2. 手把手教你搭建Pytest+Allure2.X环境详细教程,生成让你一见钟情的测试报告(非常详细,非常实用)

    简介 宏哥之前在做接口自动化的时候,用的测试报告是HTMLTestRunner,虽说自定义模板后能满足基本诉求,但是仍显得不够档次,高端,大气,遂想用其他优秀的report框架替换之.一次偶然的机会, ...

  3. 手把手教你搭建SSH框架(Eclipse版)

    原文来自公众号[C you again],若需下载完整源码,请在公众号后台回复"ssh". 本期文章详细讲解了SSH(Spring+SpringMVC+Hibernate)框架的搭 ...

  4. 手把手教你搭建自己的Angular组件库 - DevUI

    摘要:DevUI 是一款面向企业中后台产品的开源前端解决方案,它倡导沉浸.灵活.至简的设计价值观,提倡设计者为真实的需求服务,为多数人的设计,拒绝哗众取宠.取悦眼球的设计.如果你正在开发 ToB 的工 ...

  5. 大数据江湖之即席查询与分析(下篇)--手把手教你搭建即席查询与分析Demo

    上篇小弟分享了几个“即席查询与分析”的典型案例,引起了不少共鸣,好多小伙伴迫不及待地追问我们:说好的“手把手教你搭建即席查询与分析Demo”啥时候能出?说到就得做到,差啥不能差人品,本篇只分享技术干货 ...

  6. 手把手教你搭建FastDFS集群(下)

    手把手教你搭建FastDFS集群(下) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u0 ...

  7. 手把手教你搭建FastDFS集群(中)

    手把手教你搭建FastDFS集群(中) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u0 ...

  8. 手把手教你搭建FastDFS集群(上)

    手把手教你搭建FastDFS集群(上) 本文链接:https://blog.csdn.net/u012453843/article/details/68957209        FastDFS是一个 ...

  9. 手把手教你搭建 ELK 实时日志分析平台

    本篇文章主要是手把手教你搭建 ELK 实时日志分析平台,那么,ELK 到底是什么呢? ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch.Logstash 和 Kiban ...

随机推荐

  1. 提示用户输入一个1-40之间的数字,使用if语句根据输入数字的大小进行判断,如果输入的数字在

    提示用户输入一个1-40之间的数字,使用if语句根据输入数字的大小进行判断,如果输入的数字在 num_user=input('输入一个1-40之间的整数:') num_int=int(num_user ...

  2. Java堆的结构是什么样子的?什么是堆中的永久代(Perm Gen space)?

    JVM的堆是运行时数据区,所有类的实例和数组都是在堆上分配内存.它在JVM启动的时候被创建.对象所占的堆内存是由自动内存管理系统也就是垃圾收集器回收. 堆内存是由存活和死亡的对象组成的.存活的对象是应 ...

  3. android studio 代码问题总结

    1,android studio隐藏title时,用eclipse里面的方法不行,所以用下面的代码解决,此代码需要写在 加载xml文件之后 getSupportActionBar().hide(); ...

  4. 基于ATxmega128的ASF串口应用

    1.编辑串口的配置参数,一般将这些参数放在conf_usart.h配置头文件中,本程序将这些参数放在user_board.h头文件中 #define USART_SERIAL &USARTD0 ...

  5. 类型,值,变量知识总结(js)

    文章目录: 一. 全局变量和局部变量分析 二. 从两个角度去理解变量作用域 三. 关于浮点数值计算产生舍入误差的问题分析 四. 理解js预解析 一. 全局变量和局部变量分析 在函数外部由var定义的变 ...

  6. 基于HTML的购物车模型的代码设计

    HTML代码 <html lang="en"> <head> <meta charset="UTF-8"> ​ ​ < ...

  7. SpringBoot2基础,进阶,数据库,中间件等系列文章目录分类

    本文源码:GitHub·点这里 || GitEE·点这里 一.文章分类 1.入门基础 SpringBoot2:环境搭建和RestFul风格接口 2.日志管理 SpringBoot2:配置Log4j2, ...

  8. ElasticSearch 时间格式

    "datetime": { "type": "date", "format": "yyyy-MM-dd HH: ...

  9. 富士通 DX90 S2存储分配映射盘

    屁话不多说,直接开操: 1.连接存储 用pc连接到存储管理口,如192.168.1.101 登录管理账号:默认root/root 创建Volume, 点击create开始创建新的volume 按需填写 ...

  10. 面试连环炮系列(一):如何保证Redis高可用和高并发

    如何保证Redis高可用和高并发? Redis主从架构,一主多从,可以满足高可用和高并发.出现实例宕机自动进行主备切换,配置读写分离缓解Master读写压力. Redis高可用方案具体怎么实施? 使用 ...