91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

【專欄精選】嵌入式開發(fā)極致性能優(yōu)化案例

電子發(fā)燒友論壇 ? 來源:未知 ? 2023-06-13 08:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

做電子發(fā)燒友技術(shù)探索官,分享你的原創(chuàng)電子行業(yè)文章!

本期為大家?guī)硪黄?a href="http://m.makelele.cn/v/tag/232/" target="_blank">嵌入式開發(fā)性能優(yōu)化案例,感興趣的小伙伴可以關(guān)注作者一起學(xué)習(xí)哦~

本期推

專欄作者嵌入式USB開發(fā)(點(diǎn)擊查看作者主頁)

介紹:本專欄介紹嵌入式USB開發(fā),理論結(jié)合實(shí)踐,不單純講USB協(xié)議,而是以具體的實(shí)例進(jìn)行講解。

前言

我們之前進(jìn)行了TFT刷屏測試確認(rèn)了基本功能。刷屏速度是決定GUI顯示幀率最根本的一環(huán),只有優(yōu)化到極致的刷屏速度,才能有基礎(chǔ)實(shí)現(xiàn)更好效果的GUI。本篇就進(jìn)行刷屏的優(yōu)化,其實(shí)其思想是通用的,對于其他代碼也可以參考。

1.減少if條件判斷

if等條件判斷會導(dǎo)致分支處理,一方面會增加指令,尤其是跳轉(zhuǎn)指令一般執(zhí)行時(shí)間比一般指令長,另外也會影響流水線和cache。

if(Data&0x80)


LCD_SDA_SET; //輸出數(shù)據(jù)


else LCD_SDA_CLR;

改為串行操作

#define LCD_SDA_SET_VAL(val) LCD_CTRLB->BSRR=val;LCD_CTRLB->BRR=val^LCD_SDA

2.使用寄存器變量

頻繁操作的局部變量盡量使用寄存器進(jìn)行緩存,避免反復(fù)從內(nèi)存去加載,寄存器直接操作速度快很多。

register unsigned int data;


3.空間換時(shí)間 8次for循環(huán)改為 直接8次操作

其實(shí)在memcpy等處理中也是類似操作,比如連續(xù)8次讀寫組合一起,再循環(huán)。以減少for判斷次數(shù),也利于內(nèi)部cache流水線處理,有一些cpu還有burst處理,這也是有利的。

inline void SPI_WriteDataF(unsigned char Data)


{


#if 0


unsigned char i=0;


for(i=8;i>0;i--)


{


if(Data&0x80)


LCD_SDA_SET; //輸出數(shù)據(jù)


else LCD_SDA_CLR;






LCD_SCL_CLR;


LCD_SCL_SET;


Data<<=1;


}


#else


//LCD_SDA_LOCK;


register unsigned int data = (Data & 0x80) << 0;


LCD_SDA_SET_VAL(data);


LCD_SCL_CLR;


LCD_SCL_SET;




data = (Data & 0x40) << 1;


LCD_SDA_SET_VAL(data);


LCD_SCL_CLR;


LCD_SCL_SET;




data = (Data & 0x20) << 2;


LCD_SDA_SET_VAL(data);


LCD_SCL_CLR;


LCD_SCL_SET;




data = (Data & 0x10) << 3;


LCD_SDA_SET_VAL(data);


LCD_SCL_CLR;


LCD_SCL_SET;




data = (Data & 0x08) << 4;


LCD_SDA_SET_VAL(data);


LCD_SCL_CLR;


LCD_SCL_SET;




data = (Data & 0x04) << 5;


LCD_SDA_SET_VAL(data);


LCD_SCL_CLR;


LCD_SCL_SET;




data = (Data & 0x02) << 6;


LCD_SDA_SET_VAL(data);


LCD_SCL_CLR;


LCD_SCL_SET;




data = (Data & 0x01) << 7;


LCD_SDA_SET_VAL(data);


LCD_SCL_CLR;


LCD_SCL_SET;


//LCD_SDA_UNLOCK;


#endif


}


4.使用內(nèi)聯(lián)函數(shù)減少函數(shù)跳轉(zhuǎn)時(shí)間

inline void SPI_WriteDataF(unsigned char Data)

函數(shù)跳轉(zhuǎn)需要時(shí)間,減少函數(shù)調(diào)用即可節(jié)約時(shí)間,尤其頻繁調(diào)用的函數(shù)效果明顯,但是可能增加存儲空間。


5.減少for循環(huán)嵌套 雙重for嵌套改為一層for

For嵌套導(dǎo)致多重循環(huán)嵌套判斷,浪費(fèi)時(shí)間,順序執(zhí)行一般是優(yōu)于分支處理的。

void Lcd_ClearF(unsigned int Color) //刷新全屏           
{


unsigned int i,m;


Lcd_SetRegion(0,0,X_MAX_PIXEL-1,Y_MAX_PIXEL-1);


Lcd_WriteIndex(0x2C);


for(i=0;i


{


LCD_CS_CLR;


LCD_RS_SET;


SPI_WriteDataF(Color>>8); //寫入高8位數(shù)據(jù)


SPI_WriteDataF(Color); //寫入低8位數(shù)據(jù)


LCD_CS_SET;


}


}

6.減少函數(shù)調(diào)用層級

函數(shù)調(diào)用影響流水線,并且需要額外的上下文處理時(shí)間

Lcd_ClearF中直接調(diào)用SPI_WriteDataF不再調(diào)用函數(shù)LCD_WriteData_16Bit


7.使用匯編進(jìn)行優(yōu)化

這個(gè)實(shí)際看情況建議先用其他方式進(jìn)行優(yōu)化,因?yàn)槿斯ぞ帉憛R編代碼不一定比編譯器編寫的好,除非非常熟悉匯編并且有明確的優(yōu)化方向。


8.速度測試

循環(huán)刷屏使用定時(shí)器記錄執(zhí)行多次刷屏的時(shí)間,代碼見附件。


9.編譯器速度優(yōu)化選項(xiàng)

編譯器-Ofast優(yōu)化



執(zhí)行時(shí)間分別是

660ms,782ms

我們優(yōu)化后的代碼快15.6%

編譯器-O2優(yōu)化


執(zhí)行時(shí)間分別是661ms,908ms

們優(yōu)化后的代27.2%


-從上可以看出不管用什么編譯器優(yōu)化,經(jīng)過上面方式人工優(yōu)化后的代碼都不差不多,660661,說明編譯器已經(jīng)無法對我們優(yōu)化后的代碼再進(jìn)行優(yōu)化

- 說明我們?nèi)斯?yōu)化的代碼不使用編譯器優(yōu)化也有很好的速度性能。

-不同的編譯器優(yōu)化對原來的代碼影響較大-ofast執(zhí)行時(shí)間從908變?yōu)榱?82。

-哪怕是采用-ofsat編譯器優(yōu)化,我們?nèi)斯?yōu)化的代碼依然還有比編譯器優(yōu)化的代碼快15.6%,所以編譯器優(yōu)化無法替代人工優(yōu)化。

-只有從設(shè)計(jì)角度去優(yōu)化,避免依賴編譯器優(yōu)化才是根本方案。

總結(jié)

1.優(yōu)化應(yīng)該從設(shè)計(jì)上去優(yōu)化而不是依賴編譯器,應(yīng)該先找大頭,優(yōu)先設(shè)計(jì)原理,算法上去優(yōu)化,最后采取進(jìn)行匯編等底層的優(yōu)化,后者成本大效果不明顯不具備可移植性等,前者成本小效果明顯,不依賴于編譯器。

2.建議寄存器名字和手冊對應(yīng)比如gpio的io鎖定寄存器,頭文件中是LOCK手冊里是LCKR

2.對于IO操作最好設(shè)置LOCK ODR寄存器,這樣可以指定bit直接寫值而其他位不修改,而不需要if else判斷分別配置BRR 和BSRR,可以直接操作ODR寄存器,進(jìn)一步優(yōu)化速度。


原文地址:http://m.makelele.cn/d/2101849.html


版權(quán)說明:

本內(nèi)容為作者發(fā)布至電子發(fā)燒友平臺原創(chuàng)文章,相關(guān)創(chuàng)作版權(quán)歸原作者所有,如未經(jīng)作者授權(quán),禁止轉(zhuǎn)載!





聲明本文由電子發(fā)燒友社區(qū)發(fā)布,轉(zhuǎn)載請注明以上來源。如需社區(qū)合作及入群交流,請?zhí)砑游⑿臙EFans0806,或者發(fā)郵箱liuyong@huaqiu.com。


更多熱點(diǎn)文章閱讀

  • 采用先進(jìn)成熟工藝和自主產(chǎn)權(quán)體系結(jié)構(gòu),紫光同創(chuàng)FPGA開發(fā)板入門指導(dǎo)

  • 嵌入式Linux開發(fā)秘籍!工程師大佬親歷分享項(xiàng)目樣例

  • RK3568!四核64位ARMv8.2A架構(gòu),匯聚編譯源碼及實(shí)戰(zhàn)樣例

  • 尺寸僅有21mm*51mm,板邊采用郵票孔設(shè)計(jì),合宙 Air105 核心板開發(fā)總結(jié)

  • 基于Cortex-M3內(nèi)核的32位微控制器,STM32項(xiàng)目實(shí)戰(zhàn)分享!


原文標(biāo)題:【專欄精選】嵌入式開發(fā)極致性能優(yōu)化案例

文章出處:【微信公眾號:電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

原文標(biāo)題:【專欄精選】嵌入式開發(fā)極致性能優(yōu)化案例

文章出處:【微信號:gh_9b9470648b3c,微信公眾號:電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    RT-Thread Vector軟件包:嵌入式開發(fā)的動態(tài)數(shù)組容器 | 技術(shù)集結(jié)

    RT-Thread Vector軟件包:嵌入式開發(fā)的動態(tài)數(shù)組容器 | 技術(shù)集結(jié)
    的頭像 發(fā)表于 01-25 09:33 ?5373次閱讀
    RT-Thread Vector軟件包:<b class='flag-5'>嵌入式開發(fā)</b>的動態(tài)數(shù)組容器 | 技術(shù)集結(jié)

    嵌入式開發(fā)常用函數(shù)速查表

    嵌入式開發(fā)中,掌握常用函數(shù)的用法可以大大提高開發(fā)效率。無論是單片機(jī)初學(xué)者還是有一定經(jīng)驗(yàn)的工程師,熟悉函數(shù)庫和調(diào)用方式都是必備技能。今天,我們?yōu)榇蠹艺硪环?b class='flag-5'>嵌入式開發(fā)常用函數(shù)速查表,覆蓋GPIO
    的頭像 發(fā)表于 01-19 09:06 ?299次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>常用函數(shù)速查表

    什么是嵌入式應(yīng)用開發(fā)?

    概述 所謂的嵌入式應(yīng)用開發(fā)就是在嵌入式操作系統(tǒng)下進(jìn)行開發(fā)、軟硬件綜合開發(fā) ?嵌入式應(yīng)用
    發(fā)表于 01-12 16:13

    性能與性價(jià)比兼得!迅為RK3562開發(fā)板開啟嵌入式開發(fā)新選擇

    性能與性價(jià)比兼得!迅為RK3562開發(fā)板開啟嵌入式開發(fā)新選擇
    的頭像 發(fā)表于 12-23 16:10 ?1257次閱讀
    <b class='flag-5'>性能</b>與性價(jià)比兼得!迅為RK3562<b class='flag-5'>開發(fā)</b>板開啟<b class='flag-5'>嵌入式開發(fā)</b>新選擇

    從小白到大牛:Linux嵌入式系統(tǒng)開發(fā)的完整指南

    穩(wěn)定性(解決兼容性問題、編寫高性能驅(qū)動)。深入學(xué)習(xí) MMU(內(nèi)存管理單元)、DMA(直接內(nèi)存訪問)等硬件原理,掌握功耗優(yōu)化技術(shù)(動態(tài)電壓調(diào)頻、休眠喚醒機(jī)制),這是工業(yè)級嵌入式開發(fā)的核心要求。? 領(lǐng)域
    發(fā)表于 12-16 10:42

    分享一個(gè)嵌入式開發(fā)學(xué)習(xí)路線

    如果你想要學(xué)習(xí)嵌入式開發(fā),我建議按照這個(gè)學(xué)習(xí)路線準(zhǔn)備: 1. 基礎(chǔ)鋪墊期(1-2個(gè)月) 理解嵌入式系統(tǒng)的“硬件基礎(chǔ)”和“編程入門”,能看懂簡單電路,寫出基礎(chǔ)C語言代碼。這一階段的學(xué)習(xí)對學(xué)歷沒有
    發(fā)表于 12-04 11:01

    嵌入式開發(fā)的關(guān)鍵點(diǎn)介紹

    需要考慮嵌入式系統(tǒng)的資源限制,例如:內(nèi)存、CPU處理能力等等。因此,嵌入式開發(fā)需要開發(fā)人員具備優(yōu)化代碼的能力。嵌入式系統(tǒng)的安全性非常重要,
    發(fā)表于 11-13 08:12

    GT2440嵌入式開發(fā)系統(tǒng)用戶手冊

    電子發(fā)燒友網(wǎng)站提供《GT2440嵌入式開發(fā)系統(tǒng)用戶手冊.pdf》資料免費(fèi)下載
    發(fā)表于 10-28 17:05 ?2次下載

    恩智浦如何攻克兩大嵌入式開發(fā)難題

    在我們的身邊,嵌入式系統(tǒng)無處不在。而隨著技術(shù)的進(jìn)步和應(yīng)用的拓展,今天的嵌入式開發(fā)也面臨著諸多新課題、新挑戰(zhàn)。
    的頭像 發(fā)表于 10-27 09:28 ?1770次閱讀

    新一代嵌入式開發(fā)平臺 AMD嵌入式軟件和工具2025.1版現(xiàn)已推出

    AMD 2025.1 版嵌入式軟件和工具是面向新一代嵌入式系統(tǒng)開發(fā)而打造的綜合平臺,全面加速概念構(gòu)想到部署落地。 2025.1 版嵌入式軟件和工具的新 增功能 AMD
    的頭像 發(fā)表于 08-20 09:15 ?3970次閱讀

    嵌入式開發(fā)就業(yè)還有前景嗎?

    和醫(yī)療器械使用經(jīng)驗(yàn)。 3)工業(yè)控制 工業(yè)控制是指通過各種控制設(shè)備和系統(tǒng),對工業(yè)生產(chǎn)過程進(jìn)行監(jiān)測、控制和優(yōu)化。隨著工業(yè)自動化和智能化的發(fā)展,工業(yè)控制領(lǐng)域?qū)?b class='flag-5'>嵌入式開發(fā)的需求也在不斷增加。在工業(yè)控制領(lǐng)域
    發(fā)表于 07-16 10:47

    明遠(yuǎn)智睿SSD2351開發(fā)板:嵌入式開發(fā)領(lǐng)域的新型新星

    。在眾多開發(fā)板中,明遠(yuǎn)智睿推出的SSD2351開發(fā)板憑借其超高的性價(jià)比、卓越的性能以及豐富的功能特性,迅速成為了嵌入式開發(fā)者們關(guān)注的焦點(diǎn)。 卓越性能
    的頭像 發(fā)表于 07-01 16:47 ?720次閱讀

    嵌入式開發(fā)入門指南:從零開始學(xué)習(xí)嵌入式

    隨著物聯(lián)網(wǎng)、智能硬件的發(fā)展,嵌入式開發(fā)成為熱門技能之一。以下將為初學(xué)者提供一份詳細(xì)的嵌入式開發(fā)入門指南,涵蓋學(xué)習(xí)路徑、必備工具、推薦資源等內(nèi)容。 1. 嵌入式系統(tǒng)的定義與應(yīng)用嵌入式系統(tǒng)
    發(fā)表于 05-15 09:29

    嵌入式開發(fā):高門檻的系統(tǒng)性工程與 996 的行業(yè)困局

    嵌入式開發(fā)的門檻,往往被培訓(xùn)機(jī)構(gòu)和表象所掩蓋。許多人誤以為 “用 C 語言寫個(gè)跑在 ARM 上的程序” 就是嵌入式,實(shí)則連皮毛都未觸及。真正的嵌入式開發(fā)是硬件與軟件深度融合的系統(tǒng)性工程,需跨越三重壁壘
    的頭像 發(fā)表于 04-09 11:06 ?979次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>:高門檻的系統(tǒng)性工程與 996 的行業(yè)困局

    BlackBerry QNX推出通用嵌入式開發(fā)平臺

    BlackBerry有限公司(紐交所代碼:BB;多倫多證券交易所代碼:BB)旗下部門QNX今日宣布推出QNX 通用嵌入式開發(fā)平臺(General Embedded Development
    的頭像 發(fā)表于 03-11 16:04 ?1184次閱讀