国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

手把手教你用位圖映射方式優(yōu)化灰度液晶控制器驅(qū)動(dòng)

0
分享至


單色液晶控制器通常的寫顯示RAM方式是一次寫8個(gè)像素,容易實(shí)現(xiàn)MCU主存到控制器的位圖映射。但是支持灰度的液晶控制器不一定有這樣的操作方式,于是只用黑白二色的顯示時(shí),也不得不每個(gè)像素都要寫灰階編碼到控制器。但是在MCU主存中每個(gè)像素用8-bit甚至16-bit來表示,開銷就大多了,很多時(shí)候是不必要的。如果用二值的位圖存放顯示內(nèi)容,在顯示驅(qū)動(dòng)軟件中轉(zhuǎn)換,就可能實(shí)現(xiàn)和單色液晶在圖形庫(kù)上的兼容性。


例如ST7529液晶控制器的顯存數(shù)據(jù)是5-bit灰度,采用并行接口(8080模式)驅(qū)動(dòng)時(shí),有16-bit表示3個(gè)像素的辦法和3個(gè)8-bit表示3個(gè)像素的辦法。這個(gè)控制器是給CSTN液晶設(shè)計(jì)的,所以總是要RGB 3個(gè)像素一起寫,作為FSTN的驅(qū)動(dòng)顯得有些別扭——列方向的坐標(biāo)只能以3像素為單位。如果能忍受這一點(diǎn),用8-bit數(shù)據(jù)模式,每次寫顯存操作就是更新一個(gè)像素,按列優(yōu)先模式能實(shí)現(xiàn)逐條掃描線的數(shù)據(jù)寫入。


現(xiàn)在考慮類似ST7529這種控制器的位圖映射軟件驅(qū)動(dòng)。在MCU的SRAM中開辟一塊連續(xù)空間作為顯示區(qū)域內(nèi)容的位圖存儲(chǔ)(只顯示兩種顏色,每個(gè)像素1 bit),向控制器寫像素?cái)?shù)據(jù)時(shí)每次根據(jù)位圖中的一個(gè)bit,決定寫控制器的數(shù)據(jù)是兩種顏色代碼中哪一個(gè)。如果控制器是用MCU的內(nèi)存控制器(如STM32的FMC)連接的,寫操作就對(duì)應(yīng)到一條STR指令;如果不能用FMC,就要用一組GPIO輸出并行數(shù)據(jù),另一單獨(dú)GPIO產(chǎn)生寫脈沖。

基本的顯示代碼:


在寫每個(gè)像素?cái)?shù)據(jù)的時(shí)候,要進(jìn)行位運(yùn)算測(cè)試內(nèi)存中數(shù)據(jù)的某位是1還是0. 按照低地址數(shù)據(jù)在前,每個(gè)字中LSB在前的順序訪問整個(gè)位圖。取數(shù)據(jù)的時(shí)候一次取32 bit的效率要高于8 bit. 內(nèi)層循環(huán)就是逐位處理。在Cortex-m4上,以上代碼的實(shí)現(xiàn)效率約為12.2 時(shí)鐘周期每像素。

這樣的代碼足夠簡(jiǎn)潔了。用位運(yùn)算是因?yàn)椴荒苤苯訉ぶ稴RAM的某一位…… 但是真的不能嗎?Cortex-m3/m4有bit-banding的功能,雖然我以前沒覺得有什么用,SRAM是處于bit-band區(qū)域中的。也就是,在SRAM中存儲(chǔ)了位圖,就有某一段地址是每個(gè)32-bit映射到位圖中一個(gè)bit的。按連續(xù)地址訪問就可以遍歷位圖中每個(gè)像素。于是顯示代碼就只需要一個(gè)循環(huán)了:


針對(duì)ST7529,如果輸出是全黑和全白兩種顏色,數(shù)據(jù)接口上有效位是全0或者全1,還可以把條件判斷也省去,修改成這樣:


代碼中直接輸出數(shù)據(jù) -p[n] , 因?yàn)閜[n]為1則寫數(shù)據(jù)就成了 0xFF,是滿足需要的。這樣又能少用指令了。實(shí)際測(cè)試的執(zhí)行時(shí)間減少到 8~9 時(shí)鐘周期每像素,有一個(gè)浮動(dòng)可能是CPU流水線的關(guān)系??匆幌戮幾g的結(jié)果:


標(biāo)出的部分就是循環(huán)主體,一共7條指令,顯得沒有任何多余操作,實(shí)際執(zhí)行時(shí)間變化可能是總線的緣故。

到這里,好象已經(jīng)優(yōu)化到頭了,不繞彎。

回頭看,從原理上呢,根據(jù)每個(gè)像素判斷一下要寫什么數(shù)據(jù)是沒錯(cuò)的,但是如果寫的數(shù)據(jù)和上次一樣其實(shí)可以不用更新接口上的并行數(shù)據(jù),所以可以少一步操作?然而要增加這個(gè)條件判斷其實(shí)是又繞彎了,因?yàn)闇y(cè)試、保存前次結(jié)果和條件分支會(huì)消耗更多的周期。實(shí)際測(cè)試也是平均執(zhí)行時(shí)間到了 10.4 時(shí)鐘周期每像素。 程序如下:


雖然上面這個(gè)嘗試改進(jìn)失敗,減少不必要的操作的思路是有價(jià)值的。實(shí)際的顯示驅(qū)動(dòng)就是寫連續(xù)一串(個(gè)數(shù)不確定)的前景色像素,再寫連續(xù)一串背景色像素,交替進(jìn)行的。假如SRAM存儲(chǔ)的不是位圖,而是按順序排列的兩種顏色各自連續(xù)的像素個(gè)數(shù)的序列,則顯示代碼有可能執(zhí)行更快。

但是現(xiàn)在SRAM存儲(chǔ)的是位圖,只能在此前提下討論。那么,從位圖掃描的角度,統(tǒng)計(jì)連續(xù)的1個(gè)的個(gè)數(shù),再統(tǒng)計(jì)后面連續(xù)的0的個(gè)數(shù),再統(tǒng)計(jì)后面連續(xù)1的個(gè)數(shù)……如此下去也可以,只不過效率是個(gè)問題。不妨對(duì)比以下:


這段程序?qū)?1"像素和"0"像素分組輸出,包含了測(cè)試統(tǒng)計(jì)和連續(xù)寫脈沖的過程,屬于是繞了彎路的做法,最后的執(zhí)行時(shí)間大約是 15.5 時(shí)鐘周期每像素. 比最基本的方法還要慢,也是可想而知的。

如果不用bit-banding呢,像最基本的方法那樣每次先取一個(gè)字,那么程序還會(huì)可預(yù)期地多耗費(fèi)點(diǎn)時(shí)間:


上面這段程序?qū)嶋H測(cè)試大約平均 20.4 時(shí)鐘周期每像素, 是明顯慢多了。

但之所以要這么改寫,是我想嘗試一下能否快速地找出連續(xù)的1或0的個(gè)數(shù)——Cortex-m3/m4有CLZ (Count Leading Zeros)指令。在一個(gè)32-bit字之內(nèi),用這條指令直接得到從最高位開始往下有多少個(gè)連續(xù)的0. 它能省去一個(gè)循環(huán)的位測(cè)試。

還是要嘗試的,下面的代碼看起來過于復(fù)雜了??赡苓€有可優(yōu)化的地方。


調(diào)試查錯(cuò)過后,上面這段代碼在我用的測(cè)試位圖(文本字符為主)上達(dá)到了平均約 8 時(shí)鐘周期每像素的效率,追上了前面用bit-band的最快的代碼。不枉這份努力啊。這種方式,執(zhí)行時(shí)間與顯示內(nèi)容是關(guān)聯(lián)的,一般圖形界面的話像素顏色連續(xù)出現(xiàn)的時(shí)候多,所以應(yīng)該是適用的。

到了這個(gè)地步,覺得還有更快的可能嗎?其實(shí)使用CLZ指令得以提升效率的原因是減少了循環(huán)次數(shù),上面這個(gè)程序仍然有循環(huán):除了不可避免的從SRAM中取數(shù)據(jù)之外,連續(xù)產(chǎn)生多少次寫脈沖是用循環(huán)來實(shí)現(xiàn)。而后者還有優(yōu)化的可能:

  1. 不用GPIO翻轉(zhuǎn)的方式,用硬件自動(dòng)產(chǎn)生N個(gè)脈沖。STM32的TIM1/TIM8等定時(shí)器的PWM能做到,或者用一個(gè)定時(shí)器作為另一個(gè)輸出PWM的定時(shí)器的門控。我暫時(shí)還沒有實(shí)驗(yàn),好象用的板子GPIO連接缺少條件。

  2. 如果用了FMC接口的話可以用借用這個(gè)思路,用DMA內(nèi)存到內(nèi)存的方式快速寫。

  3. 循環(huán)展開,這要費(fèi)一些代碼空間了。在上面的程序中,連續(xù)的寫脈沖一般不會(huì)太長(zhǎng)。比如說,在32個(gè)以內(nèi)就完全展開循環(huán):


用這個(gè) wr_pulses() 函數(shù)代替前一段代碼中的產(chǎn)生WR脈沖的循環(huán),實(shí)現(xiàn)部分的循環(huán)展開,之后…… 執(zhí)行速度提升到了 6 時(shí)鐘周期每像素的水平。

當(dāng)然,要求刷屏刷得快簡(jiǎn)單地把時(shí)鐘頻率提上去就是了,是否要糾結(jié)這種優(yōu)化是MCU玩家自己決定,本文只是假期時(shí)候的一點(diǎn)研究分享。關(guān)鍵點(diǎn):一是bit-band的使用,二是CLZ指令的使用。這兩個(gè)特性都得要m3/m4起才有,m0是沒有的(現(xiàn)在國(guó)產(chǎn)m4也很便宜了嘛)。

歡迎將我們?cè)O(shè)為“星標(biāo)”,這樣才能第一時(shí)間收到推送消息。

歡迎關(guān)注EEWorld旗下訂閱號(hào):“汽車開發(fā)圈”

掃碼添加小助手回復(fù)“進(jìn)群”

和電子工程師們面對(duì)面交流經(jīng)驗(yàn)

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
2020年女子當(dāng)眾扇兒子耳光,兒子直接跳樓,如今女子已自殺身亡

2020年女子當(dāng)眾扇兒子耳光,兒子直接跳樓,如今女子已自殺身亡

觀察鑒娛
2026-03-18 09:09:10
媒體人杜恩湖爆料趙薇最新工作近照!依然優(yōu)雅端莊,工作十分認(rèn)真

媒體人杜恩湖爆料趙薇最新工作近照!依然優(yōu)雅端莊,工作十分認(rèn)真

小徐講八卦
2026-03-29 15:27:10
《冬去春來》大結(jié)局:沈冉冉嫁人,莊莊上岸,徐勝利贏了

《冬去春來》大結(jié)局:沈冉冉嫁人,莊莊上岸,徐勝利贏了

草莓解說體育
2026-03-30 02:14:18
白酒再次被關(guān)注!醫(yī)生研究發(fā)現(xiàn):喝得越多,壽命或越短告訴你真相

白酒再次被關(guān)注!醫(yī)生研究發(fā)現(xiàn):喝得越多,壽命或越短告訴你真相

健康科普365
2026-03-29 18:30:09
安徽一女護(hù)士回娘家路上失蹤,15年后給哥哥托夢(mèng):我在院子里

安徽一女護(hù)士回娘家路上失蹤,15年后給哥哥托夢(mèng):我在院子里

清茶淺談
2025-02-27 14:55:55
杉杉集團(tuán)家族內(nèi)斗失控

杉杉集團(tuán)家族內(nèi)斗失控

地產(chǎn)微資訊
2026-03-27 10:10:55
伊朗武裝部隊(duì)發(fā)言人:伊朗正在制定戰(zhàn)爭(zhēng)結(jié)束條件

伊朗武裝部隊(duì)發(fā)言人:伊朗正在制定戰(zhàn)爭(zhēng)結(jié)束條件

財(cái)聯(lián)社
2026-03-28 04:50:19
他殺害數(shù)千紅軍和軍長(zhǎng),故居卻成景區(qū)被人洗白,終于被摘牌

他殺害數(shù)千紅軍和軍長(zhǎng),故居卻成景區(qū)被人洗白,終于被摘牌

品點(diǎn)歷史
2026-02-14 07:50:07
為啥山東人口碑很好?網(wǎng)友:去山東千萬不要說自己會(huì)喝酒

為啥山東人口碑很好?網(wǎng)友:去山東千萬不要說自己會(huì)喝酒

帶你感受人間冷暖
2026-03-26 00:10:05
婚姻的真相:不是嫁給一個(gè)人,是嫁給一種生活

婚姻的真相:不是嫁給一個(gè)人,是嫁給一種生活

疾跑的小蝸牛
2026-03-16 23:35:22
模特經(jīng)紀(jì)人懇求愛潑斯坦與女性發(fā)生關(guān)系,聲稱很棒實(shí)驗(yàn),往來10年

模特經(jīng)紀(jì)人懇求愛潑斯坦與女性發(fā)生關(guān)系,聲稱很棒實(shí)驗(yàn),往來10年

譯言
2026-03-29 08:44:57
央視主持人集體大哭,朱迅流淚康輝掩面痛哭,真相是什么?

央視主持人集體大哭,朱迅流淚康輝掩面痛哭,真相是什么?

落雪聽梅a
2026-03-28 09:14:37
刺激夜:美國(guó)2-5,加拿大2-2,日本1-0,塞內(nèi)加爾2-0,韓國(guó)0-4

刺激夜:美國(guó)2-5,加拿大2-2,日本1-0,塞內(nèi)加爾2-0,韓國(guó)0-4

側(cè)身凌空斬
2026-03-29 05:40:30
不會(huì)再延期!爆料人稱《GTA6》已進(jìn)入最終沖刺階段

不會(huì)再延期!爆料人稱《GTA6》已進(jìn)入最終沖刺階段

游民星空
2026-03-29 11:20:13
農(nóng)村家長(zhǎng)曬5個(gè)兒子,被網(wǎng)友群嘲:送外賣都費(fèi)勁,還為國(guó)效力呢?

農(nóng)村家長(zhǎng)曬5個(gè)兒子,被網(wǎng)友群嘲:送外賣都費(fèi)勁,還為國(guó)效力呢?

今朝牛馬
2026-03-27 18:23:13
天下只有一種生意掙錢,就是收租

天下只有一種生意掙錢,就是收租

記憶承載
2026-03-29 11:32:40
37歲仍在改寫歷史,威少助攻超越納什傳奇,全能豐碑無人撼動(dòng)

37歲仍在改寫歷史,威少助攻超越納什傳奇,全能豐碑無人撼動(dòng)

體育閑話說
2026-03-18 11:26:30
1972年廣東省委第一書記免職,主席批示心平氣和顯智慧

1972年廣東省委第一書記免職,主席批示心平氣和顯智慧

老橝說體育
2026-03-29 21:31:32
章澤天穿小香風(fēng)接待卡塔爾公主,兩人見面就擁抱,老板娘很大氣!

章澤天穿小香風(fēng)接待卡塔爾公主,兩人見面就擁抱,老板娘很大氣!

庭小娛
2026-03-29 13:19:47
特斯拉國(guó)內(nèi)規(guī)模最大高速服務(wù)區(qū)超級(jí)充電站項(xiàng)目上線

特斯拉國(guó)內(nèi)規(guī)模最大高速服務(wù)區(qū)超級(jí)充電站項(xiàng)目上線

新華社
2026-03-29 08:50:12
2026-03-30 04:11:00
EEWorld電子工程世界 incentive-icons
EEWorld電子工程世界
即時(shí)參與討論電子工程世界最火話題,搶先知曉電子工程業(yè)界資訊。
262文章數(shù) 22關(guān)注度
往期回顧 全部

科技要聞

馬斯克承認(rèn)xAI"建錯(cuò)了",11位創(chuàng)始人均離職

頭條要聞

伊朗議長(zhǎng):美航母遭受巨大損失 我們絕不接受屈辱

頭條要聞

伊朗議長(zhǎng):美航母遭受巨大損失 我們絕不接受屈辱

體育要聞

絕殺衛(wèi)冕冠軍后,他單手指天把勝利獻(xiàn)給父親

娛樂要聞

汪峰定律再現(xiàn)!李榮浩喊話單依純侵權(quán)

財(cái)經(jīng)要聞

Kimi、Minimax 們的算力荒

汽車要聞

嵐圖泰山X8配置曝光 四激光雷達(dá)/華為新一代座艙

態(tài)度原創(chuàng)

房產(chǎn)
教育
健康
時(shí)尚
軍事航空

房產(chǎn)要聞

首日430組來訪,單日120組認(rèn)籌!??谑讉€(gè)真四代,徹底爆了!

教育要聞

建議給家長(zhǎng)放春秋假,否則的話,學(xué)生放春秋假就失去意義

干細(xì)胞抗衰4大誤區(qū),90%的人都中招

來到1980的周也,好毛利蘭

軍事要聞

美兩棲攻擊艦載3500名增援到達(dá)

無障礙瀏覽 進(jìn)入關(guān)懷版