环境搭建的几点
官方的IDE在使用上没有vscode方便也不方便跟AI来结合。测试实践学习使用vscode来进行编码和编译,烧录还是使用的ALL in one programmer。
必须保留的核心选项:(我自己测试的经验,先观察官方IDE编译日志信息中的gcc和参数,vscode默认使用的gcc和库有差异,会报错。最终是切换成芯片官方的riscv-nuclei-elf-gcc.exe (GCC) 10.2.0,路径为GD32EB\plugins\com.gd.tools.nucleiriscvgcc10.2.0_1.0.0.202604291642\Tools\NucleiGCC10.2.0\bin\riscv-nuclei-elf-gcc.exe)
- 架构与ABI:-march=rv32imafcbp -mabi=ilp32f (您之前设置的是 rv32imac 和 ilp32,这是导致后续库不兼容的潜在原因,务必改为相同)
- 优化:-Os (您设成了 -O0,建议改为 -Os 以保持一致)
- 警告选项:可保留或根据喜好修改,但不影响链接
- 宏定义:-DCFG_RTOS -DPLATFORM_OS_FREERTOS 必须加上
- 包含路径:需要全部复制到 EIDE 的包含路径中 最关键的几个点:
- 链接脚本:-T "example_wifi.lds"(注意相对路径,需要根据您的项目位置调整) 这里也是容易出问题的地方,经过测试用源文件例子的GD32VW55x_RELEASE_V1.0.3g\MSDK\examples\wifi\example_wifi.lds 不易出错
- 库路径:-L 指定了 lib 和 DSP 目录
- 库文件:-lwifi -lrf -lwpas -lm -lnmsis_dsp_rv32imafcbp
- 符号文件:-Wl,--just-symbols=.../rom_symbol_m.gcc —— 这一步非常重要,它提供了 ROM 中预先烧录的 Wi-Fi/加密函数的地址,缺了它就会产生大量 undefined reference(您之前报的就是这些)。
- 其他:--specs=nano.specs 和 --specs=nosys.specs 是标准库规范,建议保留。 经过测试, 1、链接脚本路径 2、链接库 -L "D:/Software/IOTDev/GD32VW55x_RELEASE_V1.0.3g/MSDK/lib" -L "D:/Software/IOTDev/GD32VW55x_RELEASE_V1.0.3g/MSDK/plf/riscv/NMSIS/Library/DSP/GCC" -Wl,--just-symbols="D:/Software/IOTDev/GD32VW55x_RELEASE_V1.0.3g/ROM-EXPORT/symbol/rom_symbol_m.gcc" -Wl,--cref -Wl,--no-relax -nostartfiles 697

完整的
-march=rv32imafcbp -mcmodel=medlow -msmall-data-limit=8 -msave-restore -mabi=ilp32f -Os -ffunction-sections -fdata-sections -fno-common -fno-unroll-loops -g
-nostartfiles
-Xlinker --gc-sections
-L "D:/Software/IOTDev/GD32VW55x_RELEASE_V1.0.3g/MSDK/lib"
-L "D:/Software/IOTDev/GD32VW55x_RELEASE_V1.0.3g/MSDK/plf/riscv/NMSIS/Library/DSP/GCC"
-Wl,-Map,"D:/Software/IOTDev/GD32VW55x_RELEASE_V1.0.3g/MSDK/examples/wifi/softap_tcp_server/Eclipse_project/softap_tcp_server/softap_tcp_server.map"
--specs=nano.specs
-u_printf_float
--specs=nosys.specs
-Wl,--just-symbols="D:/Software/IOTDev/GD32VW55x_RELEASE_V1.0.3g/ROM-EXPORT/symbol/rom_symbol_m.gcc"


开源社区 


