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

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

3天内不再提示

HPM6750 LVGL刷屏性能再提升?大神网友开辟片内新天地

先楫半导体HPMicro 2022-07-22 11:19 次阅读

先楫体验官“RSCN”评测了HPM6750的coremark跑分后(原文请至EEWORLD搜索RSCN)又出干货!这次“RSCN”将为我们演示如何优化自己手中的HPM6750使它性能提升。

以下正文转自EEWORLD @RSCN

之前的coremark跑分测评中,在flash和ram运行的性能大致一样,主要的原因还是代码空间小于32K,这刚好是cache的空间范围内,HPM6750有32K ICACHE和32K DCACHE,性能上是最高的,所以跑分上,两者并没有太大的差距。

但是,如果代码空间超过了32K,这时候cache总会有用满的时候,也会有不命中的情况下,这时候需要考虑的正是系统资源和编译整合利用

下面以littlevgl的benchmark跑分例子要进行性能提升的一个验证方法,当然这仅仅作为参考,并不能决定大多数应用场景。

由于上个贴子说明了SPI的一点缺陷,会导致DMA的辅助功能提升并不大,在实际跑lvgl的时候,code放在flash,编译器使用segger,代码缺省优化,也其实没优化的情况下,生成的代码如下:

b51c1710-039c-11ed-9ade-dac502259ad0.png

那么按照这样烧录进去,weightied fps大概是120多左右

b5582e8a-039c-11ed-9ade-dac502259ad0.png

这是有点低了,先从lvgl的配置上去优化,lvgl的刷新周期,从30fps最大刷新率改为100fps刷新率,提升上也并不是很大,大概在160左右变动。

b585787c-039c-11ed-9ade-dac502259ad0.pngb59f55f8-039c-11ed-9ade-dac502259ad0.png

那么开O3优化的效果又是如何,再次烧录进去,weightied fps大概是174多左右

b5bd9676-039c-11ed-9ade-dac502259ad0.png

当然也试了以下方法,实验过程也忘了拍照,但是其实效果性能并没有提升多少,也就180左右变动

1、改为全尺寸双缓冲,但是其实这种对MCU屏幕有用,对于SPI屏幕上,效果并没多少。

2、改为非全尺寸双缓冲,大概五分之一局部刷新。

3、改为单缓冲局部刷新和单缓冲全尺寸刷新,效果均不大。

于是试着找了官方的技术,放假期间的,技术也在中午跟着我远程调试了下,换为GCC编译器,以及开启了相关优化,优化提升也不明显,大概也是180fps变动。

在调试的过程中,有个idea让楼主茅塞顿开,也就是官方技术建议把中断isr放在ram运行,但实际提升也不大。

于是楼主照着这个思路来看下性能有没有增加,也就是把核心的代码加载到ram中运行。好在HPM6750有足够的RAM来加载,根据手册可知道,两核心有SLV各512K,SRAM一共1M,这是足够加载很多核心代码。

b5eb93be-039c-11ed-9ade-dac502259ad0.png

说干就干,在代码上去实现的话,可以使用ATTR_RAMFUNC修饰符放在定义的函数前面,这样编译的时候就会加载到RAM运行。

在实际调试中,单纯几个函数的修饰并不能解决问题。也不可能去手动一个一个修饰,好在与SES可以可视化去操作加载。从ATTR_RAMFUNC,Link文件可看到。

ATTR_RAMFUNC是把函数放在了section的.fast中

b6175e0e-039c-11ed-9ade-dac502259ad0.png

从Link可看到,fast是放在了ILM_SLV的256K空间中

b62d4c00-039c-11ed-9ade-dac502259ad0.png

于是我们可以参考Link,自己在copy个link,把fast放在更大的RAM上,也就是SRAM上

b6445bc0-039c-11ed-9ade-dac502259ad0.png

那么ses如何去加载这些函数到RAM上了,跟keil类似

右键点击需要加载的文件夹,选择options

b658e702-039c-11ed-9ade-dac502259ad0.png

选择code段改为.fast,这样就可以一次搞定加载所有需要到RAM运行的函数。

b6768b90-039c-11ed-9ade-dac502259ad0.png

根据之前的调试性能,再加载核心的放在RAM中运行,烧录代码进去,奇迹的时刻,从122fps提升到286,整整提升了两倍性能,这已经对于SPI这个稍微缺陷IP,足够有帮助了。

b68d26ac-039c-11ed-9ade-dac502259ad0.png

于此总结:

1、在从代码优化,编译器优化上,可以提高性能。

2、在1的基础上,随着代码空间的增多,32k cache总有用完的时候,xip flash 也会有所损失性能,最好就是可以把主要的代码加载到RAM中运行,更可提高性能。

3、除了32K cache的加持,内部RAM整合也有足够2M,对于系统而言,是足够性能整合的。

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

    关注

    5064

    文章

    18992

    浏览量

    302588
收藏 人收藏

    评论

    相关推荐

    梦芯科技精彩亮相CHINTERGEO 2024

    近日,以“智绘新天地 数领测绘展未来”为主题的测绘地理信息装备行业展会CHINTERGEO 2024在湖北武汉中国光谷科技会展中心盛大开幕。
    的头像 发表于 11-07 16:32 351次阅读

    如何做一个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

    【Vision Board创客营连载体验】RA8D1-Vision Board 移植LVGL8.3驱动库和触摸屏驱动代码

    ,与液晶屏驱动代码一致: disp_flush函数中设置抽象刷屏函数为描点方式或者G2D加速方式,都可以实现LVGL刷屏LVGL初始化函数中设置
    发表于 05-13 19:53

    先楫HPM5361EVK开发板,网友测评效果(二)

    EEWORLD)的支持,本文整理了网友@qinyunti的优秀报告,小伙伴们先睹为快!#1开发板介绍与视频HPM5361EVK是基于先楫HPM5300系列高性能RISC
    的头像 发表于 03-12 08:16 1713次阅读
    先楫<b class='flag-5'>HPM</b>5361EVK开发板,<b class='flag-5'>网友</b>测评效果(二)

    HPM6750体验ADC

    1、新建RTT工程,工程中添加对ADC的驱动: 2、保存工程后,添加测试代码。 3、我们根据原理图上的J10接个,只有PE29是ADC3的输出通道 4、先定义通道、任务 #define ADC_DEV_NAME\"adc3\"/* ADC 设备名称 */ #define ADC_DEV_CHANNEL2/* ADC 通道 */ #define REFER_VOLTAGE 330/* 参考电压 3.3V,数据精度乘以100保留2位小数*/ #define CONVERT_BITS(1 << 16)/* 转换位数为16位 */ 5、添加任务: static void Adc_entry(void* paremeter) { rt_adc_device_t adc_dev; rt_uint32_t value,vol; rt_err_t ret = RT_EOK; adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME); if (adc_dev == RT_NULL) { rt_kprintf(\"adc sample run failed! can\'t find %s device!\\\\n\", ADC_DEV_NAME); } /* 使能设备 */ ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL); if(ret == RT_EOK) { rt_kprintf(\"adc sample run success!find %s device!\\\\n\", ADC_DEV_NAME); } while(1) { /* 读取采样值 */ value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL); rt_kprintf(\"the value is :%d \\\\n\", value); /* 转换为对应电压值 */ vol = value * REFER_VOLTAGE / CONVERT_BITS; rt_kprintf(\"the voltage is :%d.%02d \\\\n\", vol / 100, vol % 100); rt_thread_delay(500); } } 7、在主函数里启用任务 Adc_thread = rt_thread_create(\"adc1\", Adc_entry, RT_NULL, 512, 16, 20); if(Adc_thread != RT_NULL) rt_thread_startup(Adc_thread); else return -1;
    发表于 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

    开创数实融合新天地,上海市工商联数字经济商会成立

    1 2月21日, 由西井科技等18家沪上数字经济领军企业共同发起的上海市工商联数字经济商会 正式成立,并召开第一届一次会员大会和“开创数实融合新天地“主题论坛。上海市委常委、统战部部长陈通出席会议
    的头像 发表于 12-22 17:10 373次阅读
    开创数实融合<b class='flag-5'>新天地</b>,上海市工商联数字经济商会成立

    Linux 下编译HPM_Math 工程报错

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

    分享一款独一无二的放大器—FUTEK IAA105

    IAA105是一款独一无二的放大器,在传感器电子领域开辟新天地
    的头像 发表于 12-13 09:14 410次阅读

    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