最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

龍芯+RT-Thread+LVGL實(shí)戰(zhàn)筆記(1)——從移植開始

2023-08-30 23:18 作者:都叫我老耿  | 我要投稿

????????過去的大半年時(shí)間,一直帶著學(xué)生備戰(zhàn)全國(guó)職業(yè)院校技能大賽“嵌入式系統(tǒng)應(yīng)用開發(fā)”賽項(xiàng)。由于是首次參加該賽項(xiàng),很多東西都是從0到1的摸索和積累,最后的成績(jī)自然也不甚理想。作為指導(dǎo)教師,備賽期間除了給予學(xué)生必要的指導(dǎo),自己也花了不少精力研究了大賽指定的龍芯1B200嵌入式開發(fā)板,并嘗試使用RT-Thread操作系統(tǒng)LVGL圖形組件,實(shí)現(xiàn)了樣題的幾十項(xiàng)任務(wù),大大小小的版本也寫了30多個(gè),也算磕出點(diǎn)名堂了,見圖1~圖3。

圖1 ?帶兩級(jí)任務(wù)按鈕菜單和部分功能(密碼鎖)的效果
圖2 ?自己編寫的不同功能的版本(V1.0~V7.6)
圖3 ?自己編寫的工程文件(約8000行)

????????本著分享和開源精神,也為了給以后的參賽學(xué)生循序漸進(jìn)的指導(dǎo),于是就有了這個(gè)實(shí)戰(zhàn)筆記系列。希望自己摸索的過程能給更多的嵌入式學(xué)習(xí)者一些指引,也為國(guó)產(chǎn)嵌入式處理器和國(guó)產(chǎn)嵌入式操作系統(tǒng)的推廣助一點(diǎn)力。

????????由于個(gè)人能力和精力的限制,再加上龍芯嵌入式的開發(fā)資料十分有限,很多問題沒法像STM32那樣深入到庫文件和寄存器的程度,還希望有見解的網(wǎng)友在這些問題上能給與點(diǎn)評(píng)和分享。最后,我想說的是,這個(gè)實(shí)戰(zhàn)筆記不是面向0基礎(chǔ)的朋友,起碼得有龍芯嵌入式裸機(jī)的開發(fā)經(jīng)驗(yàn),了解RT-Thread操作系統(tǒng)的線程、定時(shí)器、信號(hào)量、郵箱等相關(guān)知識(shí),知道LVGL圖形用戶界面開發(fā)的基本套路。

????????好了,開場(chǎng)白說完了,本文是實(shí)戰(zhàn)筆記的第一篇,我們把最基本的文件和代碼添加到工程項(xiàng)目中,形成一個(gè)最原始的工程項(xiàng)目。

一、關(guān)于IDE和工具鏈的版本

????????如圖4和圖5所示,本人使用的IDE版本是目前官網(wǎng)(http://www.loongide.com)最新的1.2 beta3,工具鏈用的是GCC 4.9.2 for MIPS ELF,并選擇了-O1級(jí)別的編譯優(yōu)化(這樣運(yùn)行的UI效果明顯比不優(yōu)化的要流暢的多)。至于低版本的IDE或其他工具鏈,學(xué)生在調(diào)試的時(shí)候多少會(huì)有點(diǎn)莫名其妙的問題,所以建議網(wǎng)友們盡量使用與筆者一致的版本,避免除代碼之外的軟件問題。

圖4 ?本人使用的IDE和工具鏈版本
圖5 ?龍芯IDE官網(wǎng)的下載頁面


二、創(chuàng)建最初的項(xiàng)目

????????這一步?jīng)]啥技術(shù)含量,按照新建項(xiàng)目的向?qū)?,一步步選擇最匹配和最需要的即可,這里把向?qū)У拿恳徊竭M(jìn)行了截圖(圖6~圖9),大家跟著選就行了。

圖6 ?確定工程目錄和工程名稱
圖7 ?選擇處理器型號(hào)、工具鏈版本和操作系統(tǒng)類型
圖8 ?選擇所需的LVGL組件
圖9 ?保留默認(rèn)的添加框架源代碼


三、觸摸屏驅(qū)動(dòng)的移植和配置

????????由于后續(xù)所有任務(wù)的交互都是依賴觸摸屏來完成,因此移植觸摸屏的驅(qū)動(dòng)就成了當(dāng)務(wù)之急。而且,移植不是簡(jiǎn)單的把驅(qū)動(dòng)文件加進(jìn)工程,還要與LVGL輸入和輸出設(shè)備的相關(guān)代碼結(jié)合起來。下面就是我個(gè)人摸索的移植過程,供各位借鑒和參考。


3.1 準(zhǔn)備橫版屏幕的觸摸輸入驅(qū)動(dòng)文件

????????其實(shí),上面剛創(chuàng)建好的工程已經(jīng)包含了屏幕的顯示輸出驅(qū)動(dòng)文件?ls1x_fb.c?和?ls1x_fb.h(所在目錄如圖10所示),以及觸摸輸入驅(qū)動(dòng)文件?gt1151.c?和?gt1151.h(所在目錄如圖11所示)。但這里有個(gè)很糾結(jié)的問題就是,前者的顯示輸出驅(qū)動(dòng)文件是針對(duì)橫版屏幕(800×480)編寫的,而后者的觸摸輸入驅(qū)動(dòng)文件是針對(duì)豎版屏幕(480×800)編寫的。因此,必須想辦法讓兩者對(duì)屏幕采取一致的驅(qū)動(dòng)方式。

圖10 ?顯示輸出驅(qū)動(dòng)文件所在的目錄
圖11 ?觸摸輸入驅(qū)動(dòng)文件所在的目錄


????????好在龍芯官方已經(jīng)寫好了針對(duì)橫版的觸摸輸入驅(qū)動(dòng)文件?gt1151q.c?和?gt1151q.h,放在了開發(fā)板的配套例程?10_LCD_touch?中(如圖12所示),那接下來我們就用這兩個(gè)文件去替換工程里原有的?gt1151.c?和?gt1151.h

圖12 ?配套例程里的橫版觸摸輸入驅(qū)動(dòng)文件


3.2 替換豎版的觸摸輸入驅(qū)動(dòng)文件

????????這一步也很簡(jiǎn)單,把工程里原有的觸摸輸入驅(qū)動(dòng)文件刪除,拷入新的文件,并將其添加進(jìn)當(dāng)前工程即可,如圖13~圖15所示。

圖13 ?替換為gt1151q.c文件
圖14 ?替換為gt1151q.h文件
圖15 ?把新的驅(qū)動(dòng)文件加入工程


3.3 補(bǔ)充頭文件路徑

????????這一點(diǎn)跟?Keil?一個(gè)套路,必須把所有頭文件所在的路徑都添加進(jìn)來,按照當(dāng)前的工程目錄,圖16所示的幾個(gè)路徑是需要手動(dòng)添加的,如果你自己還規(guī)劃了其他目錄放頭文件,也請(qǐng)一并加進(jìn)來。

圖16 ?補(bǔ)充的頭文件路徑


3.4 修改LVGL的輸入設(shè)備驅(qū)動(dòng)文件

????????我們心里要清楚,所有的GUI效果都是通過LVGL的圖形化組件來實(shí)現(xiàn)的,無論是顯示輸出還是觸摸輸入,就必須讓LVGL知道該調(diào)用哪個(gè)對(duì)應(yīng)的設(shè)備驅(qū)動(dòng)。在這里,顯示輸出應(yīng)該調(diào)用?ls1x_fb.c?驅(qū)動(dòng)文件,打開LVGL顯示輸出的驅(qū)動(dòng)文件
./lvgl-7.0.1/porting/lv_port_disp.c(如圖17所示),可以看到該文件引用的正是所需的硬件驅(qū)動(dòng)文件,因此?lv_port_disp.c?文件不必修改。

圖17 ?lv_port_disp.c文件及其調(diào)用的顯示驅(qū)動(dòng)


????????再來看LVGL輸入的驅(qū)動(dòng)文件
./lvgl-7.0.1/porting/lv_port_indev.c(如圖18所示),很明顯并沒有調(diào)用所需的?gt1151q.c?觸摸輸入驅(qū)動(dòng),因此要對(duì)?lv_port_indev.c?文件進(jìn)行必要的修改才行。一共有6處需要修改,如圖19~圖24所示。為了清晰展示修改前后的代碼差異,這里使用了?Notepad++ 編輯器中的?Compare 插件來對(duì)比。

圖18 ?lv_port_indev.c文件及其調(diào)用的輸入驅(qū)動(dòng)
圖19 修改頭文件
圖20 ?刪除不需要的函數(shù)聲明和全局變量(不刪也行,但用不上)
圖21 ?刪除不需要的代碼(不刪也行,但用不上)
圖22 ?刪除無關(guān)的初始化函數(shù)
圖23 ?修改調(diào)用的觸摸掃描函數(shù)
圖24 ?刪除不需要的函數(shù)定義(不刪也行,但用不上)


四、修改龍芯開發(fā)板的板級(jí)支持(BSP)文件

????????配置龍芯開發(fā)板BSP的文件有兩個(gè):一個(gè)是?./include/bsp.h?文件,如圖25所示,這個(gè)文件里的很多宏需要根據(jù)實(shí)際情況進(jìn)行配置,后續(xù)時(shí)常要與之打交道;另一個(gè)是
./ls1x-drv/ls1x_drv_init.c?文件,如圖26所示,這個(gè)文件修改的地方不多。

圖25 bsp.h文件
圖26 ls1x_drv_init.c文件


4.1 修改 bsp.h 文件

????????當(dāng)前對(duì)該文件的修改一共有兩處,如圖27和圖28所示,跟之前一樣,還是把修改前后的差異對(duì)比著看。這兩處修改針對(duì)的是觸摸屏驅(qū)動(dòng)芯片GT1151,以及所占用的I2C0總線。

圖27 ?修改觸摸屏驅(qū)動(dòng)總線
圖28 ?修改觸摸屏對(duì)應(yīng)的驅(qū)動(dòng)芯片


4.2 修改 ls1x_drv_init.c 文件

????????這個(gè)文件目前只有2處需要修改,如圖29和圖30所示,換成橫屏對(duì)應(yīng)的驅(qū)動(dòng)文件和初始化函數(shù)即可。

圖29 修改為橫屏驅(qū)動(dòng)文件
圖30 ?修改為橫屏初始化


五、修改LVGL的全局配置

????????./lvgl-7.0.1/lv_conf.h?是LVGL的全局配置文件,如圖31所示。這里,我們針對(duì)屏幕分辨率、字體大小、中文支持等進(jìn)行了修改,如圖32~圖36所示。

圖31?lv_conf.h文件
圖32 修改屏幕水平和垂直分辨率
圖33 修改字號(hào)
圖34 修改中文字體樣式和字號(hào)
圖35 ?修改主題主色調(diào)(非必須)
圖36 ?補(bǔ)充24號(hào)中文字體的配置


六、編譯和測(cè)試

????????本文的主要目的是搞定與移植有關(guān)的配置,并不打算編寫實(shí)質(zhì)性的代碼。通過上面的步驟,移植工作幾乎全部完成,接下來就可以直接編譯整個(gè)工程來進(jìn)行檢驗(yàn)了。這里就不貼main.c的源碼了,除了修改一下顯示模式,如圖37所示,其他源碼都保留不變。由于工程文件較多,第一次編譯耗費(fèi)的時(shí)間會(huì)比較長(zhǎng)。

圖37 ?修改main.c中的顯示模式


????????編譯沒錯(cuò)的話就可以運(yùn)行或下載本程序了,效果上就是一個(gè)線程在運(yùn)行,每0.5s通過串口打印一下運(yùn)行時(shí)間,如圖38所示。至于GUI效果,默認(rèn)的源碼里并沒有添加,所以屏幕上什么也沒有,我們?cè)谙乱话鎭硖砑印?/p>

圖38 ?初步移植后的串口打印效果


????????至此,移植的工作就算告一段落了,雖然工作量不大,但網(wǎng)上并沒有針對(duì)龍芯的移植教程,幾乎都是針對(duì)STM32的,移植的大多也是LVGL8,所以上面的移植經(jīng)驗(yàn)也是反復(fù)折騰總結(jié)出來的。大家在移植的時(shí)候有什么問題,歡迎在評(píng)論區(qū)留言。后續(xù)我們就可以在此基礎(chǔ)上添加一個(gè)個(gè)我們想要的效果了。

(本文完)

龍芯+RT-Thread+LVGL實(shí)戰(zhàn)筆記(1)——從移植開始的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
治县。| 多伦县| 铁力市| 进贤县| 西和县| 唐海县| 平凉市| 天峻县| 专栏| 郁南县| 余干县| 宾川县| 肥城市| 会理县| 西畴县| 科技| 门源| 石屏县| 滦南县| 云霄县| 桃园县| 木里| 织金县| 武城县| 桐梓县| 碌曲县| 泗洪县| 积石山| 长宁区| 门头沟区| 城步| 中西区| 济源市| 安宁市| 东安县| 丰台区| 延津县| 澄江县| 佛冈县| 鄂尔多斯市| 塔河县|