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

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

    关注

    6032

    文章

    44513

    浏览量

    632736
  • 嵌入式
    +关注

    关注

    5068

    文章

    19008

    浏览量

    303038
收藏 人收藏

    评论

    相关推荐

    如何做一个hpm6750evk2的bootloader?

    我正在做一个hpm6750evk2的bootloader。设计很简单,boot工程代码只做跳转到1M后的APP工程代码处,APP工程就是做的一个点灯的程序而已,boot、APP工程都是跑
    发表于 10-23 19:01

    HPM6750 Bootloader设计

    我正在做一个hpm6750evk2的bootloader。设计很简单,boot工程代码只做跳转到1M后的APP工程代码处,APP工程就是做的一个点灯的程序而已,boot、APP工程都是跑
    发表于 10-23 18:59

    hpm_manufacturing_tool linux 版本 选择 hidraw 连接等待超时

    _manufacturing_tool_gui linux 版本 选择 hidraw 连接 HPM6750 芯片,能识别到 hidraw 设备,单击连接是提示重启芯片这个时候会等待超时然后软件报错,此时查看 lsusb 设备是检测不到 hpm6750
    发表于 08-07 16:43

    开发者分享 | 基于先楫RT-Thread BSP,使用CLion开发应用

    本期开发者:朱彦祖RT-Thread资深工程师,HPM6700/6400元老级开发者及骨灰级用户,先辑生态社区常驻优秀开发者,江湖人称杭州吴彦祖。背景最近在使用先辑
    的头像 发表于 06-07 08:17 2628次阅读
    <b class='flag-5'>开发</b>者分享 | 基于先楫RT-Thread BSP,使用<b class='flag-5'>CLion</b><b class='flag-5'>开发</b>应用

    先楫半导体所有开发板已上RT-Thread主线啦

    型号:HPM6750EVKMINIHPM6750EVKHPM6750EVK2HPM6300EVKHPM6200EVKHPM5300EVKHPM5301EVKLITEHPM6800EVK生态共赢基于RT-Thread强大的社区生态和丰富的软件包,各位小伙伴可以实现各类图形图像、网络互联、工业自动化
    的头像 发表于 06-05 08:17 514次阅读
    先楫半导体所有<b class='flag-5'>开发</b>板已上RT-Thread主线啦

    HPM6750体验ADC

    1、新建RTT工程,工程添加对ADC的驱动: 2、保存工程后,添加测试代码。 3、我们根据原理图上的J10接个,只有PE29是ADC3的输出通道 4、先定义通道、任务 #define
    发表于 02-17 16:00

    解决HPM6750EVK2jlink下载

    拿到HPM6750EVK2,使用jlink下载时,我原来用买jlink配的20转10转接板进行连接,下载程序里一直报不能连接到开发板。经过查找用手册后,找到了问题。 我的jlink的引脚图与之不对
    发表于 02-16 10:30

    先辑HPM6570用Jlink下载程序出错

    as current target interface. J-Link>jtagconf -1 -1 J-Link>exec device=HPM6750xVMx Device
    发表于 02-16 09:32

    Embedded Studio 编译器教程

    最近入手先辑的HPM6750,需要使用Embedded Studio 编译器来做开发,各位推荐一下学习资料。
    发表于 02-04 08:01

    如何通过TC377的TIM实现软件正交解码?

    目前项目需要实现正交解码功能,但是GPT12用于正交解码的引脚都没有连接,所以只能是另辟蹊径。目前TC377的用户手册的TIM模块是可以(28.13.1.3 )External capture
    发表于 02-04 06:03

    Linux 下编译HPM_Math 工程报错

    /hpm/hpm_sdk/soc/HPM6750/toolchains/gcc/flash_xip.ld -- Segger device name: HPM6750xVMx -- S
    发表于 12-20 12:54

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

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

    【先楫HPM5361EVK开发板试用体验】-- HPM5361初体验

    cortex-m7级别的芯片国产一直有传说未见身影,奈何只能接受国外品牌漫长的交期和一次次的涨价。 有幸大概在2022年意外接触到了先楫半导体的HPM6750,看到了价格和性能(高主频,高DMIPS)着实
    发表于 11-29 11:26

    硬件电路设计有这么多坑,如何少走弯路?大牛怎么说

    硬件电路设计有这么多坑,如何少走弯路?大牛怎么说
    的头像 发表于 11-27 17:34 604次阅读

    JetBrains推出CLion Nova技术工具

    未来,我们计划将 CLion Nova 并入 CLion Classic。我们不打算推出新产品。” 该公司打算先收集用户反馈,然后在 2024 年的某个时刻根据具体的反馈结果将 CLion Nova 合并到
    的头像 发表于 11-23 10:44 752次阅读
    JetBrains推出<b class='flag-5'>CLion</b> Nova技术工具