1.前言 使用先楫,当然就是看上它的高性能,顺便了解了一下晶心d45内核,发现华人都有一个特点,要是掌握了一个mcu的设计精髓,就会尽量多的开掘出更高的性能,更强的外设,继续卷死在行业作威作福的lw。那么拿到先楫开发板,当然要跑跑分,顺便与一众芯片做做比较。
2.生成coremark工程 1.这次选择生成flash里面执行的工程。
> generate_project -b hpm6750evkmini -t flash_xip 2.使用segger embedded studio编译下载,并运行。
好家伙,单核跑出4553分,大家可能只看分数没啥概念,看看常用的芯片跑分对比:
rt1052能跑出3000多分,nxp官方都说是高性能,搞了很多跑分文章,看来已经被秒杀。
stm32f1只能跑出108分。
i.mx6ul跑出1500分。
呼声很高的全志d1可以跑出2240分。
相比之下,先辑这hpm6750可真够优秀的!!
有了这么高的性能,可以写比较复杂的计算或者控制程序了。
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)/* * 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 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运行上述代码,截图如下:
葡萄牙Aptoide与华为洽谈合作事宜 欲成为谷歌的替代者
四川雅安35kv变电站zw7-40.5户外柱上高压真空断路器安装案例
光纤交换机端口故障的排查方法
魅族15Plus确认搭载三星Exynos处理器 可惜性能还是不够
高通在推动汽车行业变革所做的努力
HPM6750EVKMINI开发板生成coremark和FreeRTOS工程
七个不同领域的中国半导体集成电路十强排名
Mini背光电视产业链准备就绪
软方电子RK7120A主板信息介绍
智慧医疗新安全当以什么为基石
苹果供应链在第四季度迎来出货高峰
各类新能源电机优劣对比分析
轨至轨运算放大器
国产晶圆代工双雄,发布业绩报告
移动机器人的机构!移动机器人的分类
安防监控巨头扛不住了!海康威视宣布涨价!芯片涨价已超预期?!
“深视创新”宣布获得千万级人民币Pre-A轮融资
VR体验再升级 Qualcomm推出全新骁龙845移动VR参考设计
苹果开始帮助其供应商进行过渡到可再生能源的尝试
PoW共识机制的优势是什么