Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
vscode
先楫HPM_RISCV
开发环境
先楫HPM6750 vscode开发环境搭建
发布于 2024-03-19 22:34:29 浏览:1348
订阅该版
[tocm] ####
先楫HPM6750 vscode开发环境搭建
先说结论:**目前根据目前尝试只要RT-Thread的BSP只要支持GCC编译,支持openocd,pyocd等工具烧录调试都可以在VSCODE中进行开发** 最近新出了先楫hpm6800,内置了芯原的2.5D GPU,各种参数看起来都非常优秀,让我突然想起来吃灰3个多月的hpm6750,双核800MHz主频,性能非常强大,而且这是我第一次接触没有片内Flash,启动代码在只读ROM中,Flash需要外接支持XIP的NOR Flash的芯片,所以我打算先学习使用hpm6750,再考虑是否入手hpm6800,预期是使用hpm6750移植openmv,但是不知道时间是否来得及。 官方SDK使用的IDE为Segger Embedded Studio以及RT-Thread Studio,我个人目前所有开发都转到vscode上面了,所以就尝试在vscode开发HPM6750。文章目标在于在vscode中实现调试,下载,代码跳转快捷准确。 硬件:野火hpm6750 BTB核心板+底板 RTT版本:Github master分支 #### 1.工具链选择 HPM6750内核是买的Andes家的所以工具链有以下三种选择 | gcc工具链 | 获取方式 | | ------------------------ | ------------------------------------------------------------ | | 公版RV32工具链 | [riscv-collab/riscv-gnu-toolchain: GNU toolchain for RISC-V, including GCC (github.com)](https://github.com/riscv-collab/riscv-gnu-toolchain) | | 先楫基于公版修改的工具链 | 包含在SDK中,一起下载 | | Andes提供的工具链 | [andestech/Andes-Development-Kit (github.com)](https://github.com/andestech/Andes-Development-Kit) | 原本听说Andes IP厂商提供的工具链性能最优,本来是选择使用Andes的,但是使用过程中发现存在以下问题 - windows环境需要使用Cygwin虚拟环境才可使用,并且使用Andes工具链gdb时用于在Cygwin虚拟环境,路径与实体机不一致导致无法跳转 - 使用Andes工具链编译的固件msh无法工作(具体原因待查) - 使用RTT_RAM.ld作为链接脚本时发现地址重叠,经过排查也与工具链行为有关 因此踩坑之后选择放弃Andes提供的工具链,选用先楫提供的工具链,也证明了**在尝试过程中尽量选择与厂家一致的方案,尽可能的增加可行的内容,缩小排查范围** 发现RTT的bsp以及ENV中均没有提供工具链与Openocd因此到官网下载SDK包 网盘链接如下: [百度网盘 请输入提取码 (baidu.com)](https://pan.baidu.com/share/init?surl=qvyXhhbDmn4ug3oJeHJrbg&pwd=4peg) #### 2.BSP移植 由于我使用的是野火的板子,RTT BSP中并没有直接可用的,这里我选择引脚配置,片外SRAM,NOR Flash最为相近的hpm6750evkmini作为基底。 在ENV中输入scons --dist打包最小工程提示 ``` scons: Reading SConscript files ... Error: the toolchain path (/opt/riscv-gnu-gcc/bin) is not exist, please check 'EXEC_PATH' in path or rtconfig.py. ``` 这是因为工具链没有配置,对rtconfig.py进行以下修改 ```python if CROSS_TOOL == 'gcc': PLATFORM = 'gcc' if os.getenv('RTT_RISCV_TOOLCHAIN'): EXEC_PATH = os.getenv('RTT_RISCV_TOOLCHAIN') else: #EXEC_PATH = r'/opt/riscv-gnu-gcc/bin'修改为下方 EXEC_PATH = r'D:\HPM6000_Source\Andes\nds32le-elf-newlib-v5d\bin' else: print("CROSS_TOOL = {} not yet supported" % CROSS_TOOL) ``` 得到最小工程之后放置于个人的开发目录下 **此外需要注意打包时不会将`rt-thread\bsp\hpmicro\libraries`一起包括,所以需要自己复制到最小工程中** 这步做完即可在rtthread studio进行开发了,如想要在vscode中开发需要进行下面的操作 #### 3.vscode适配 vscode适配的目标为在vscode中实现调试,下载,代码跳转快捷准确 ##### 代码跳转 最容易实现的为代码跳转快捷准确 工程目录使用ENV开发,输入`scons --target=vsc`则会生成.vscode\c_cpp_properties.json文件,该文件为vscode的配置文件用于配置这个设置定义了头文件的搜索路径,编译器路径等等内容,作为代码跳转的依据。 还有一种思路为输入`scons --target=cmake`生成CMakeLists.txt在编译时会生成compile_commands.json文件,可给Clangd插件作为跳转依据,CLion就是基于这个原理做的代码跳转,但是之前实测在vscode开发rtt时会出现头文件搜索异常等问题没有解决,**因此这个思路暂时放弃。** ##### 下载 一键下载需要修改tasks.json文件,输入编译,下载命令即可,示例如下 ```json { "version": "2.0.0", "tasks": [ { "type": "shell", "label": "Build", "command": "scons -j18", "problemMatcher": [], "group": { "kind": "build", "isDefault": true } }, { "type": "shell", "label": "Rebuild", "command": "scons -c && scons -j18", "problemMatcher": [], "group": { "kind": "build", "isDefault": true } }, { "type": "shell", "label": "download", "command": "D:/HPM6000_Source/SDK/sdk_env_v1.0.0/tools/openocd/openocd.exe", "args": [ "-f", "D:/HPM6000_Source/SDK/sdk_env_v1.0.0/hpm_sdk/boards/openocd/probes/cmsis_dap.cfg", "-f", "D:/HPM6000_Source/SDK/sdk_env_v1.0.0/hpm_sdk/boards/openocd/soc/hpm6750-single-core.cfg", "-f", "D:/HPM6000_Source/SDK/sdk_env_v1.0.0/hpm_sdk/boards/openocd/boards/hpm6750evkmini.cfg", "-c", "init; halt; flash write_image erase rtthread.elf; reset; shutdown" ], "problemMatcher": [ "$gcc" ], "group": "build", "dependsOn": "Build" } ] } ``` ##### 调试 调试首先需要修改launch.json文件,这里面包含着elf文件路径,下载算法,调试服务器(openocd/pyocd)等内容 例子如下,**路径需要按照本机进行修改**,配置可以有很多项,下面为pyocd调试stm32的例子。 **configFiles内容需要修改**,根据使用单核还是双核选择不同的配置下载算法,不同板子代表不同片外SRAM,Flash的型号,引脚设置需要进行修改。使用不同调试也修改为不同配置文件,如我使用Daplink则使用cmsis_dap.cfg,若使用板载ft2232调试器则使用ft2232.cfg。均可在openocd或sdk目录中找到。 ```json { "version": "0.2.0", "configurations": [ { "name": "hpm6750-board-openocd",//定义了配置的名称。 "executable": "${workspaceRoot}/rtthread.elf",//调试的程序的路径 "request": "launch",//表示这是一个启动调试会话的请求。 "type": "cortex-debug",//Cortex-Debug插件来进行调试 "runToEntryPoint": "main",//启动调试会话后,调试器应该运行到main函数。 "targetId": "HPM6750",//定义了目标设备的ID "servertype": "openocd",//使用OpenOCD作为调试服务器 "cwd": "${workspaceRoot}",//OpenOCD的配置文件的路径 "configFiles": [ "D:/HPM6000_Source/SDK/sdk_env_v1.0.0/hpm_sdk/boards/openocd/probes/cmsis_dap.cfg", "D:/HPM6000_Source/SDK/sdk_env_v1.0.0/hpm_sdk/boards/openocd/soc/hpm6750-single-core.cfg", "D:/HPM6000_Source/SDK/sdk_env_v1.0.0/hpm_sdk/boards/openocd/boards/hpm6750evkmini.cfg" ], "armToolchainPath": "D:/HPM6000_Source/SDK/sdk_env_v1.0.0/toolchains/rv32imac-ilp32-multilib-win/bin/",//工具链的路径 "gdbPath": "D:/HPM6000_Source/SDK/sdk_env_v1.0.0/toolchains/rv32imac-ilp32-multilib-win/bin/riscv32-unknown-elf-gdb.exe",//GDB的路径 }, { "name": "rt-spark-pyocd", "cwd": "/opt/rt-thread/tools/pyocd/bin/", "executable": "${workspaceRoot}/bsp/stm32/stm32f407-rt-spark/rt-thread.elf", "request": "launch", "type": "cortex-debug", "runToEntryPoint": "main", "targetId": "STM32F407ZG", "servertype": "pyocd", "serverpath": "/opt/rt-thread/tools/pyocd/bin/pyocd", "armToolchainPath": "/opt/rt-thread/tools/gnu_gcc/gcc-arm-none-eabi/bin/", "gdbPath": "/opt/rt-thread/tools/gnu_gcc/gcc-arm-none-eabi/bin/arm-none-eabi-gdb", }, ] } ``` **此处可能有人发现这里是需要调用cortex-debug插件,但是这个芯片是RISCV的应该不行吧** 这里我的回答是可以用,但是需要做一些修改,因为cortex-debug插件就是调用gcc工具链中的gdb使用objdump,nm等命令并将结果图形化,只要RV的工具链也有这些命令,理论上是可行的。 但是由于cortex-debug插件是给arm工具链用的,所以调用命令前缀为gcc-arm-none-eabi与工具链中工具前缀不匹配,调用不成功所以需要在settings.json中添加如下内容,指定调用工具路径即可使用。 ```json "cortex-debug.gdbPath.windows": "D:/HPM6000_Source/SDK/sdk_env_v1.0.0/toolchains/rv32imac-ilp32-multilib-win/bin/riscv32-unknown-elf-gdb.exe", "cortex-debug.openocdPath.windows": "D:/HPM6000_Source/SDK/sdk_env_v1.0.0/tools/openocd/openocd.exe", "cortex-debug.objdumpPath.windows": "D:/HPM6000_Source/SDK/sdk_env_v1.0.0/toolchains/rv32imac-ilp32-multilib-win/bin/riscv32-unknown-elf-objdump.exe", "cortex-debug.armToolchainPath.windows": "D:/HPM6000_Source/SDK/sdk_env_v1.0.0/toolchains/rv32imac-ilp32-multilib-win/bin/", ``` F5进行调试成功调试,如果发现无法正常跳转可以检查rtconfig.py或者用scons --verbose查看的编译参数是否有 `CFLAGS += ' -gdwarf-2' AFLAGS += ' -gdwarf-2'`,如果没有这个参数elf中没有调试信息,gdb无法正常跳转。 ![调试界面](https://oss-club.rt-thread.org/uploads/20240319/627ca526b4352a23ca1a157e4844ef63.png.webp) 至此开发环境搭建完成,使用coremark软件包简单跑个分,-O2 -Os优化,运行区域XIP FLASH ``` 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 13067 Total time (secs): 13.067000 Iterations/Sec : 2295.859799 Iterations : 30000 Compiler version : GCC11.1.0 Compiler flags : Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x5275 Correct operation validated. See README.md for run and reporting rules. CoreMark 1.0 : 2295.859799 / GCC11.1.0 / STACK ``` 结果和STM32H7差不多,有很大提升空间,改为O3优化发现msh又挂了,暂时先放弃,之后考虑在编译参数等地方进行处理。 ##### 总结 这个芯片由于是RISCV的,并且芯片比较复杂与简单的MCU不一样,所以配置起来比之前配stm32之类的mcu要复杂很多,涉及到下载算法之类的问题,但是有搭建HPM6750的经验后对于这些json文件的了解更加深刻,其他芯片搭建起来也会更加轻松。
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
goldengrandpa
这家伙很懒,什么也没写!
文章
11
回答
19
被采纳
2
关注TA
发私信
相关文章
1
请问兆易创新公司的GD32F130能用RT-Thread Studio开发吗?
2
请问有用过的eclips开发吗?
3
任务菜单指的是什么?
4
RT studio可以自己搭建开发环境吗?
5
rt-thread studio 删除工程失败
6
linux下pkgs --update显示无pkgs命令
7
潘多拉开发板在VSCODE无法执行micropython
8
vscode qemu debug 遇到的问题
9
rtthread使用makefile开启动态方式创建线程失败
10
VScode调试qemu-vexpress-a9工程,GDB出错,求助~
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部