0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

另辟蹊径,看大牛如何在CLion中开发HPM6750

先楫半导体HPMicro 2022-09-22 10:20 次阅读

本期工具分享来自一名不愿留名的热心先楫粉丝,咱就称大神为 @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-elfrv官方工具链,需修改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-v5riscv32-elfAndes 工具链,性能最优GitHub - andestech/nds-gnu-toolchain: GNU toolchain for AndesCore

如果不追求使用主线工具链,选择第二、第三种工具链均可。第二种工具链的优势是可以直接下载到工具链包,而 Andes 的工具链优势是性能最佳,两者的 coremark 跑分大约有 20% 的差距(2022.09.15),但是目前尚未提供可直接下载的二进制包。
那么有没有简单不麻烦的配置方式?SEGGER Embedded StudioWindows 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请将以上文件解压并放置在恰当的位置,以便你能够轻易找出它们的路径,一种参考布局如下图所示af1f9502-39e4-11ed-b180-dac502259ad0.png下面,我们需要设置一些环境变量。这些环境变量会由 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_PATHaf308e8e-39e4-11ed-b180-dac502259ad0.png最后,我们更新环境变量并安装一些 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,则选择对应的路径。af39fa6e-39e4-11ed-b180-dac502259ad0.png

2 CMake

打开 CMake 栏,在 CMake Option 中加入下面的语句,并根据你的喜好修改名称,如下所示

-DBOARD=hpm6750evkmini -DCMAKE_BUILD_TYPE=flash_sdram_xipaf4b98fa-39e4-11ed-b180-dac502259ad0.pngHPM_SDK 需要根据开发板类型配置各种编译选项,因此首先需要通过 CMake 给出板子名称。后一项则是选择了 flash_sdram_xip 这一预设内存布局,关于这方面内容,可以参考 hpm6750 手册和相关测评文章。在明白其意义的前提下,你可以根据个人需求对这两项选项进行修改。完成这两步以后,你应该可以编译 coremark 工程了。

3 配置 OpenOCD 路径

打开选项中的嵌入式部署,将 OpenOCD 路径设置为刚刚你所设置的 OpenOCD,注意,只能选用 HPMicro 提供的 OpenOCD,如果你已有在使用的 OpenOCD,又不想更换,可能只能选择其他方式(如命令行)进行下载和调试。af5d4640-39e4-11ed-b180-dac502259ad0.png

4 配置 OpenOCD 目标

点击 Run/Debug Target 窗口,点击 Edit Configureations ..af6908c2-39e4-11ed-b180-dac502259ad0.png点击右上角“+”添加一个 OpenOCD Download & Run,按图示配置 Target、Excutable binary、Debugger 和 Board config file,保存后退出。af804000-39e4-11ed-b180-dac502259ad0.png

5 编译下载和 coremark 跑分

将 hpm6750evkmin 连接到电脑,点击 Run 绿色箭头,程序自行编译下载。af8fdeac-39e4-11ed-b180-dac502259ad0.png打开串口终端,获得 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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6006

    文章

    44027

    浏览量

    622081
  • 嵌入式
    +关注

    关注

    4993

    文章

    18365

    浏览量

    290130
收藏 人收藏

    评论

    相关推荐

    RT_thread studio如何配置先辑的hpm_math数学库?

    hpm6750不知道如何在RTThread studio中使用hpm_math的数学库,想要使用libdspf.a,但是不知道如何配置
    发表于 12-06 18:32

    【深度测评】HPM6750 MCU片内16位ADC精度测试

    【深度测评】HPM6750 MCU片内16位ADC精度测试
    的头像 发表于 10-30 17:43 2009次阅读
    【深度测评】<b class='flag-5'>HPM6750</b> MCU片内16位ADC精度测试

    想找一个先楫半导体的HPM6750 使用linux剪裁操作系统的例程

    想找一个先楫半导体的HPM6750 使用linux剪裁操作系统的例程,SDK里给了FREERT的,没有LINUX的。哪里可以下载的到?
    发表于 10-25 16:18

    HPM6750 从 XPI0 CB 端口启动

    XPI0CA端口的引脚,如下图所示。所以最后选择了XPI0的CB端口用于连接NORFlash。部分引脚复用功能(来源:HPM6750数据手册)XPI部分原理图2问题在HP
    的头像 发表于 10-21 08:18 536次阅读
    <b class='flag-5'>HPM6750</b> 从 XPI0 CB 端口启动

    HPM6750 ADC EVK用户使用手册

    电子发烧友网站提供《HPM6750 ADC EVK用户使用手册.pdf》资料免费下载
    发表于 09-19 15:46 0次下载
    <b class='flag-5'>HPM6750</b> ADC EVK用户使用手册

    HPM6750HPM6450是PIN to PIN的吗?

    相同的封装,HPM6750HPM6450是PINto PIN的吗?
    发表于 06-08 08:27

    请问使用eMMC时, HPM6750支持的最大容量和速率是多少?

    请问使用eMMC时, HPM6750支持的最大容量 和速率是多少? 谢谢!
    发表于 05-26 08:12

    两个HPM6750之间是否可以通过IO进行并行通信?通信案例有吗?

    两个HPM6750之间是否可以通过IO进行并行通信?通信案例有吗
    发表于 05-26 08:02

    使用HPM6750的PE00~PE31,是否能在GPIOE的状态寄存器及时读取到ADC发送的数据呢?

    我想使用HPM6750的PE00~PE31,连接4路200MHz的高速8位AD。不太明白这里标识为快速或普通的IO具体有什么差别,我是否能在GPIOE的状态寄存器及时读取到ADC发送的数据呢?
    发表于 05-26 07:42

    HPM6750手册中支持256MB,但是地址线只有13位,是否支持扩展到256MB?

    HPM6750手册中支持256MB,但是地址线只有13位. 是否支持扩展到256MB?
    发表于 05-26 07:24

    请问HPM6750能不能接MCU接口的液晶?

    请问 HPM6750能不能接MCU接口的液晶? 如果能接,能不能给个示意图,手册里没有提到对MCU接口的液晶接法,谢谢
    发表于 05-26 07:15

    HPM6750的4个CANFD以及USB HS能一起运行吗?

    HPM6750 的4个CANFD以及USB HS能一起运行吗,这样就能做个CANFD采集盒了,不知道是否可行?
    发表于 05-26 07:07

    请问HPM6750芯片的湿度敏感等级,***,是多少啊?

    请问HPM6750芯片的湿度敏感等级,***,是多少啊? 在资料里面没有找到相关的描述。 谢谢!
    发表于 05-26 06:23

    HPM6750有没有开启LV_USE_GPU_HPM_PDMA的例程?

    HPM6750, 有没有开启LV_USE_GPU_HPM_PDMA的例程? 现有例程启用 LV_USE_GPU_HPM_PDMA后无法正常运行lvgl的demo, 显示异常. 另外: 编译
    发表于 05-26 06:14

    HPM6750EVK/HPM6750EVKMINI调试失败的原因及其解决办法

    。 2Bootpin配置 HPM6750的boot pin配置也有可能会影响到芯片调试。建议如果发生调试失败,可以尝试调整boot pin配置如下: BOOT0 = 0,BOOT1=1 避免
    发表于 05-26 06:06