第一次接触Ai-WB2-12F开发板的同学可能会被环境配置劝退,其实只要跟着步骤走,半小时就能搞定。我去年第一次用这块板子时,花了整整两天才把环境搭好,现在把踩坑经验都总结成这套保姆级方案。
核心工具链只需要三个部分:MSYS2(模拟Linux环境)、RISC-V工具链、VSCode编辑器。这里特别提醒,MSYS2建议从国内镜像站下载,官方源速度慢得像蜗牛。我常用的是阿里云镜像站,下载msys2-x86_64最新版就行,安装时记得勾选"将MSYS2添加到系统PATH"(不然后面手动加环境变量很麻烦)。
安装完成后,在开始菜单找到MSYS2 UCRT64终端(注意不是默认的MSYS2终端),先执行以下命令更新基础包:
bash复制pacman -Syu
这个步骤可能会遇到"无法锁定数据库"的错误,解决方法很简单——关掉所有MSYS2窗口重新开就行。更新完成后,建议安装几个常用工具:
bash复制pacman -S git make python3
官方SDK仓库在gitee上,用这个命令克隆:
bash复制git clone --recursive https://gitee.com/Ai-Thinker-Open/Ai-Thinker-WB2
这里有个大坑——toolchain/riscv/MSYS目录经常是空的!我遇到过五六次这种情况,根本原因是子模块拉取失败。有两个解决方案:
bash复制git submodule update --init --recursive
实测发现,即使开了全局代理也可能失败(别问我怎么知道的)。最稳的方法是下载完成后,检查toolchain目录是否完整,应该包含riscv-none-embed-gcc等工具。如果遇到权限问题,右键文件夹→属性→安全→给当前用户完全控制权限。
很多教程只教一种配置方法,实际开发中要根据场景灵活选择:
方法一:永久生效(推荐新手)
sysdm.cpl打开系统属性code复制D:\msys64\ucrt64\bin
D:\Ai-Thinker-WB2\toolchain\riscv\bin
方法二:临时生效(适合多版本切换)
在VSCode终端里直接运行:
powershell复制$env:Path += ";D:\msys64\ucrt64\bin;D:\Ai-Thinker-WB2\toolchain\riscv\bin"
方法三:配置文件法(适合高级用户)
在工程根目录创建.env文件,内容:
code复制PATH=D:\msys64\ucrt64\bin;D:\Ai-Thinker-WB2\toolchain\riscv\bin;${env:PATH}
然后在VSCode设置中搜索"Env File",勾选Auto Load选项
验证是否配置成功:新开终端运行riscv-none-embed-gcc -v,应该能看到类似这样的输出:
code复制gcc version 10.2.0 (SiFive GCC-Metal 10.2.0-2020.12.8)
安装完VSCode后,强烈建议安装这几个插件:
打开项目时有个小技巧:不要直接打开仓库根目录,而是打开applications下的子项目(比如helloworld)。这样编译速度更快,因为不需要索引整个SDK。
编译时如果遇到"找不到riscv-none-embed-gcc"错误,八成是环境变量没生效。我的经验是:
make clean烧录前需要确认三件事:
烧录命令格式:
bash复制make -j8 flash p=COM10
这里的-j8表示用8线程编译(根据你CPU核心数调整),COM10要换成你自己的端口号。有个快速查看端口号的方法:
powershell复制Get-PnpDevice -PresentOnly | Where-Object { $_.InstanceId -match '^USB' } | Select-Object FriendlyName, InstanceId
烧录过程中最常遇到两个问题:
成功烧录后,用串口工具(推荐CoolTerm)查看日志。如果看到乱码:
c复制#include "delay.h"
delay_ms(500); // 让串口初始化完成
当项目越来越大时,默认配置可能不够用。打开Makefile可以看到这些关键参数:
makefile复制BUILD_TYPE = debug # 改为release可优化体积
OPTIMIZATION = -O2 # 开发阶段建议用-O0
如果想添加自定义宏定义,修改CFLAGS变量:
makefile复制CFLAGS += -DUSE_FULL_ASSERT
我常用的性能优化组合:
makefile复制BUILD_TYPE = release
OPTIMIZATION = -Os
CFLAGS += -flto -fno-stack-protector
遇到内存不足时,可以裁剪功能模块。比如禁用蓝牙:
makefile复制CFLAGS += -DCONFIG_BT_ENABLED=0
手动输入命令太麻烦,我写了几个实用脚本:
一键编译烧录(保存为flash.bat):
batch复制@echo off
set PORT=COM10
make clean && make -j8 && make flash p=%PORT%
pause
自动识别端口(需要Python3):
python复制import serial.tools.list_ports
ports = list(serial.tools.list_ports.comports())
print(f"检测到{len(ports)}个串口设备:")
for p in ports:
if "USB" in p.description:
print(f"建议使用:{p.device}")
内存占用分析(需要安装riscv-none-embed-size):
bash复制riscv-none-embed-size -A ./build/*.elf
把这些脚本放在工程根目录,开发效率直接起飞。特别是调试内存泄漏时,size工具能快速定位问题模块。