国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

嵌入式系統中的優化技巧

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

掃碼添加小助手

加入工程師交流群

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

1、循環緩沖區

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

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

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

我們舉例來看下:

#define BUFFERSIZE 256

int x[BUFFERSIZE];

unsigned int k;

unsigned int i;

while(1)

{

k = i & (BUFFERSIZE-1);

x[k] = ImputData();

/*……*/

i++;

}

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

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

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

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

2、查表法

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

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

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

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

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

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

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

3、針對循環執行效率的優化

循環是C語言程序中的常用語法功能,由于循環執行的次數較多,占程序執行時間的權重大,所以對循環的優化是提高程序效率的關鍵點。

例如,

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;

}

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

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

你有沒有更好的優化技巧也分享出

責任編輯:haq

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

    關注

    5199

    文章

    20454

    瀏覽量

    334229
  • 程序
    +關注

    關注

    117

    文章

    3846

    瀏覽量

    85256

原文標題:程序的優化技巧

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    STM32開發的五大嵌入式系統

    要求極高的應用場景 uClinux: 適用場景:針對資源受限的嵌入式環境進行了優化,可以在RAM和ROM資源較少的情況下運行,因此適合于資源受限的嵌入式設備。 適用于各種嵌入式
    發表于 01-21 10:48

    什么是嵌入式應用開發?

    、實現和部署,還包括硬件選擇、軟件設計、測試、集成和維護等流程?。 定義和背景 嵌入式應用開發是指將軟件部署到嵌入式系統,這些系統廣泛
    發表于 01-12 16:13

    從小白到大牛:Linux嵌入式系統開發的完整指南

    目標板可執行文件)、調試技巧(GDB 遠程調試)。? 系統裁剪與優化嵌入式硬件資源有限,需學會定制最小 Linux 系統。通過 BusyBox 構建根文件
    發表于 12-16 10:42

    系統嵌入式的學習路線

    的知識太多,太雜,太廣,很多嵌入式初學者陷入嵌入式知識的海洋,東學一點,西學一點,找不到學習的方向。 我從事嵌入式開發工作有10年,嵌入式
    發表于 12-16 07:49

    什么是嵌入式操作系統

    要理解嵌入式操作系統(Embedded Operating System,簡稱 RTOS/EOS),我們可以從本質定義→核心區別→實際作用→典型特征→嵌入式開發場景適配,五個維度來拆解, 一
    發表于 12-09 10:33

    嵌入式和FPGA的區別

    。 在當今智能化時代,嵌入式系統和FPGA技術都是電子系統設計的重要組成部分,但許多工程師和技術愛好者常常對兩者的區別和應用場景感到困惑。本文將深入解析
    發表于 11-19 06:55

    嵌入式系統的定義和應用領域

    嵌入式系統,簡而言之,就是一種專為特定設備或裝置設計的計算機系統。它們通常配備一個嵌入式處理器,其控制程序被存儲在ROM。這些
    發表于 11-17 06:49

    嵌入式開發的關鍵點介紹

    嵌入式開發在現代科技扮演著非常重要的角色。隨著物聯網的發展,嵌入式系統的需求也越來越大。嵌入式開發不僅需要開發人員具備深入的硬件知識和編程
    發表于 11-13 08:12

    嵌入式實時操作系統的特點

    、VxWorks 和 QNX Neutrino 等,它們被廣泛應用于汽車電子、工業自動化、醫療設備、消費電子和物聯網等領域的嵌入式系統
    發表于 11-13 06:30

    嵌入式電力儀表在配電系統的應用與選型

    在現代配電系統,對電力參數的精確測量、電能計量以及設備運行狀態的可靠監控,是保障供電安全、實現能效管理的基礎。各類嵌入式電力儀表作為關鍵測量元件,廣泛應用于進線柜、出線柜等場景,為系統
    的頭像 發表于 09-26 09:37 ?640次閱讀
    <b class='flag-5'>嵌入式</b>電力儀表在配電<b class='flag-5'>系統</b><b class='flag-5'>中</b>的應用與選型

    運行在嵌入式系統上的emApps

    在當今快節奏的嵌入式系統世界,靈活性和適應性是嵌入式系統實現的關鍵。SEGGER推出了其最新創新:Embedded apps(emApps
    的頭像 發表于 06-18 09:53 ?875次閱讀
    運行在<b class='flag-5'>嵌入式</b><b class='flag-5'>系統</b>上的emApps

    嵌入式編程設計模式

    嵌入式編程設計模式,介紹如何使用設計模式為嵌入式系統創建高效且優化的C語言設計。 純分享貼,有需要可以直接下載附件獲取完整資料! (如果內容有幫助可以關注、點贊、評論支持一下哦~
    發表于 04-15 14:47

    Python在嵌入式系統的應用場景

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

    如何正確選擇嵌入式文件系統

    Linux嵌入式系統,文件系統和緩存機制常導致數據存儲穩定性問題。本文通過案例分析原因,對比不同文件系統特性,為開發者提供
    的頭像 發表于 03-17 11:35 ?1111次閱讀
    如何正確選擇<b class='flag-5'>嵌入式</b>文件<b class='flag-5'>系統</b>?

    嵌入式系統開發圣經【干貨】

    內容包括:嵌入式系統的介紹、嵌入式SoC硬件系統概論、嵌入式系統軟件開發。適用于產品主管、
    發表于 03-12 13:58