本期工具分享来自一名不愿留名的热心先楫粉丝,咱就称大神为 @l君吧!内容着重介绍了 如何在clion中开发hpm6750,感兴趣的赶紧上车
hpm6750 是先楫半导体 hpm6000 系列的旗舰产品,采用双risc-v内核(andescore d45)设计。目前先辑半导体主要推荐使用 segger embedded studio 进行开发,可以免费进行商业应用。在未来,先辑还可能推出一款基于 vs code 的集成化开发平台。这篇文章主要介绍如何在 clion 上进行配置开发。
在进入正题之前,首先需要明确的是无论 segger embedded studio 还是 vs code,都只是一个开发环境,并不绑定编译器。如 segger 有一些自己的工具链,但也可以用 andes 的甚至是 clang。目前 hpm6000 系列可用的编译器包括但不一定限于以下列表:
名称 编译器前缀 说明 获取方式
riscv32-unknow-elf主线 riscv32-unknow-elf rv官方工具链,需修改hpm_sdk方可使用 github - riscv-collab/riscv-gnu-toolchain: gnu toolchain for risc-v, including gcc
riscv32-unknow-elf魔改版 riscv32-unknow-elf 针对hpm的修改版 先辑sdk包
nds32le-elf-newlib-v5 riscv32-elf andes 工具链,性能最优 github - andestech/nds-gnu-toolchain: gnu toolchain for andescore
如果不追求使用主线工具链,选择第二、第三种工具链均可。第二种工具链的优势是可以直接下载到工具链包,而 andes 的工具链优势是性能最佳,两者的 coremark 跑分大约有 20% 的差距(2022.09.15),但是目前尚未提供可直接下载的二进制包。
那么有没有简单不麻烦的配置方式?segger embedded studio 请,windows linux macos 通吃。
软件安装
使用 clion 开发 hpm6000 系列单片机需要以下软件:
clion适用于 hpm6000 系列的编译器适用于 hpm6000 系列的 openocdpython3.8 及以上版本 1 nds-gnu-toolchain 的编译(可选)
risc-v 是一个开放的指令集架构,各个 ip 厂商都可以根据自己的需求定制,因此 risc-v 虽然有 riscv-gnu-toolchain 这样的公版编译器,但并非所有 risc-v 核心都适合使用,厂商往往会根据自己的核心特点自行定制一套编译器。对于 andes 而言,nds-gnu-toolchain 就是他们自行定制的一套编译工具链,只有使用这一套工具链才能获得最佳的性能(例如 coremark 4600+ 的分数)
andes 和 hpmicro 目前均没有提供这套工具链的二进制文件下载,因此需要自行编译。项目 readme 给出了编译方法,主要命令如下所示。目前(2022.09.15)在 ubuntu22.04 系统下会出现undefined reference to _initialize_string_view_selftests()错误,请选择 20.04 等版本进行编译(ubuntu20.04 wsl2 测试通过)。若初始化子模块时无法下载,可以参考这里的方法通过镜像站解决。
git clone https://github.com/andestech/nds-gnu-toolchain.gitcd nds-gnu-toolchaingit submodule update --init --recursive./build_elf_toolchain.sh如果编译脚本没有报错,最后你将会获得一个名为 nds32le-elf-newlib-v5 的文件夹,它就是下一步我们需要使用的工具链文件夹。如果你需要支持浮点数的工具链,可以根据 readme 的介绍修改编译脚本,构建 nds32le-elf-newlib-v5d / nds32le-elf-newlib-v5f 这两个工具链。
2 软件安装与配置首先,请安装以下软件,并准备好可运行的 clion
sudo apt install build-essential cmake ninja-build libc6-i386 libc6-i386-cross libstdc++6-i386-crosssudo apt install python3 python3-pip随后,请从pan.baidu.com/s/1qvyxhh 中下载 sdk/linux_toolchain 下的 openocd,以及 sdk/linux_toolchain 下的 riscv-gnu-toolchain 或者准备自行编译 nds32le-elf-newlib-v5,并通过 git 获取 hpm_sdkgit clone https://github.com/hpmicro/hpm_sdk请将以上文件解压并放置在恰当的位置,以便你能够轻易找出它们的路径,一种参考布局如下图所示下面,我们需要设置一些环境变量。这些环境变量会由 hpm_sdk 中的 cmake 脚本调用,因此如果你后面遇到 cmake 找不到某些内容的报错,不妨首先考虑环境变量问题。使用你喜欢的编辑器打开 ~/.bashrc,在末尾添加上下面的内容,假定toolchain_path作为工具链的解压目录(需要满足在toolchain_path\bin下可以找到riscv32-elf-gcc),hpm_sdk_path 作为 hpm_sdk 的解压目录。
# for nds32le-elf-newlib-v5export hpm_sdk_base=hpm_sdk_pathexport gnuriscv_toolchain_path=toolchain_pathexport hpm_sdk_toolchain_variant=nds-gcc
# for riscv-unknow-elfexport hpm_sdk_base=hpm_sdk_pathexport gnuriscv_toolchain_path=toolchain_path最后,我们更新环境变量并安装一些 python 库。如果你在 pip 安装这个过程失败了,请考虑环境变量设置是否正确
source ~/.bashrcpip3 install --user -r $hpm_sdk_base/scripts/requirements.txt
openocd设置
openocd 使用一系列配置文件描述电路板的调试器和芯片,这些内容均存放在 `hpm_sdk/boards/openocd/` 路径之下。为了方便起见,我们需要创建一个板级 openocd 描述文件,放置在该目录下。以 hpm6750evkmini 为例,内容如下,请将 hpm_sdk_base 替换为你的 sdk 路径。其他开发板请自行对照内容配置文件内容修改
# /hpm_sdk/boards/openocd/hpm6750evkmini.cfg
source $hpm_sdk_base/boards/openocd/probes/ft2232.cfgsource $hpm_sdk_base/boards/openocd/soc/hpm6750-single-core.cfgsource $hpm_sdk_base/boards/openocd/boards/hpm6750evkmini.cfg
clion配置
启动 clion,打开 hpm_sdk/sample/coremark 项目,打开 setting
1 toolchain新建一个 system 类型的工具链并命名为 nds-v5,修改 c/c++ 编译器和 gdb 的路径为 nds-gcc 的可执行文件路径,如下图所示。如果使用 riscv-unknow-elf,则选择对应的路径。
2 cmake打开 cmake 栏,在 cmake option 中加入下面的语句,并根据你的喜好修改名称,如下所示
-dboard=hpm6750evkmini -dcmake_build_type=flash_sdram_xiphpm_sdk 需要根据开发板类型配置各种编译选项,因此首先需要通过 cmake 给出板子名称。后一项则是选择了 flash_sdram_xip 这一预设内存布局,关于这方面内容,可以参考 hpm6750 手册和相关测评文章。在明白其意义的前提下,你可以根据个人需求对这两项选项进行修改。完成这两步以后,你应该可以编译 coremark 工程了。
3 配置 openocd 路径打开选项中的嵌入式部署,将 openocd 路径设置为刚刚你所设置的 openocd,注意,只能选用 hpmicro 提供的 openocd,如果你已有在使用的 openocd,又不想更换,可能只能选择其他方式(如命令行)进行下载和调试。
4 配置 openocd 目标点击 run/debug target 窗口,点击 edit configureations ..点击右上角“+”添加一个 openocd download & run,按图示配置 target、excutable binary、debugger 和 board config file,保存后退出。
5 编译下载和 coremark 跑分将 hpm6750evkmin 连接到电脑,点击 run 绿色箭头,程序自行编译下载。打开串口终端,获得 coremark 跑分结果
hpm6750evkmini clock summary==============================cpu0: 816000000hzcpu1: 816000000hzaxi0: 200000000hzaxi1: 200000000hzaxi2: 200000000hzahb: 200000000hzmchtmr0: 24000000hzmchtmr1: 1000000hzxpi0: 133333333hzxpi1: 400000000hzdram: 166666666hzdisplay: 74250000hzcam0: 59400000hzcam1: 59400000hzjpeg: 200000000hzpdma: 200000000hz==============================
----------------------------------------------------------------------$$\ $$\ $$$$$$$\ $$\ $$\ $$\$$ | $$ |$$ __$$\ $$$\ $$$ |\__|$$ | $$ |$$ | $$ |$$$$\ $$$$ |$$\ $$$$$$$\ $$$$$$\ $$$$$$\$$$$$$$$ |$$$$$$$ |$$\$$\$$ $$ |$$ |$$ _____|$$ __$$\ $$ __$$\$$ __$$ |$$ ____/ $$ \$$$ $$ |$$ |$$ / $$ | \__|$$ / $$ |$$ | $$ |$$ | $$ |\$ /$$ |$$ |$$ | $$ | $$ | $$ |$$ | $$ |$$ | $$ | \_/ $$ |$$ |\$$$$$$$\ $$ | \$$$$$$ |\__| \__|\__| \__| \__|\__| \_______|\__| \______/----------------------------------------------------------------------2k performance run parameters for coremark.coremark size : 666total ticks : 315580897total time (secs): 13.149204iterations/sec : 4563.013838iterations : 60000compiler version : gcc10.3.0compiler flags : -wall -wno-format -fomit-frame-pointer -fno-builtin -ffunction-sections -fdata-sections -g -o3 -funroll-all-loops -finline-limit=600 -ftree-dominator-opts -fno-if-conversion2 -fselective-scheduling -fno-code-hoisting -mstrict-alignmemory location : stackseedcrc : 0xe9f5[0]crclist : 0xe714[0]crcmatrix : 0x1fd7[0]crcstate : 0x8e3a[0]crcfinal : 0xbd59correct operation validated. see readme.md for run and reporting rules.coremark 1.0 : 4563.013838 / gcc10.3.0 -wall -wno-format -fomit-frame-pointer -fno-builtin -ffunction-sections -fdata-sections -g -o3 -funroll-all-loops -finline-limit=600 -ftree-dominator-opts -fno-if-conversion2 -fselective-scheduling -fno-code-hoisting -mstrict-align / stack
由于我们构建的是 debug 版本,4563 的分数距离标称值稍弱。如果 cmake options 选择 release 版本,则可以得到和标称结果基本一致的跑分
-dcmake_build_type=flash_sdram_xip_release
知乎作者原文链接 (https://zhuanlan.zhihu.com/p/564229673)
液晶拼接屏会议室显示系统的哪些部分
LTC4425-具电流限制理想二极管和电压/电流监视器的线性
未来研究领域再发力 英特尔推出两款计算芯片
你知道为什么不用XFP光模块了吗?
维修N9020A安捷伦频谱分析仪没有迹线最新案例
另辟蹊径,看大牛如何在CLion中开发HPM6750
LED显示屏用底部填充胶应用案例分析
如何实现模块与模块之间点对点的通信
IOTE 2023深圳国际物联网展圆满结束!落幕不散场,IoT再启数智新希望
深海泰坦X7Ti-S怎么样?深海泰坦X7Ti-S评测:极佳体验的4K屏与机械键盘
北斗星通成立天线BU业务单元
美国真的会脱离中国半导体供应链吗?
AMD 6nm“伦勃朗”APU曝光:Zen3+RDNA2架构、支持DDR5和USB4
分享一个50瓦MOSFET放大器电路
刻蚀机能替代光刻机吗
“超声波焊接”是如何进行焊接密封的
一栋楼和它见证的互联网创业时代
为什么现在智能手机使用Type-C接口的越来越多
电子膨胀阀坏了会怎样_电子膨胀阀怎么测好坏
单片机能代替PLC吗?