本期工具分享来自一名不愿留名的热心先楫粉丝,咱就称大神为 @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 系列的 openocd
- Python3.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)
-
单片机
+关注
关注
6037文章
44557浏览量
635162 -
嵌入式
+关注
关注
5082文章
19123浏览量
305110
发布评论请先 登录
相关推荐
评论