RISC-V技术论坛
直播中

youyoulan

13年用户 1206经验值
私信 关注
[问答]

利用RVSTAR板子编译helloworld程序报错是怎么回事?如何解决?

在按照芯来官网指导,用NucleiStudio进行编译时一直报错,重复多次之后依然没用。(比较初级的问题,希望能耐心回答,感谢感谢!!)

                                                                                


回帖(1)

哈哈哈

2025-11-7 17:09:07

遇到RVSTAR板子在NucleiStudio中编译HelloWorld程序失败的问题,通常与环境配置、路径设置或工程设置有关。以下是详细排查步骤和解决方案:




一、常见错误原因




  1. 工具链路径未正确配置  



    • NucleiStudio找不到RISC-V编译器(如 riscv-nuclei-elf-gcc)。




  2. 缺少依赖文件  



    • 工程中缺失启动文件(如 startup_gd32vf103.s)或链接脚本(.ld 文件)。




  3. 环境变量冲突  



    • 系统环境变量(如 PATH)中已有其他RISC-V工具链导致冲突。




  4. 工程配置错误  



    • 未选择正确的目标板(Board)或CPU型号。




  5. 代码适配问题  



    • HelloWorld代码未适配RVSTAR板载串口(GD32VF103芯片需初始化串口)。






二、逐步解决方案


1. 检查工具链配置



  • 打开工程配置

    右击项目 → PropertiesC/C++ BuildSettings

  • 确认工具链路径

    Tool Settings 选项卡中,检查:

    • GNU RISC-V Cross C Compiler → 编译器路径(如 riscv-nuclei-elf-gcc)。

    • GNU RISC-V Cross Linker → 链接器路径。


  • 修复方法

    如果路径为空或错误,手动指定路径(通常位于NucleiStudio安装目录的 toolchain 文件夹)。


2. 添加缺失的关键文件


RVSTAR的HelloWorld工程必须包含:



  • 启动文件startup_gd32vf103.s(初始化芯片)。

  • 链接脚本gd32vf103c_rvstar.ld(定义内存布局)。


  • 系统文件system_gd32vf103.c(系统时钟配置)。


    操作步骤



    1. 从官方示例复制文件(如 Nuclei SDK例程):
      nuclei-sdk/SoC/gd32vf103/Common/Source/GCC/
      ├── startup_gd32vf103.s
      ├── system_gd32vf103.c
      └── gd32vf103c_rvstar.ld

    2. 将这些文件添加到工程的 src 目录。

    3. 在工程属性中指定链接脚本:

      PropertiesC/C++ BuildSettingsLinkerGeneral → 填写脚本路径(如 "${workspace_loc:/${ProjName}/src/gd32vf103c_rvstar.ld}")。




3. 配置串口输出的HelloWorld代码


RVSTAR需通过串口输出,标准 printf 需重定向到串口。使用以下代码:


   #include "gd32vf103.h"
   #include

   // 重定向printf到串口0
   int _put_char(int ch) {
       while (usart_flag_get(USART0, USART_FLAG_TBE) == RESET);
       usart_data_transmit(USART0, (uint8_t)ch);
       return ch;
   }

   int main(void) {
       // 启用串口0时钟
       rcu_periph_clock_enable(RCU_USART0);
       // 配置串口引脚(PA9=TX, PA10=RX)
       gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
       // 初始化串口:115200, 8N1
       usart_deinit(USART0);
       usart_baudrate_set(USART0, 115200);
       usart_word_length_set(USART0, USART_WL_8BIT);
       usart_parity_config(USART0, USART_PM_NONE);
       usart_receive_config(USART0, USART_RECEIVE_ENABLE);
       usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
       usart_enable(USART0);

       printf("Hello RVSTAR!n"); // 通过串口输出
       while (1);
   }

4. 检查工程设置



  • 确认目标板

    创建工程时选择 Board: RVSTARSoC: GD32VF103C

  • 清理工程

    菜单栏 Project → Clean → 重新编译。


5. 解决环境变量冲突



  • 检查系统 PATH 是否有其他RISC-V工具链(如SiFive或Pulp的工具链)。

  • 临时解决方案

    在NucleiStudio启动前删除冲突路径:
     # Linux/macOS 终端
    export PATH=/path/to/nuclei/toolchain:$PATH

  • 永久方案

    在系统环境变量中优先排列Nuclei工具链路径。


6. 重新安装工具链


如果仍失败,尝试:



  1. 卸载NucleiStudio。

  2. 手动删除残留文件(如 ~/NucleiStudioC:NucleiStudio)。

  3. 重新下载最新版 NucleiStudio

  4. 安装时勾选 RVSTAR Board Support Package




三、验证步骤



  1. 编译工程 → 观察控制台输出,确认无 error

  2. 将RVSTAR连接电脑 → 点击 Run 烧录程序。


  3. 使用串口助手(波特率 115200)查看输出:


    Hello RVSTAR!





四、仍无法解决?


提供具体的 错误日志(复制控制台报错信息),可进一步定位问题!例如:



  • undefined reference to ... → 缺少函数实现(检查串口初始化)。

  • cannot find -lc → 工具链路径错误。

  • file not found: startup_xxx.s → 启动文件未添加。


通过以上步骤,90%的RVSTAR编译问题可解决。遇到具体错误时请反馈日志,我会为你针对性解答!

举报

更多回帖

发帖
×
20
完善资料,
赚取积分