0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HPM6750 LVGL刷屏性能再提升?大神網(wǎng)友開辟片內(nèi)新天地

先楫半導(dǎo)體HPMicro ? 2022-07-22 11:19 ? 次閱讀

先楫體驗(yàn)官“RSCN”評(píng)測了HPM6750的coremark跑分后(原文請(qǐng)至EEWORLD搜索RSCN)又出干貨!這次“RSCN”將為我們演示如何優(yōu)化自己手中的HPM6750使它性能提升。

以下正文轉(zhuǎn)自EEWORLD @RSCN

之前的coremark跑分測評(píng)中,在flash和ram運(yùn)行的性能大致一樣,主要的原因還是代碼空間小于32K,這剛好是cache的空間范圍內(nèi),HPM6750有32K ICACHE和32K DCACHE,性能上是最高的,所以跑分上,兩者并沒有太大的差距。

但是,如果代碼空間超過了32K,這時(shí)候cache總會(huì)有用滿的時(shí)候,也會(huì)有不命中的情況下,這時(shí)候需要考慮的正是系統(tǒng)資源和編譯整合利用。

下面以littlevgl的benchmark跑分例子要進(jìn)行性能提升的一個(gè)驗(yàn)證方法,當(dāng)然這僅僅作為參考,并不能決定大多數(shù)應(yīng)用場景。

由于上個(gè)貼子說明了SPI的一點(diǎn)缺陷,會(huì)導(dǎo)致DMA的輔助功能提升并不大,在實(shí)際跑lvgl的時(shí)候,code放在flash,編譯器使用segger,代碼缺省優(yōu)化,也其實(shí)沒優(yōu)化的情況下,生成的代碼如下:

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

那么按照這樣燒錄進(jìn)去,weightied fps大概是120多左右

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

這是有點(diǎn)低了,先從lvgl的配置上去優(yōu)化,lvgl的刷新周期,從30fps最大刷新率改為100fps刷新率,提升上也并不是很大,大概在160左右變動(dòng)。

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

那么開O3優(yōu)化的效果又是如何,再次燒錄進(jìn)去,weightied fps大概是174多左右

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

當(dāng)然也試了以下方法,實(shí)驗(yàn)過程也忘了拍照,但是其實(shí)效果性能并沒有提升多少,也就180左右變動(dòng)

1、改為全尺寸雙緩沖,但是其實(shí)這種對(duì)MCU屏幕有用,對(duì)于SPI屏幕上,效果并沒多少。

2、改為非全尺寸雙緩沖,大概五分之一局部刷新。

3、改為單緩沖局部刷新和單緩沖全尺寸刷新,效果均不大。

于是試著找了官方的技術(shù),放假期間的,技術(shù)也在中午跟著我遠(yuǎn)程調(diào)試了下,換為GCC編譯器,以及開啟了相關(guān)優(yōu)化,優(yōu)化提升也不明顯,大概也是180fps變動(dòng)。

在調(diào)試的過程中,有個(gè)idea讓樓主茅塞頓開,也就是官方技術(shù)建議把中斷isr放在ram運(yùn)行,但實(shí)際提升也不大。

于是樓主照著這個(gè)思路來看下性能有沒有增加,也就是把核心的代碼加載到ram中運(yùn)行。好在HPM6750有足夠的RAM來加載,根據(jù)手冊(cè)可知道,兩核心有SLV各512K,SRAM一共1M,這是足夠加載很多核心代碼。

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

說干就干,在代碼上去實(shí)現(xiàn)的話,可以使用ATTR_RAMFUNC修飾符放在定義的函數(shù)前面,這樣編譯的時(shí)候就會(huì)加載到RAM運(yùn)行。

在實(shí)際調(diào)試中,單純幾個(gè)函數(shù)的修飾并不能解決問題。也不可能去手動(dòng)一個(gè)一個(gè)修飾,好在與SES可以可視化去操作加載。從ATTR_RAMFUNC,Link文件可看到。

ATTR_RAMFUNC是把函數(shù)放在了section的.fast中

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

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

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

于是我們可以參考Link,自己在copy個(gè)link,把fast放在更大的RAM上,也就是SRAM上

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

那么ses如何去加載這些函數(shù)到RAM上了,跟keil類似

右鍵點(diǎn)擊需要加載的文件夾,選擇options

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

選擇code段改為.fast,這樣就可以一次搞定加載所有需要到RAM運(yùn)行的函數(shù)。

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

根據(jù)之前的調(diào)試性能,再加載核心的放在RAM中運(yùn)行,燒錄代碼進(jìn)去,奇跡的時(shí)刻,從122fps提升到286,整整提升了兩倍性能,這已經(jīng)對(duì)于SPI這個(gè)稍微缺陷IP,足夠有幫助了。

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

于此總結(jié):

1、在從代碼優(yōu)化,編譯器優(yōu)化上,可以提高性能。

2、在1的基礎(chǔ)上,隨著代碼空間的增多,32k cache總有用完的時(shí)候,xip flash 也會(huì)有所損失性能,最好就是可以把主要的代碼加載到RAM中運(yùn)行,更可提高性能。

3、除了32K cache的加持,內(nèi)部RAM整合也有足夠2M,對(duì)于系統(tǒng)而言,是足夠性能整合的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5086

    文章

    19141

    瀏覽量

    305925
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    夢芯科技精彩亮相CHINTERGEO 2024

    近日,以“智繪新天地 數(shù)領(lǐng)測繪展未來”為主題的測繪地理信息裝備行業(yè)展會(huì)CHINTERGEO 2024在湖北武漢中國光谷科技會(huì)展中心盛大開幕。
    的頭像 發(fā)表于 11-07 16:32 ?481次閱讀

    如何做一個(gè)hpm6750evk2的bootloader?

    我正在做一個(gè)hpm6750evk2的bootloader。設(shè)計(jì)很簡單,boot工程代碼只做跳轉(zhuǎn)到1M后的APP工程代碼處,APP工程就是做的一個(gè)點(diǎn)燈的程序而已,boot、APP工程都是跑
    發(fā)表于 10-23 19:01

    HPM6750 Bootloader設(shè)計(jì)

    我正在做一個(gè)hpm6750evk2的bootloader。設(shè)計(jì)很簡單,boot工程代碼只做跳轉(zhuǎn)到1M后的APP工程代碼處,APP工程就是做的一個(gè)點(diǎn)燈的程序而已,boot、APP工程都是跑
    發(fā)表于 10-23 18:59

    利用電容測試方法開創(chuàng)鍵合線檢測新天地

    作者:是德科技產(chǎn)品經(jīng)理 Shawn Lee 鍵合線廣泛應(yīng)用于電子設(shè)備、半導(dǎo)體產(chǎn)業(yè)和微電子領(lǐng)域。它能夠?qū)⒓呻娐罚↖C)中的裸與其他電子元器件(如晶體管和電阻器)進(jìn)行連接。鍵合線可在芯片的鍵合焊盤
    的頭像 發(fā)表于 10-21 09:32 ?191次閱讀
    利用電容測試方法開創(chuàng)鍵合線檢測<b class='flag-5'>新天地</b>

    HPM6750evkmini如何實(shí)現(xiàn)可信的執(zhí)行環(huán)境?

    HPM6700的datasheet中的1.2.15 信息安全系統(tǒng)有提到“基于BOOT ROM 的安全啟動(dòng)機(jī)制,支持加密啟動(dòng),支持可信的執(zhí)行環(huán)境”,請(qǐng)問可信的執(zhí)行環(huán)境如何實(shí)現(xiàn)的?有相關(guān)的Demo或者資料嗎?是類似于TFM這樣的嗎?
    發(fā)表于 09-25 09:27

    hpm_manufacturing_tool linux 版本 選擇 hidraw 連接等待超時(shí)

    _manufacturing_tool_gui linux 版本 選擇 hidraw 連接 HPM6750 芯片,能識(shí)別到 hidraw 設(shè)備,單擊連接是提示重啟芯片這個(gè)時(shí)候會(huì)等待超時(shí)然后軟件報(bào)錯(cuò),此時(shí)查看 lsusb 設(shè)備是檢測不到 hpm6750
    發(fā)表于 08-07 16:43

    esp32-s3驅(qū)動(dòng)rgb屏刷屏卡頓,花屏是什么原因?

    esp32-s3驅(qū)動(dòng)rgb屏,根據(jù)test_rgb_panel.c,但是刷屏太卡頓了,運(yùn)行lvgl的demo,fps為0,想請(qǐng)教一下rgb屏參(proch)和esp32-s3的設(shè)置,提高刷屏流暢度
    發(fā)表于 06-19 06:21

    【Vision Board創(chuàng)客營連載體驗(yàn)】RA8D1-Vision Board 移植LVGL8.3驅(qū)動(dòng)庫和觸摸屏驅(qū)動(dòng)代碼

    ,與液晶屏驅(qū)動(dòng)代碼一致: disp_flush函數(shù)中設(shè)置抽象刷屏函數(shù)為描點(diǎn)方式或者G2D加速方式,都可以實(shí)現(xiàn)LVGL刷屏LVGL初始化函數(shù)中設(shè)置
    發(fā)表于 05-13 19:53

    先楫半導(dǎo)體 hpm_sdk v1.5.0 正式發(fā)布

    hpm6750evk hpm6750evk2 hpm6750evkmini hpm6300evk hpm6200evk
    發(fā)表于 04-08 11:14

    先楫HPM5361EVK開發(fā)板,網(wǎng)友測評(píng)效果(二)

    EEWORLD)的支持,本文整理了網(wǎng)友@qinyunti的優(yōu)秀報(bào)告,小伙伴們先睹為快!#1開發(fā)板介紹與視頻HPM5361EVK是基于先楫HPM5300系列高性能RISC
    的頭像 發(fā)表于 03-12 08:16 ?2162次閱讀
    先楫<b class='flag-5'>HPM</b>5361EVK開發(fā)板,<b class='flag-5'>網(wǎng)友</b>測評(píng)效果(二)

    RTThread的定時(shí)器中斷時(shí)間不準(zhǔn)確,會(huì)有us級(jí)的抖動(dòng)的原因?

    我在用hpm6750定時(shí)器,通過定時(shí)器中斷周期處理函數(shù),周期1ms,但是定時(shí)器的每周期時(shí)間都會(huì)飄,會(huì)有us級(jí)的抖動(dòng),我的中斷回調(diào)函數(shù)如下: int us_temp[1000]; int us_idx
    發(fā)表于 02-23 07:09

    HPM6750體驗(yàn)ADC

    1、新建RTT工程,工程中添加對(duì)ADC的驅(qū)動(dòng): 2、保存工程后,添加測試代碼。 3、我們根據(jù)原理圖上的J10接個(gè),只有PE29是ADC3的輸出通道 4、先定義通道、任務(wù) #define ADC_DEV_NAME\"adc3\"/* ADC 設(shè)備名稱 */ #define ADC_DEV_CHANNEL2/* ADC 通道 */ #define REFER_VOLTAGE 330/* 參考電壓 3.3V,數(shù)據(jù)精度乘以100保留2位小數(shù)*/ #define CONVERT_BITS(1 << 16)/* 轉(zhuǎn)換位數(shù)為16位 */ 5、添加任務(wù): 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); } /* 使能設(shè)備 */ 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); /* 轉(zhuǎn)換為對(duì)應(yīng)電壓值 */ vol = value * REFER_VOLTAGE / CONVERT_BITS; rt_kprintf(\"the voltage is :%d.%02d \\\\n\", vol / 100, vol % 100); rt_thread_delay(500); } } 7、在主函數(shù)里啟用任務(wù) 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;
    發(fā)表于 02-17 16:00

    解決HPM6750EVK2jlink下載

    拿到HPM6750EVK2,使用jlink下載時(shí),我原來用買jlink配的20轉(zhuǎn)10轉(zhuǎn)接板進(jìn)行連接,下載程序里一直報(bào)不能連接到開發(fā)板。經(jīng)過查找用手冊(cè)后,找到了問題。 我的jlink的引腳圖與之不對(duì)
    發(fā)表于 02-16 10:30

    先輯HPM6570用Jlink下載程序出錯(cuò)

    as current target interface. J-Link>jtagconf -1 -1 J-Link>exec device=HPM6750xVMx Device
    發(fā)表于 02-16 09:32

    Embedded Studio 編譯器教程

    最近入手先輯的HPM6750,需要使用Embedded Studio 編譯器來做開發(fā),各位推薦一下學(xué)習(xí)資料。
    發(fā)表于 02-04 08:01