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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取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,微信公眾號:電子發燒友論壇】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

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

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

    基于Xilinx ZYNQ7000 FPGA嵌入式開發實戰指南

    電子發燒友網站提供《基于Xilinx ZYNQ7000 FPGA嵌入式開發實戰指南.pdf》資料免費下載
    發表于 12-10 15:31 ?2次下載

    一文了解嵌入式軟件開發的對象

    以前應用場景很單一,嵌入式開發可能談不上面向對象開發。但現在,做嵌入式開發,沒有面向對象開發,你就有點落伍了。 本文結合個人經驗和周立功《抽象接口技術和組件
    的頭像 發表于 11-15 10:31 ?324次閱讀
    一文了解<b class='flag-5'>嵌入式</b>軟件<b class='flag-5'>開發</b>的對象

    零基礎嵌入式開發學習路線

    嵌入式開發”沒有接觸過的同學可能會不明覺厲,但是只要你了解了,感興趣并且有一個正確的學習路線的話,零基礎也能入門。給大家介紹一個簡單易懂的學習路線,讓你能夠從零開始學習嵌入式開發。 第一步:掌握
    發表于 10-25 15:55

    嵌入式開發常見問題排查

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

    嵌入式linux開發的基本步驟有哪些?

    之前,首先需要選擇合適的硬件平臺。硬件選擇需要考慮以下幾個方面: 1.1 處理器 嵌入式Linux開發需要一個處理器,常見的處理器有ARM、MIPS、PowerPC等。選擇處理器時,需要考慮處理器的性能、功耗、成本等因素。 1.
    的頭像 發表于 09-02 09:11 ?479次閱讀

    恩智浦加速嵌入式AI創新應用開發

    在AI應用飛速發展的今天,如何能夠將AI與嵌入式系統開發有機結合起來,營造新的開發生態,打造與眾不同的創新用例,一直是嵌入式開發者追求的目標。
    的頭像 發表于 08-27 09:46 ?826次閱讀

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

    日前,龍智攜嵌入式開發及管理解決方案亮相2024上海國際嵌入式展(embedded world China 2024)。展會期間,我們對話了多位龍智資深DevSecOps顧問及技術支持專家
    的頭像 發表于 07-29 15:15 ?528次閱讀

    嵌入式開發前景怎么樣?

    嵌入式開發前景非常廣闊,這主要得益于物聯網、人工智能、大數據等技術的快速發展,以及嵌入式系統在各個領域的廣泛應用。以下是對嵌入式開發前景的詳細分析
    的頭像 發表于 07-10 09:00 ?2681次閱讀
    <b class='flag-5'>嵌入式開發</b>前景怎么樣?

    嵌入式開發者的未來

    嵌入式系統的就業方向非常廣泛,涵蓋了許多不同的行業和領域。以下是一些常見的嵌入式系統就業方向:消費電子產品:這包括智能手機、平板電腦、智能電視、智能家居設備等。嵌入式系統工程師可以參與設計、
    的頭像 發表于 06-23 08:10 ?362次閱讀
    <b class='flag-5'>嵌入式開發</b>者的未來

    嵌入式開發就業前景怎么樣?

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

    ARM Cortex-A53嵌入式開發平臺Android手冊

    電子發燒友網站提供《ARM Cortex-A53嵌入式開發平臺Android手冊.pdf》資料免費下載
    發表于 04-28 15:10 ?0次下載

    fpga是嵌入式開發

    FPGA(現場可編程門陣列)與嵌入式開發之間確實存在一定的關聯,但它們在本質上是兩個不同的領域。
    的頭像 發表于 03-15 14:18 ?1032次閱讀

    嵌入式軟件開發和軟件開發的區別

    之間的區別。 硬件環境和資源限制: 嵌入式系統通常運行在資源有限的嵌入式設備上,如單片機、嵌入式開發板或微控制器等。這些設備通常具有有限的處理能力、存儲容量以及功耗要求。相比之下,計算機通常擁有更高的處理能
    的頭像 發表于 01-22 15:27 ?2270次閱讀

    嵌入式開發常見的C語言技巧與方法分享

    嵌入式開發中,常常要操作寄存器,對寄存器進行寫入,讀出等等操作。每個寄存器都有自己固有的地址,通過C語言訪問這些地址就變得尤為重要。
    的頭像 發表于 12-26 09:55 ?1094次閱讀
    主站蜘蛛池模板: 久久女婷五月综合色啪| 国产成人久久精品激情| jizz老师| 俄罗斯12一15处交| 国产精品.XX视频.XXTV| 国产亚洲美女在线视频视频| 簧片高清在线观看| 免费三级播放器| 日本最新免费区中文| 校花的奶好大好浪| 一个人看的WWW高清电影| 99精品中文字幕在线观看| 高H各种PLAY全肉NP| 狠狠色综合久久丁香婷婷 | 99热久久这里只有精品| 超碰caoporn| 国产一级毛片在线| 老师的蕾丝小内内湿透了| 日韩 国产 欧美视频二区| 亚洲第一综合天堂另类专| 坠落的丝袜美人妻| 成人毛片免费播放| 护士WC女子撒尿| 暖暖 免费 高清 日本视频大全| 涩涩爱涩涩电影网站| 一个人日本的视频免费完整版| WWW久久只有这里有精品| 国产午夜电影在线观看不卡| 麻豆一区二区三区蜜桃免费| 色呦呦人人视频| 中文字幕无码一区二区免费| 观赏女性排尿| 伦理片在线线手机版韩国免费6| 色尼玛亚洲综合| 18禁止看的免费污网站| 色呦呦人人视频| 一个人在线观看视频| 亚洲一级毛片免费在线观看| tube日本护士| 精子pk美女| 色妺妺免费影院|