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

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

3天内不再提示

HPM6750EVKMINI开发板生成coremark和FreeRTOS工程

Evanee 来源:Evanee 作者:Evanee 2022-06-20 09:25 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1.前言

使用先楫,当然就是看上它的高性能,顺便了解了一下晶心D45内核,发现华人都有一个特点,要是掌握了一个mcu的设计精髓,就会尽量多的开掘出更高的性能,更强的外设,继续卷死在行业作威作福的lw。那么拿到先楫开发板,当然要跑跑分,顺便与一众芯片做做比较。

2.生成coremark工程

1.这次选择生成flash里面执行的工程。

> generate_project -b hpm6750evkmini -t flash_xip

2.使用SEGGER Embedded Studio编译下载,并运行。

poYBAGKtU6OALFTFAAIyOuE6REY884.png

好家伙,单核跑出4553分,大家可能只看分数没啥概念,看看常用的芯片跑分对比:

rt1052能跑出3000多分,nxp官方都说是高性能,搞了很多跑分文章,看来已经被秒杀。

STM32F1只能跑出108分。

i.mx6ul跑出1500分。

呼声很高的全志D1可以跑出2240分。

相比之下,先辑这HPM6750可真够优秀的!!

pYYBAGKtU6OAYE2XAAFzmnCFsYE831.png

有了这么高的性能,可以写比较复杂的计算或者控制程序了。

3.生成FreeRTOS工程

有了高性能还不够,需要加上RTOS,高性能才能被充分利用。仍然借助SDK例子。

start_cmd.cmd进入\sdk_env_v0.11.0\hpm_sdk\samples\rtos

> generate_project -b hpm6750evkmini -t flash_xip

4.代码分析

使用使用SEGGER Embedded Studio打开,并对代码进行简单修改。freertos建立task,运行task代码分析不再赘述。


#include "FreeRTOS.h"
#include "task.h"


#include 
#include "board.h"
#include "hpm_gpio_drv.h"

#define task1_PRIORITY    (configMAX_PRIORITIES - 5U)
#define task2_PRIORITY    (configMAX_PRIORITIES - 4U)

volatile bool led_on;

static void task1(void *pvParameters)
{
    for (;;) {

        printf("LED is %s.\n", led_on ? "on" : "off");
        vTaskDelay(1000);
    }
}

static void task2(void *pvParameters)
{
    for (;;) {

        gpio_toggle_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN);
        printf("task2: Toggle the led pin level\n");
        led_on = !led_on;
        vTaskDelay(1000);
    }
}

int main(void)
{
    board_init();
    board_init_gpio_pins();

    gpio_set_pin_output(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN);
    gpio_write_pin(BOARD_LED_GPIO_CTRL, BOARD_LED_GPIO_INDEX, BOARD_LED_GPIO_PIN, BOARD_LED_ON_LEVEL);

    led_on = true;

    if (xTaskCreate(task1, "task1", configMINIMAL_STACK_SIZE + 256U, NULL, task1_PRIORITY, NULL) != pdPASS) {
        printf("Task1 creation failed!.\n");
        for (;;) {
            ;
        }
    }
    if (xTaskCreate(task2, "task2", configMINIMAL_STACK_SIZE + 256U, NULL, task2_PRIORITY, NULL) != pdPASS) {
        printf("Task2 creation failed!.\n");
        for (;;) {
            ;
        }
    }
    vTaskStartScheduler();
    for (;;) {
        ;
    }
    return 0;
}

这里顺便分析一下gpio的初始化方法:


/**************************************************************
	主要分析一下main函数中的gpio初始化函数
***************************************************************/
board_init_gpio_pins();

/**************************************************************
	函数原型在board.c中定义
***************************************************************/
void board_init_gpio_pins(void)
{
    init_gpio_pins();
}
//borad.c中定义
void init_gpio_pins(void)
{
    uint32_t pad_ctl = IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1);

    /* Green LED*/
    HPM_IOC->PAD[IOC_PAD_PB18].FUNC_CTL = IOC_PB18_FUNC_CTL_GPIO_B_18;
    HPM_IOC->PAD[IOC_PAD_PB18].PAD_CTL = pad_ctl;

}

/**************************************************************
	寄存器配置宏命令
***************************************************************/
/*
 * PS (RW)
 *
 * pull select
 * 0: pull down
 * 1: pull up
 */
#define IOC_PAD_PAD_CTL_PS_MASK (0x800U)
#define IOC_PAD_PAD_CTL_PS_SHIFT (11U)
#define IOC_PAD_PAD_CTL_PS_SET(x) (((uint32_t)(x) << IOC_PAD_PAD_CTL_PS_SHIFT) & IOC_PAD_PAD_CTL_PS_MASK)
#define IOC_PAD_PAD_CTL_PS_GET(x) (((uint32_t)(x) & IOC_PAD_PAD_CTL_PS_MASK) >> IOC_PAD_PAD_CTL_PS_SHIFT)

/*
 * PE (RW)
 *
 * pull enable
 * 0: pull disable
 * 1: pull enable
 */
#define IOC_PAD_PAD_CTL_PE_MASK (0x10U)
#define IOC_PAD_PAD_CTL_PE_SHIFT (4U)
#define IOC_PAD_PAD_CTL_PE_SET(x) (((uint32_t)(x) << IOC_PAD_PAD_CTL_PE_SHIFT) & IOC_PAD_PAD_CTL_PE_MASK)
#define IOC_PAD_PAD_CTL_PE_GET(x) (((uint32_t)(x) & IOC_PAD_PAD_CTL_PE_MASK) >> IOC_PAD_PAD_CTL_PE_SHIFT)

/**************************************************************
	寄存器地址
***************************************************************/
/* IOC base address */
#define HPM_IOC_BASE (0xF4040000UL)
/* IOC base pointer */
#define HPM_IOC ((IOC_Type *) HPM_IOC_BASE)

/**************************************************************
	寄存器结构体定义
***************************************************************/
typedef struct {
    struct {
        __RW uint32_t FUNC_CTL;                /* 0x0: ALT SELECT */
        __RW uint32_t PAD_CTL;                 /* 0x4: PAD SETTINGS */
    } PAD[492];
} IOC_Type;

/**************************************************************
	gpio复用定义
***************************************************************/
/* IOC_PB18_FUNC_CTL function mux definitions */
#define IOC_PB18_FUNC_CTL_GPIO_B_18            IOC_PAD_FUNC_CTL_ALT_SELECT_SET(0)
#define IOC_PB18_FUNC_CTL_UART1_CTS            IOC_PAD_FUNC_CTL_ALT_SELECT_SET(3)
#define IOC_PB18_FUNC_CTL_CAN1_RXD             IOC_PAD_FUNC_CTL_ALT_SELECT_SET(7)
#define IOC_PB18_FUNC_CTL_DAOL_N               IOC_PAD_FUNC_CTL_ALT_SELECT_SET(10)
#define IOC_PB18_FUNC_CTL_DRAM_DQ_25           IOC_PAD_FUNC_CTL_ALT_SELECT_SET(12)
#define IOC_PB18_FUNC_CTL_PWM1_P_1             IOC_PAD_FUNC_CTL_ALT_SELECT_SET(16)
#define IOC_PB18_FUNC_CTL_XPI_SLV_ADQ_31       IOC_PAD_FUNC_CTL_ALT_SELECT_SET(30)

可见,risc-v处理器的寄存器配置套路是非常清楚的,和arm思路相同,步骤大同小异~~~~~

使用ide进行debug运行上述代码,截图如下:

pYYBAGKtWPuAErHfAAKQtSkDftg702.png

审核编辑:汤梓红

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

    关注

    147

    文章

    18646

    浏览量

    388320
  • 开发板
    +关注

    关注

    25

    文章

    6146

    浏览量

    113851
  • FreeRTOS
    +关注

    关注

    14

    文章

    497

    浏览量

    66395
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【瑞萨RA6E2地奇星开发板试用】+ 5.瑞萨RA6E2地奇星开发板coremark跑分测试313分

    瑞萨RA6E2地奇星开发板这款开发板性能很强的,是ARM cortex M33内核,主频200MHZ,Flash 256KB,40-KB SRAM,这可比STM32的F4都要强不少,因此特别想测试
    发表于 12-09 17:18

    开发者分享 | HPM5E-EC-DEV:基于HPM5E00的EtherCAT开发板分享

    Azure一名业余单片机爱好者,平时喜欢折腾各种开发板和新出的MCU。本职工作是一名软件工程师,日常主要从事软件应用开发,更多是和系统、应用打交道。相比工作里的软件世界,更喜欢在业余时间动手做一些
    的头像 发表于 10-29 10:15 876次阅读
    <b class='flag-5'>开发</b>者分享 | <b class='flag-5'>HPM</b>5E-EC-DEV:基于<b class='flag-5'>HPM</b>5E00的EtherCAT<b class='flag-5'>开发板</b>分享

    HPM5E00EVK,ecat_io例程,卡在DisableSyncManChannel函数

    ,操作到步骤 “12.3.5.5 更新EEPROM”时,没有扫描到设备。 程序已经下载并运行,但是貌似程序停在上图的语句中,无法从do while循环里出来。 此时,开发板ethercat IN网口
    发表于 09-25 15:06

    hpm的vscode开发环境搭建openocd烧录问题求解

    最近尝试搭建基于vscode的hpm芯片开发环境,遇到一些问题,求大佬们帮忙看看。 使用hpm6e00evk开发板sdk_env_1.10.0,cmake、ninja、openocd和
    发表于 09-09 09:55

    HPM monitor studio 只能在 hpm芯片+hpm_sdk 的组合下才能用吗?

    使用 hpm6200evk开发板,但未使用hpm_sdk。 然后编译的固件elf无法在hpm monitor studio解析成功。所以说必须要使用
    发表于 08-28 09:36

    【GM-3568JHF开发板免费体验】GM-3568JHF的coremark跑分5007分

    下来 1。首先连接putty通过串口进入开发板命令行窗口 上电启动如下 等一段时间后,会进入OS系统 先看看gcc版本 gcc -v 输入ls,可以看到coremark已经下载完成 使用cd
    发表于 07-22 17:32

    HPM6P41 BuckBoost 开发板之(一)硬件设计篇

    本章基于HPM6P00的丰富外设与高性能特性,剖析了四开关BuckBoost开发板的硬件设计思路与实现细节。从宽范围输入/输出电压的功率拓扑选型,到电源管理、驱动电路、采样电路及各类接口的原理图
    的头像 发表于 06-30 11:14 3275次阅读
    <b class='flag-5'>HPM</b>6P41 BuckBoost <b class='flag-5'>开发板</b>之(一)硬件设计篇

    【新品】远距离图传数传模块开发板、蓝牙模块开发板、无线模块开发板

    新品上市图传数传模块开发板蓝牙模块开发板国产无线模块开发板部分型号参与送样文末了解详情↓↓↓EWT611-900NW20S远距离图传数传模块开发板EWT611-900NW20S是一款入
    的头像 发表于 06-12 19:33 927次阅读
    【新品】远距离图传数传模块<b class='flag-5'>开发板</b>、蓝牙模块<b class='flag-5'>开发板</b>、无线模块<b class='flag-5'>开发板</b>

    【RA-Eco-RA4M2开发板评测】RA-Eco-RA4M2 移植FreeRTOS

    1 前言 基于瑞萨的MCU移植FreeRTOS很简单,只需简单配置即可生成FreeRTOS工程。笔者这里使用Renesas RA Smart Configurator和Keil5
    发表于 05-03 23:24

    来自资深工程师对ELF 2开发板的产品测评

    来自资深工程师对ELF 2开发板的使用测评
    的头像 发表于 04-28 15:03 1554次阅读
    来自资深<b class='flag-5'>工程</b>师对ELF 2<b class='flag-5'>开发板</b>的产品测评

    重磅更新 | 先楫半导体HPM_SDK v1.9.0 发布

    版本更新概况[New]增加HPM6P00系列MCU以及hpm6p00evk支持[New]增加了开发板已知问题说明[Update]将全系列开发板VCore电压调节至1.275V,
    的头像 发表于 04-02 08:31 854次阅读
    重磅更新 | 先楫半导体<b class='flag-5'>HPM</b>_SDK v1.9.0 发布

    CubeMX生成freertos工程没有代码提示是怎么回事?

    使用Cube生成freertos工程没有代码提示功能,使用该函数一次后才会有该函数的代码提示功能,生成裸机工程就有。
    发表于 03-13 08:18

    STM32MP25x开发板Bring Up培训课程(中)

    STM32MP25x开发板BringUp培训课程(上)米尔基于STM32MP257核心开发板2.修改设备树查看生成的Bringup工程
    的头像 发表于 02-20 08:06 901次阅读
    STM32MP25x<b class='flag-5'>开发板</b>Bring Up培训课程(中)

    基于HPM_SDK_ENV开发应用程序的升级处理

    )以及工程创建工具等文件。用户基于HPM_SDK_ENV开发自己的应用程序时需要考虑如何维护板级配置文件和应用程序文件的问题。以下3种维护方式:用户将自己的级配置文
    的头像 发表于 02-08 13:38 1458次阅读
    基于<b class='flag-5'>HPM</b>_SDK_ENV<b class='flag-5'>开发</b>应用程序的升级处理

    【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分

    收到敏矽微ME32G070分开发板有3天了,一直想知道这个MCU的性能怎样?就像平时买新电脑后,就会用鲁大师来测个分数,今天我就使用coremark来测试下敏矽微ME32G070这款MCU的分数能力
    发表于 12-19 12:09