99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

3天內不再提示

嵌入式系統(tǒng)中的優(yōu)化技巧

電子工程師 ? 來源:單片機匠人 ? 作者:黃忠老師 ? 2021-08-13 15:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式系統(tǒng)中由于資源比較有限,特別是內存資源,因此對程序運行的性能要求比較高。對執(zhí)行效率高的程序段所占用的空間和運行效率進行全方位的優(yōu)化,可以對程序運行的整體效率將產生可觀的提升。

1、循環(huán)緩沖區(qū)

在一些嵌入式的系統(tǒng)中,常常需要開辟一塊緩沖區(qū)保存數(shù)據。例如:對于數(shù)據采集系統(tǒng),需要將一定時間段內的數(shù)據放入一個內存區(qū)域中。這個內存區(qū)域的放置方法是從低地址開始放置,如果放滿了(到達了最高的地址),則需要從頭部的低地址開始重新放置。這樣的內存結構就組成了一個循環(huán)緩沖區(qū)。

在一般的嵌入式處理器中沒有硬件自動完成循環(huán)放置的功能,通常的做法是在程序的每次循環(huán)中都判斷緩沖區(qū)是否放滿了,顯然這樣的開銷很大。

如果要在程序中執(zhí)行緩沖區(qū)類型的操作,這些操作一般需要占用一塊連續(xù)的內存。在棧上分配的內存,一般只能在函數(shù)內部使用,函數(shù)退出的時候就會被釋放,因此不適合作為緩沖區(qū)使用。而在堆上的內存和靜態(tài)內存都可以作為緩沖區(qū)內存使用。

我們舉例來看下:

#define BUFFERSIZE 256

int x[BUFFERSIZE];

unsigned int k;

unsigned int i;

while(1)

{

k = i & (BUFFERSIZE-1);

x[k] = ImputData();

/*……*/

i++;

}

從程序中可見,數(shù)組x[]是作為程序的緩沖區(qū)使用的,而由于開始并沒有進行數(shù)組的初始化,x[]是一個建立在BSS段上的數(shù)組,其大小由BUFFERSIZE確定。

我們看循環(huán)內的操作,可以完成自動循環(huán)的過程,這個例程中,當i增加到256的時候,k作為數(shù)組下標,又會返回為0,i本身增加到最大值的時候也會變?yōu)?。

那么大家很容易看出來,由于不需要使用if做判斷,可以節(jié)省幾條程序指令的時間。對于這幾條指令看似節(jié)省的時間不多,但是由于上述語句執(zhí)行的頻率非常高,所以這些時間的節(jié)省占程序總運行時間的權重還是比較大的。尤其對于實時采樣處理問題,程序必須在指定時間內完成一系列的操作。所以對于執(zhí)行效率比較高的指令,哪怕只節(jié)省一條指令,對運行效率的提高都是很有意義的。

從以上的例子中可以看出,當進行程序優(yōu)化的時候,不僅需要考慮程序段運行的絕對時間,還應該考慮程序段運行的頻率。對于運行頻率非常高的程序,對其進行優(yōu)化會在很大的程度上提高系統(tǒng)的性能。

2、查表法

由于資源有限,程序的運行效率在嵌入式系統(tǒng)上比在PC上的程序開發(fā)更為重要。程序的運行速度和所占用的存儲器空間這兩個效率問題都是必須考慮的。嵌入式系統(tǒng)程序的運行速度與處理器頻率有關系;而程序所能占用的存儲器空間與ROMRAM的大小有關系。

在當前的嵌入式系統(tǒng)中,程序的運行速度比程序所占用的存儲器空間顯得更重要,一是存儲器方便擴展,二是存儲器的容量是比較容易控制,程序運行占用的處理器時間比較難控制。

在設計過程中,程序的容量和速度在很多時候是有些矛盾的,在程序中犧牲一定的存儲容量換取程序的運行速度,這對于嵌入式系統(tǒng)來說是有一定好處的。典型的例子就是查表法。

例如:在一個4位的二進制數(shù)中,確定有幾位為1,也就是要統(tǒng)計0x0~0xf中的任何一個數(shù),中間有幾個1。

典型的思路就是使用循環(huán)的方法讓程序在這個4位的數(shù)中依次查找各個位是否為1,最后累加得出1的數(shù)目。那么在實現(xiàn)這個簡單的功能的過程中,需要進行4次循環(huán)、4次判斷,這是有一定開銷的,占用了不少處理器的時間。從程序需要實現(xiàn)的功能考慮,輸入是一個4位的數(shù),范圍是0x0~0xf,輸出數(shù)的范圍是0~4,這實際上是完成了一種映射功能,可以換成第二種查表法的思路,就是構造一個16個元素的數(shù)組,可以通過數(shù)組得到結果。實際上數(shù)組的下標就是輸入的數(shù)值,而數(shù)組的元素就是輸出的數(shù)值。

那么很容易看出來,這種做法的優(yōu)點是每個數(shù)值的獲取非???,代價則是增加了一個有16個元素的數(shù)組。數(shù)組是預先固化好的常量,而不是程序動態(tài)生成的,這種利用靜態(tài)空間換取程序執(zhí)行時間的方式轉換后的程序執(zhí)行效率非常高。如果把它應用在使用頻率很高的程序中,就可以節(jié)省很多的系統(tǒng)開銷。

同樣,大家可以考慮一下如果是查找8位數(shù)中的1的個數(shù)怎么做?16位呢?如果變通。

3、針對循環(huán)執(zhí)行效率的優(yōu)化

循環(huán)是C語言程序中的常用語法功能,由于循環(huán)執(zhí)行的次數(shù)較多,占程序執(zhí)行時間的權重大,所以對循環(huán)的優(yōu)化是提高程序效率的關鍵點。

例如,

void change_list_value()

{

int i,count;

POSITION pos;

CPtrList* plist;

plist = get_start(pos);

for(i = 0; i < get_count(); i++) ? ? count = get_count(); ? ? ?

{ for(i = 0; i < count ; i++)

plist = get_next(pos); {}

set_val (plist);

}

return 0;

}

上面這個循環(huán)代碼左邊是原始寫法,右邊是改進的。可以發(fā)現(xiàn)循環(huán)中執(zhí)行的函數(shù)減少了,原來的get_count()函數(shù)從原來的內部轉移到了循環(huán)外部,也就是說這個循環(huán)函數(shù)改進后只執(zhí)行一次,如果這個鏈表中的元素有幾千個至幾萬個,那么第一段代碼比第二段代碼多執(zhí)行了幾千條幾萬條的語句,這樣會導致時間上巨大的開銷。

總結:在循環(huán)系統(tǒng)中,針對于循環(huán)條件,應該盡可能地使用臨時變量來替代函數(shù)調用,這樣可以在循環(huán)次數(shù)較多的情況下,減少大量不必要的函數(shù)調用。

你有沒有更好的優(yōu)化技巧也分享出

責任編輯:haq

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

    關注

    5150

    文章

    19665

    瀏覽量

    317451
  • 程序
    +關注

    關注

    117

    文章

    3826

    瀏覽量

    82965

原文標題:程序的優(yōu)化技巧

文章出處:【微信號:CanaanTech,微信公眾號:嘉楠科技】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Python在嵌入式系統(tǒng)的應用場景

    你想把你的職業(yè)生涯提升到一個新的水平?Python在嵌入式系統(tǒng)中正在成為一股不可缺少的新力量。盡管傳統(tǒng)上嵌入式開發(fā)更多地依賴于C和C++語言,Python的優(yōu)勢在于其簡潔的語法、豐富的庫和快速的開發(fā)周期,這使得它在某些
    的頭像 發(fā)表于 03-19 14:10 ?707次閱讀

    嵌入式系統(tǒng)存儲的軟件優(yōu)化策略

    嵌入式系統(tǒng)開發(fā)領域,存儲器作為信息交互的核心載體,其技術特性直接影響著系統(tǒng)性能與穩(wěn)定性。然而,有些人在面對Linux、安卓等復雜操作系統(tǒng)環(huán)境時,理解其存儲機制尚存局限,為突破這些技術
    發(fā)表于 02-28 14:17

    嵌入式系統(tǒng)的代碼優(yōu)化與壓縮技術

    在當今數(shù)字化時代,嵌入式系統(tǒng)廣泛應用于各個領域,從智能家居設備到工業(yè)控制系統(tǒng),從汽車電子到可穿戴設備,它們無處不在。而在嵌入式系統(tǒng)開發(fā)
    發(fā)表于 02-26 15:00

    如何提高嵌入式代碼質量?

    的錯誤和改進點,提高代碼的可讀性和健壯性。 4. 版本控制:使用版本控制系統(tǒng)如Git,可以追蹤代碼變更并輕松進行團隊協(xié)作,確保每個版本都是可控和可重現(xiàn)的。 優(yōu)化性能和資源利用率 在嵌入式
    發(fā)表于 01-15 10:48

    MPU在嵌入式系統(tǒng)的應用

    一、MPU的基本功能 微處理器單元(MPU)是嵌入式系統(tǒng)的大腦,負責執(zhí)行程序指令、處理數(shù)據和控制其他硬件設備。MPU的基本功能包括: 指令執(zhí)行:MPU能夠從存儲器讀取指令,解碼這些
    的頭像 發(fā)表于 01-08 09:26 ?901次閱讀

    如何優(yōu)化EEPROM的數(shù)據存儲策略

    。它廣泛應用于需要存儲少量數(shù)據的場合,如微控制器、傳感器和嵌入式系統(tǒng)。優(yōu)化EEPROM的數(shù)據存儲策略可以提高數(shù)據的可靠性、延長存儲器的使用壽命,并提高數(shù)據訪問效率。以下是一些
    的頭像 發(fā)表于 12-16 17:21 ?1374次閱讀

    什么是嵌入式人工智能

    嵌入式人工智能是指將人工智能技術應用于嵌入式系統(tǒng)的一種技術。嵌入式系統(tǒng)
    的頭像 發(fā)表于 12-11 09:23 ?993次閱讀
    什么是<b class='flag-5'>嵌入式</b>人工智能

    嵌入式系統(tǒng)開發(fā)與硬件的關系 嵌入式系統(tǒng)開發(fā)常見問題解決

    嵌入式系統(tǒng)開發(fā)與硬件的關系 嵌入式系統(tǒng)是專為特定應用設計的計算機系統(tǒng),它們通常嵌入在所控制的設備
    的頭像 發(fā)表于 12-09 09:38 ?960次閱讀

    mmc卡在嵌入式系統(tǒng)的使用

    隨著科技的發(fā)展,嵌入式系統(tǒng)在我們的日常生活扮演著越來越重要的角色。從智能手機到家用電器,再到工業(yè)控制系統(tǒng),嵌入式
    的頭像 發(fā)表于 11-25 09:58 ?1158次閱讀

    嵌入式系統(tǒng)與物聯(lián)網的結合

    隨著科技的飛速發(fā)展,嵌入式系統(tǒng)和物聯(lián)網(IoT)已經成為現(xiàn)代技術領域的重要組成部分。嵌入式系統(tǒng)是指嵌入到設備或
    的頭像 發(fā)表于 11-06 10:23 ?1109次閱讀

    什么是嵌入式?一文讀懂嵌入式主板

    在現(xiàn)代科技浪潮,嵌入式技術已成為支撐各種智能設備和系統(tǒng)運行的核心力量。那么,究竟什么是嵌入式?嵌入式
    的頭像 發(fā)表于 10-16 10:14 ?2601次閱讀

    嵌入式主板是什么意思?嵌入式主板全面解析

    嵌入式主板,通常被稱為嵌入式系統(tǒng)的核心組件,是一種用于控制和數(shù)據處理的計算機硬件,其設計旨在嵌入特定設備執(zhí)行專門任務。
    的頭像 發(fā)表于 09-30 10:05 ?1613次閱讀

    嵌入式系統(tǒng)的未來趨勢有哪些?

    會更加模塊化和集成化,允許更容易的硬件和軟件的切換和升級。這會提高系統(tǒng)的可維護性和可擴展性,會使得系統(tǒng)能夠適應不斷在變化的應用需求。 5. 生態(tài)可持續(xù)性與環(huán)保材料 在嵌入式系統(tǒng)的設計以
    發(fā)表于 09-12 15:42

    嵌入式系統(tǒng)的實時操作系統(tǒng)

    嵌入式RTOS是嵌入式應用程序運行、相互交互和與外界通信的底層軟件機制。在本節(jié),您將了解嵌入式軟件開發(fā)人員使用哪些流行RTOS以及它們運行的嵌入式
    的頭像 發(fā)表于 08-20 11:28 ?881次閱讀

    機器視覺在嵌入式的應用

    機器視覺在嵌入式系統(tǒng)的應用是一個廣泛而深入的話題,涉及到許多不同的領域和技術。 機器視覺在嵌入式系統(tǒng)
    的頭像 發(fā)表于 07-16 10:30 ?973次閱讀