色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【專欄精選】嵌入式開發極致性能優化案例

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

掃碼添加小助手

加入工程師交流群

做電子發燒友技術探索官,分享你的原創電子行業文章!

本期為大家帶來一篇嵌入式開發性能優化案例,感興趣的小伙伴可以關注作者一起學習哦~

本期推

專欄作者嵌入式USB開發(點擊查看作者主頁)

介紹:本專欄介紹嵌入式USB開發,理論結合實踐,不單純講USB協議,而是以具體的實例進行講解。

前言

我們之前進行了TFT刷屏測試確認了基本功能。刷屏速度是決定GUI顯示幀率最根本的一環,只有優化到極致的刷屏速度,才能有基礎實現更好效果的GUI。本篇就進行刷屏的優化,其實其思想是通用的,對于其他代碼也可以參考。

1.減少if條件判斷

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

if(Data&0x80)


LCD_SDA_SET; //輸出數據


else LCD_SDA_CLR;

改為串行操作

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

2.使用寄存器變量

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

register unsigned int data;


3.空間換時間 8次for循環改為 直接8次操作

其實在memcpy等處理中也是類似操作,比如連續8次讀寫組合一起,再循環。以減少for判斷次數,也利于內部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; //輸出數據


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.使用內聯函數減少函數跳轉時間

inline void SPI_WriteDataF(unsigned char Data)

函數跳轉需要時間,減少函數調用即可節約時間,尤其頻繁調用的函數效果明顯,但是可能增加存儲空間。


5.減少for循環嵌套 雙重for嵌套改為一層for

For嵌套導致多重循環嵌套判斷,浪費時間,順序執行一般是優于分支處理的。

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位數據


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


LCD_CS_SET;


}


}

6.減少函數調用層級

函數調用影響流水線,并且需要額外的上下文處理時間

Lcd_ClearF中直接調用SPI_WriteDataF不再調用函數LCD_WriteData_16Bit


7.使用匯編進行優化

這個實際看情況建議先用其他方式進行優化,因為人工編寫匯編代碼不一定比編譯器編寫的好,除非非常熟悉匯編并且有明確的優化方向。


8.速度測試

循環刷屏使用定時器記錄執行多次刷屏的時間,代碼見附件。


9.編譯器速度優化選項

編譯器-Ofast優化



執行時間分別是

660ms,782ms

我們優化后的代碼快15.6%

編譯器-O2優化


執行時間分別是661ms,908ms

們優化后的代27.2%


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

- 說明我們人工優化的代碼不使用編譯器優化也有很好的速度性能。

-不同的編譯器優化對原來的代碼影響較大-ofast執行時間從908變為了782。

-哪怕是采用-ofsat編譯器優化,我們人工優化的代碼依然還有比編譯器優化的代碼快15.6%,所以編譯器優化無法替代人工優化。

-只有從設計角度去優化,避免依賴編譯器優化才是根本方案。

總結

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

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

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


原文地址:http://www.1cnz.cn/d/2101849.html


版權說明:

本內容為作者發布至電子發燒友平臺原創文章,相關創作版權歸原作者所有,如未經作者授權,禁止轉載!





聲明本文由電子發燒友社區發布,轉載請注明以上來源。如需社區合作及入群交流,請添加微信EEFans0806,或者發郵箱liuyong@huaqiu.com。


更多熱點文章閱讀

  • 采用先進成熟工藝和自主產權體系結構,紫光同創FPGA開發板入門指導

  • 嵌入式Linux開發秘籍!工程師大佬親歷分享項目樣例

  • RK3568!四核64位ARMv8.2A架構,匯聚編譯源碼及實戰樣例

  • 尺寸僅有21mm*51mm,板邊采用郵票孔設計,合宙 Air105 核心板開發總結

  • 基于Cortex-M3內核的32位微控制器,STM32項目實戰分享!


原文標題:【專欄精選】嵌入式開發極致性能優化案例

文章出處:【微信公眾號:電子發燒友論壇】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴

原文標題:【專欄精選】嵌入式開發極致性能優化案例

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    嵌入式開發就業還有前景嗎?

    和醫療器械使用經驗。 3)工業控制 工業控制是指通過各種控制設備和系統,對工業生產過程進行監測、控制和優化。隨著工業自動化和智能化的發展,工業控制領域對嵌入式開發的需求也在不斷增加。在工業控制領域
    發表于 07-16 10:47

    明遠智睿SSD2351開發板:嵌入式開發領域的新型新星

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

    嵌入式開發入門指南:從零開始學習嵌入式

    隨著物聯網、智能硬件的發展,嵌入式開發成為熱門技能之一。以下將為初學者提供一份詳細的嵌入式開發入門指南,涵蓋學習路徑、必備工具、推薦資源等內容。 1. 嵌入式系統的定義與應用嵌入式系統
    發表于 05-15 09:29

    嵌入式開發:高門檻的系統性工程與 996 的行業困局

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

    BlackBerry QNX推出通用嵌入式開發平臺

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

    AI來襲!嵌入式開發者該如何應對轉型?

    AI正在改變世界!從自動駕駛到智能家居,從工業自動化到語音助手,各行各業都在朝著智能化方向邁進。對于嵌入式開發者來說,AI的到來既是一次前所未有的挑戰,也是一個充滿機遇的時代。過去,我們專注于硬件
    的頭像 發表于 03-04 14:41 ?839次閱讀
    AI來襲!<b class='flag-5'>嵌入式開發</b>者該如何應對轉型?

    代碼+案例+生態:武漢芯源半導體CW32嵌入式開發實戰正式出版

    尊敬的各位電子工程師、嵌入式開發愛好者們:大家好!今天,我們懷著無比激動與自豪的心情,向大家宣布一個重大喜訊——武漢芯源半導體的單片機CW32正式出書啦!《基于ARMCortex-M0+的CW32
    的頭像 發表于 03-03 15:15 ?703次閱讀
    代碼+案例+生態:武漢芯源半導體CW32<b class='flag-5'>嵌入式開發</b>實戰正式出版

    代碼+案例+生態:武漢芯源半導體CW32嵌入式開發實戰正式出版

    尊敬的各位電子工程師、嵌入式開發愛好者們: 大家好!今天,我們懷著無比激動與自豪的心情,向大家宣布一個重大喜訊——武漢芯源半導體的單片機CW32正式出書啦!《基于ARM Cortex-M0+
    發表于 03-03 15:14

    如何成為嵌入式開發工程師?

    如何成為嵌入式開發工程師? 成為嵌入式開發工程師通常需要掌握一系列技能和知識,并且在實踐中不斷積累經驗。以下是一些基本步驟和建議: 1. 基礎教育:- 獲取電子工程、計算機科學或相關領域的學位
    發表于 02-19 10:39

    嵌入式開發新紀元:AI大模型助力樂鑫芯片高效編程

    芯片開發的有效途徑。看看它們如何為樂鑫ESP32系列芯片開發賦能,實現從代碼生成到調試優化全流程的效率飛躍!嵌入式開發者的得力AI助手Cursor與Trae:代碼生
    的頭像 發表于 02-17 18:06 ?1271次閱讀
    <b class='flag-5'>嵌入式開發</b>新紀元:AI大模型助力樂鑫芯片高效編程

    盤點工程師常用的嵌入式開發工具

    嵌入式開發涉及硬件與軟件的緊密結合,開發工具的選擇對效率和質量至關重要。以下是嵌入式開發中常用的工具分類及代表性工具,涵蓋開發全流程: 1. 集成
    的頭像 發表于 02-07 10:06 ?2129次閱讀

    嵌入式開發必備-RK3562演示Linux常用系統查詢命令(上)觸覺智能出品

    實用干貨!嵌入式開發學習必備-RK3562演示Linux常用系統查詢命令(上)關注觸覺智能持續為大家帶來更多嵌入式開發內容
    的頭像 發表于 12-31 10:51 ?117次閱讀
    <b class='flag-5'>嵌入式開發</b>必備-RK3562演示Linux常用系統查詢命令(上)觸覺智能出品

    如何使用 RISC-V 進行嵌入式開發

    、準備開發環境 選擇開發板 :RISC-V架構的嵌入式開發板有多種選擇,如GD32VF103R-START、飛凌嵌入式OK113i-S等。選擇時需要考慮
    的頭像 發表于 12-11 17:32 ?1985次閱讀

    嵌入式開發常見問題排查

    嵌入式開發問題排查很多人認為嵌入式開發很難,主要是因為在這個過程中常常會遇到各式各樣的問題。這些問題的復雜性和多樣性使得許多人感到困惑和無所適從。然而,如果將這些問題逐一拆解,實際上大部分都可以
    的頭像 發表于 09-22 08:04 ?851次閱讀
    <b class='flag-5'>嵌入式開發</b>常見問題排查

    聚焦嵌入式開發中的合規性工具、項目管理工具、版本迭代工具應用

    日前,龍智攜嵌入式開發及管理解決方案亮相2024上海國際嵌入式展(embedded world China 2024)。展會期間,我們對話了多位龍智資深DevSecOps顧問及技術支持專家
    的頭像 發表于 07-29 15:15 ?1097次閱讀
    主站蜘蛛池模板: 俄罗斯12一15处交 | 午夜福利92看看电影80 | 三级貂蝉艳史 在线观看 | music radio在线收听 | 解开白丝老师的短裙猛烈进入 | 三级网址在线 | 一边捏奶头一边啪高潮会怎么样 | 国色精品VA在线观看免费视频 | 久热在线这里只有精品7 | 中文在线中文资源 | 国产看午夜精品理论片 | 蜜桃日本MV免费观看 | 91免费网站在线看入口黄 | 青青草原直播 | 色欲AV精品一区二区入口 | 全黄h全肉细节文在线观看 全黄H全肉细节文短篇 | 国产精品久免费的黄网站 | 精品精品国产自在现拍 | 十七岁日本免费完整版BD | 黄色三级视频在线观看 | 亚洲日本一区二区三区在线不卡 | 亚洲伊人久久大香线蕉综合图片 | 午夜影视免费 | 欧美日韩第一区 | 精品免费久久久久久影院 | 免费毛片视频网站 | 99E久热只有精品8在线直播 | 天堂草原天黑黑 | 果冻传媒APP免费网站在线观看 | 浪荡受自我调教纯肉BL | 99re6在线视频国产精品欧美 | yw193龙物免费官网在线 | 肉色欧美久久久久久久蜜桃 | 久久精品手机观看 | 国产免费人成在线视频视频 | 久久综合香蕉久久久久久久 | 美女坐脸vk | 高清一区二区亚洲欧美日韩 | 国产欧美一区二区精品仙草咪 | 尤物久久99国产综合精品 | 久久久久亚洲日日精品 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品