国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

采用一種比較粗暴的方法解決lvgl切換screen時(shí)候造成的卡死問題/LVGL/stm32/內(nèi)存

這篇具有很好參考價(jià)值的文章主要介紹了采用一種比較粗暴的方法解決lvgl切換screen時(shí)候造成的卡死問題/LVGL/stm32/內(nèi)存。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

最近有個(gè)項(xiàng)目在做基于stm32h7的交互界面制作,大概需要通過lvgl圖形庫做11個(gè)界面加上一堆控件(可以看一下下面的圖,只能說真不少),然后就出現(xiàn)了燒錄程序后,就會(huì)出現(xiàn)白屏(大概率就是卡死了),一開始想簡化一下頁面,注釋了幾個(gè)(治標(biāo)不治本,所以再找了別的方法后面),但又會(huì)出現(xiàn)切換幾次頁面就卡死的情況。。。于是才注意到內(nèi)存泄露問題,查了好幾個(gè)文檔,也沒看太懂,就采用了一個(gè)比較粗暴的方式暫時(shí)先把問題解決了(目前11個(gè)頁面瘋狂切換不會(huì)卡死),之后有時(shí)間再研究一下更專業(yè)的方法,先分享一下這個(gè)比較粗暴的方法哈哈哈。

解決問題1:開機(jī)白屏

解決問題2:切換頁面卡死

采用一種比較粗暴的方法解決lvgl切換screen時(shí)候造成的卡死問題/LVGL/stm32/內(nèi)存,stm32,嵌入式硬件,單片機(jī),人機(jī)交互

一、開機(jī)白屏

這個(gè)主要是內(nèi)存不太夠,直接初始化完內(nèi)存就爆了所以白屏了,這部分解決的辦法我是采用了外部的sdram來存儲(chǔ)(不過正點(diǎn)原子說不推薦哈,但由于內(nèi)存爆了實(shí)在沒辦法哈哈哈)

具體的操作:

可以參考正點(diǎn)原子的視頻:第9講 基礎(chǔ)篇-LVGL移植(外部SRAM)_嗶哩嗶哩_bilibili

1、由于阿波羅板子自帶sdram,所以就省去了移植。直接可以在(我是基于正點(diǎn)原子的例程:實(shí)驗(yàn)31 觸摸屏實(shí)驗(yàn)來搭建的),可以看到在HARDWARE里面有sdram.c,同時(shí)例程main.c寫好了SDRAM_Init();? ?所以基本的環(huán)境都做好了,直接可以操作了

采用一種比較粗暴的方法解決lvgl切換screen時(shí)候造成的卡死問題/LVGL/stm32/內(nèi)存,stm32,嵌入式硬件,單片機(jī),人機(jī)交互

采用一種比較粗暴的方法解決lvgl切換screen時(shí)候造成的卡死問題/LVGL/stm32/內(nèi)存,stm32,嵌入式硬件,單片機(jī),人機(jī)交互

2、進(jìn)入sdram.c,右鍵選擇Toggle Header/Code File跳轉(zhuǎn)到sdram.h文件(也可以直接打開哈)

采用一種比較粗暴的方法解決lvgl切換screen時(shí)候造成的卡死問題/LVGL/stm32/內(nèi)存,stm32,嵌入式硬件,單片機(jī),人機(jī)交互

3、復(fù)制SDRAM開始地址采用一種比較粗暴的方法解決lvgl切換screen時(shí)候造成的卡死問題/LVGL/stm32/內(nèi)存,stm32,嵌入式硬件,單片機(jī),人機(jī)交互

4、打開lv_conf.h文件,修改LV_MEM_ADR=0為這一串代碼如下圖。?LV_MEM_ADR == (0XC0000000+1280*800*2),其中1280*800*2是因?yàn)長CD所需的緩存數(shù)組大小為1280*800,同時(shí)u16兩個(gè)字節(jié)所以乘2(就是sdram要把這部分大小留給lcd緩存數(shù)組,所以需要對內(nèi)存地址進(jìn)行偏移)采用一種比較粗暴的方法解決lvgl切換screen時(shí)候造成的卡死問題/LVGL/stm32/內(nèi)存,stm32,嵌入式硬件,單片機(jī),人機(jī)交互采用一種比較粗暴的方法解決lvgl切換screen時(shí)候造成的卡死問題/LVGL/stm32/內(nèi)存,stm32,嵌入式硬件,單片機(jī),人機(jī)交互5、把內(nèi)存大小修改的更合適,我原本大概是幾十,直接擴(kuò)大到300就完全夠了采用一種比較粗暴的方法解決lvgl切換screen時(shí)候造成的卡死問題/LVGL/stm32/內(nèi)存,stm32,嵌入式硬件,單片機(jī),人機(jī)交互

6、燒錄,不再白屏了

二、切換頁面卡死

1、打開ui.c仔細(xì)看下面這個(gè)代碼,也就是在按下button29的時(shí)候會(huì)觸發(fā)事件切換頁面,對應(yīng)切換頁面的代碼是:

 _ui_screen_change(ui_Screen3, LV_SCR_LOAD_ANIM_FADE_ON, 500, 0);

采用一種比較粗暴的方法解決lvgl切換screen時(shí)候造成的卡死問題/LVGL/stm32/內(nèi)存,stm32,嵌入式硬件,單片機(jī),人機(jī)交互

可以看這個(gè)切換頁面函數(shù)內(nèi)容是什么(在ui_helpers.c文件內(nèi)):

可以看到切換頁面時(shí)候,并沒有清除上個(gè)頁面的東西,所以頁面切換多了占得內(nèi)存就多了。

所以要想辦法在切換頁面時(shí)候,清除上個(gè)頁面的東西。

void _ui_screen_change(lv_obj_t * target, lv_scr_load_anim_t fademode, int spd, int delay)
{   lv_scr_load_anim(target, fademode, spd, delay, false);
}

一開始我看有文檔說把false改成true就可以自動(dòng)清除了,但我試了一下效果不是很理想,所以采用下述方式。

2、清除對象有關(guān)的函數(shù)介紹

可以參考這個(gè)視頻,介紹的也很清楚

4.3-LVGL基礎(chǔ)知識--創(chuàng)建對象與刪除對象_嗶哩嗶哩_bilibili

最后采用了lv_obj_clean(lv_obj_t*obj)這個(gè)函數(shù)會(huì)比較方便。

3、修改_ui_screen_change函數(shù)

主要就是做一個(gè)清除再顯示的操作。

首先創(chuàng)建對象,然后獲取當(dāng)前活動(dòng)的屏幕的對象,之后刪除該對象(上面的控件會(huì)一起刪掉)

  lv_obj_t * act_scr = lv_scr_act();
	  lv_obj_clean(act_scr);

然后判斷要切到的頁面是什么,由于每次都刪除了上一個(gè)頁面,所以需要重新初始化(記得在ui_helpers.c內(nèi)包含ui.h頭文件哈),然后采用顯示界面的函數(shù)~就OK啦。為什么不用原來?lv_scr_load_anim(target, fademode, spd, delay, false);這個(gè),我也不知道,實(shí)測了發(fā)現(xiàn)用這個(gè)不行。。。后續(xù)再對比一下看看嘿嘿。

	if (target == ui_Screen1)
	{
	  ui_Screen1_screen_init();
    lv_disp_load_scr(ui_Screen1);
	}

?完整代碼:

void _ui_screen_change(lv_obj_t * target, lv_scr_load_anim_t fademode, int spd, int delay)
{
	  lv_obj_t * act_scr = lv_scr_act();
	  lv_obj_clean(act_scr);
	if (target == ui_Screen1)
	{
	  ui_Screen1_screen_init();
      lv_disp_load_scr(ui_Screen1);
	}
		if (target == ui_Screen2)
	{
	  ui_Screen2_screen_init();
      lv_disp_load_scr(ui_Screen2);
	}
			if (target == ui_Screen3)
	{
	    ui_Screen3_screen_init();
       lv_disp_load_scr(ui_Screen3);
	}
	
			if (target == ui_Screen4)
	{
	    ui_Screen4_screen_init();
		 lv_disp_load_scr(ui_Screen4);
	}
	
			if (target == ui_Screen5)
	{
        ui_Screen5_screen_init();
		 lv_disp_load_scr(ui_Screen5);
	}
	
			if (target == ui_Screen6)
	{
	    ui_Screen6_screen_init();
      lv_disp_load_scr(ui_Screen6);
	}
	
			if (target == ui_Screen7)
	{
	    ui_Screen7_screen_init();
    lv_disp_load_scr(ui_Screen7);
	}
	

}

歡迎大家交流~文章來源地址http://www.zghlxwxcb.cn/news/detail-839592.html

到了這里,關(guān)于采用一種比較粗暴的方法解決lvgl切換screen時(shí)候造成的卡死問題/LVGL/stm32/內(nèi)存的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 關(guān)于小程序如何長按復(fù)制長文本的方法(比較簡單的一種)

    在我們開發(fā)小程序時(shí),可能會(huì)遇到一些場景,需要你復(fù)制彈框中的鏈接到手機(jī)瀏覽器中訪問。 方法如下: 1.首先需要一個(gè)view盒子,添加css屬性word-break:?break-all;這個(gè)是自動(dòng)換行用的避免文本過長跑出盒子外。 2.在上面的view盒子中包一個(gè)text長文本,并設(shè)置屬性selectable=\\\"true\\\"?user-sele

    2024年02月15日
    瀏覽(22)
  • 一種實(shí)現(xiàn)Spring動(dòng)態(tài)數(shù)據(jù)源切換的方法 | 京東云技術(shù)團(tuán)隊(duì)

    一種實(shí)現(xiàn)Spring動(dòng)態(tài)數(shù)據(jù)源切換的方法 | 京東云技術(shù)團(tuán)隊(duì)

    不在現(xiàn)有查詢代碼邏輯上做任何改動(dòng),實(shí)現(xiàn)dao維度的數(shù)據(jù)源切換(即表維度) 節(jié)約bdp的集群資源。接入新的寬表時(shí),通常uat驗(yàn)證后就會(huì)停止集群釋放資源,在對應(yīng)的查詢服務(wù)器uat環(huán)境時(shí)需要查詢的是生產(chǎn)庫的表數(shù)據(jù)(uat庫表因?yàn)閎dp實(shí)時(shí)任務(wù)停止,沒有數(shù)據(jù)落入),只進(jìn)行服務(wù)

    2024年02月10日
    瀏覽(20)
  • unity多個(gè)物體多種材質(zhì)切換效果實(shí)現(xiàn)方法(方法比較笨,還有不足之處多多指導(dǎo))

    unity多個(gè)物體多種材質(zhì)切換效果實(shí)現(xiàn)方法(方法比較笨,還有不足之處多多指導(dǎo))

    多種材質(zhì)切換:獲取物體的MeshRenderer組件上所有的材質(zhì)球,并將其存放到數(shù)組中;創(chuàng)建另一個(gè)數(shù)組存放需要新材質(zhì)球,通過循環(huán)遍歷將將需要替換的材質(zhì)球存放在創(chuàng)建好的數(shù)組內(nèi)。 比如說同時(shí)給象棋的棋盤和棋子切換不同材質(zhì),具體步驟如下: 1.分別導(dǎo)入棋盤、棋子模型;黑

    2024年02月17日
    瀏覽(17)
  • ESP32在Arduino框架下采用SPI或8bit并口方式使用LVGL(v8.3)

    ESP32在Arduino框架下采用SPI或8bit并口方式使用LVGL(v8.3)

    小相機(jī),按一下能拍照,并將照片保存在sd卡中。 使用的時(shí)VSCode+PlatformIO進(jìn)行開發(fā)(強(qiáng)力推薦,用了就回不去了),當(dāng)然也可以使用ArduinoIDE進(jìn)行開發(fā)。 具體怎么使用上述軟件,網(wǎng)上有很多答案,可以自行查找。 ESP-IDF移植教程:點(diǎn)擊這里 使用到的庫: TFT_eSPI 和 lvgl 注: 8bi

    2024年02月05日
    瀏覽(43)
  • 一種采用KeePass+自建webdav服務(wù)的密碼管理方案

    一種采用KeePass+自建webdav服務(wù)的密碼管理方案

    出于密碼管理需求,查找了幾種密碼方案,發(fā)現(xiàn)KeePass+堅(jiān)果云+keepass2android是大家反饋比較好的一種,支持電腦手機(jī)同步管理密碼,深入使用后發(fā)現(xiàn)體驗(yàn)還不錯(cuò),恰巧本身有公網(wǎng)ip,遂決定自建webdav服務(wù)來進(jìn)行密碼管理,進(jìn)一步把安全掌握在自己手里。 需要有一臺已經(jīng)安裝了

    2024年02月11日
    瀏覽(14)
  • lvgl實(shí)現(xiàn)動(dòng)態(tài)切換橫豎屏

    lvgl實(shí)現(xiàn)動(dòng)態(tài)切換橫豎屏

    有兩種方式。一種是通過lvgl自帶的軟件選擇。但是這個(gè)效率很慢。而且只支持90度、180度、270度的旋轉(zhuǎn)。不一定達(dá)到想要的效果。我需要實(shí)現(xiàn)的是這種效果。軟件旋轉(zhuǎn)沒有辦法實(shí)現(xiàn)。旋轉(zhuǎn)后會(huì)鏡像過去。而且如果你的屏幕不是等比例的。比如240*240? 320*320軟件旋轉(zhuǎn)270度或者9

    2024年02月12日
    瀏覽(20)
  • 云計(jì)算采用的各種虛擬化技術(shù)比較

    KVM 是一個(gè)全虛擬化的解決方案??梢栽?x86 架構(gòu)的計(jì)算機(jī)上實(shí)現(xiàn)虛擬化功能。但 KVM 需要 CPU 中虛擬化功能的支持,只可在具有虛擬化支持的 CPU 上運(yùn)行,即具有 VT 功能的 Intel CPU 和具有 AMD-V 功能的 AMD CPU。 Xen 也是 Linux 下的一個(gè)虛擬化解決方案,也將很快被編入內(nèi)核中。Xen

    2024年02月01日
    瀏覽(28)
  • LVGL學(xué)習(xí)(5):物理按鍵切換焦點(diǎn)之焦點(diǎn)保存和恢復(fù)

    最近在做的項(xiàng)目用到了LVGL,基于實(shí)際產(chǎn)品使用的特殊情況,屏幕沒有接觸摸屏,而是使用物理按鍵來控制所有的object,而且硬件上只有四個(gè)按鍵,功能分別是:返回、左/上、右/下和確定,在切換界面的過程中,也引出了一個(gè)焦點(diǎn)切換問題。

    2024年02月08日
    瀏覽(250)
  • 服務(wù)器無法調(diào)用gym中的render,采用Monitor保存視頻的方法解決

    由于服務(wù)器上沒有圖形化界面,所以在調(diào)用gym中的 render() 函數(shù)時(shí),會(huì)報(bào)錯(cuò) pyglet.canvas.xlib.NoSuchDisplayException: Cannot connect to \\\"None\\\" 。 思路是:把視頻保存下來,下載到本地再看。 直接調(diào)用 gym.wrappers.Monitor 把視頻保存到本地 代碼示例如下: outdir 為視頻保存路徑; video_callable 表

    2023年04月09日
    瀏覽(23)
  • LVGL筆記(6)-電子相冊使用手勢切換圖片(windows仿真)

    今天看了一下lvgl的EVENT枚舉,有一個(gè)事件 LV_EVENT_GESTURE 是響應(yīng)手勢滑屏的,就把電子相冊的按鍵改為手勢操作。 參考文章: 1.作者:weixin_46964996,文章: LVGL 的 LV_EVENT_GESTURE 2.我自己的文章: LVGL筆記(2)-電子相冊(windows模擬和ESP32-S3) 先看看效果: 手勢滑動(dòng)相冊 這個(gè)lvgl的事

    2024年02月11日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包