哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

我們舉例來看下:

#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ū)使用的,而由于開始并沒有進(jìn)行數(shù)組的初始化,x[]是一個建立在BSS段上的數(shù)組,其大小由BUFFERSIZE確定。

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

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

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

2、查表法

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

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

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

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

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

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

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

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

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

例如,

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)代碼左邊是原始寫法,右邊是改進(jìn)的??梢园l(fā)現(xiàn)循環(huán)中執(zhí)行的函數(shù)減少了,原來的get_count()函數(shù)從原來的內(nèi)部轉(zhuǎn)移到了循環(huán)外部,也就是說這個循環(huán)函數(shù)改進(jìn)后只執(zhí)行一次,如果這個鏈表中的元素有幾千個至幾萬個,那么第一段代碼比第二段代碼多執(zhí)行了幾千條幾萬條的語句,這樣會導(dǎo)致時(shí)間上巨大的開銷。

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

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

責(zé)任編輯:haq

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

    關(guān)注

    5209

    文章

    20658

    瀏覽量

    337088
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3848

    瀏覽量

    85472

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

    知識分享-嵌入式系統(tǒng)可靠性模型

    嵌入式系統(tǒng)可靠性設(shè)計(jì)技術(shù)及案例解析1.3嵌入式系統(tǒng)可靠性模型嵌入式系統(tǒng)可靠性模型分為兩種:串聯(lián)結(jié)
    的頭像 發(fā)表于 03-11 16:43 ?393次閱讀
    知識分享-<b class='flag-5'>嵌入式</b><b class='flag-5'>系統(tǒng)</b>可靠性模型

    STM32開發(fā)的五大嵌入式系統(tǒng)

    要求極高的應(yīng)用場景 uClinux: 適用場景:針對資源受限的嵌入式環(huán)境進(jìn)行了優(yōu)化,可以在RAM和ROM資源較少的情況下運(yùn)行,因此適合于資源受限的嵌入式設(shè)備。 適用于各種嵌入式
    發(fā)表于 01-21 10:48

    嵌入式系統(tǒng)安全設(shè)計(jì)原則

    隨著物聯(lián)網(wǎng)、工業(yè)控制和智能設(shè)備的普及,嵌入式系統(tǒng)的安全問題越來越突出。一個小小的漏洞,就可能導(dǎo)致設(shè)備被入侵、數(shù)據(jù)泄露,甚至對人身安全產(chǎn)生威脅。因此,從設(shè)計(jì)階段開始就考慮安全,是每一個嵌入式開發(fā)者必須
    的頭像 發(fā)表于 01-19 09:06 ?482次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>系統(tǒng)</b>安全設(shè)計(jì)原則

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

    、實(shí)現(xiàn)和部署,還包括硬件選擇、軟件設(shè)計(jì)、測試、集成和維護(hù)等流程?。 定義和背景 嵌入式應(yīng)用開發(fā)是指將軟件部署到嵌入式系統(tǒng),這些系統(tǒng)廣泛
    發(fā)表于 01-12 16:13

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

    目標(biāo)板可執(zhí)行文件)、調(diào)試技巧(GDB 遠(yuǎn)程調(diào)試)。? 系統(tǒng)裁剪與優(yōu)化嵌入式硬件資源有限,需學(xué)會定制最小 Linux 系統(tǒng)。通過 BusyBox 構(gòu)建根文件
    發(fā)表于 12-16 10:42

    系統(tǒng)嵌入式的學(xué)習(xí)路線

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

    什么是嵌入式操作系統(tǒng)

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

    嵌入式和FPGA的區(qū)別

    。 在當(dāng)今智能化時(shí)代,嵌入式系統(tǒng)和FPGA技術(shù)都是電子系統(tǒng)設(shè)計(jì)的重要組成部分,但許多工程師和技術(shù)愛好者常常對兩者的區(qū)別和應(yīng)用場景感到困惑。本文將深入解析
    發(fā)表于 11-19 06:55

    嵌入式系統(tǒng)的定義和應(yīng)用領(lǐng)域

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

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

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

    嵌入式實(shí)時(shí)操作系統(tǒng)的特點(diǎn)

    、VxWorks 和 QNX Neutrino 等,它們被廣泛應(yīng)用于汽車電子、工業(yè)自動化、醫(yī)療設(shè)備、消費(fèi)電子和物聯(lián)網(wǎng)等領(lǐng)域的嵌入式系統(tǒng)
    發(fā)表于 11-13 06:30

    嵌入式電力儀表在配電系統(tǒng)的應(yīng)用與選型

    在現(xiàn)代配電系統(tǒng),對電力參數(shù)的精確測量、電能計(jì)量以及設(shè)備運(yùn)行狀態(tài)的可靠監(jiān)控,是保障供電安全、實(shí)現(xiàn)能效管理的基礎(chǔ)。各類嵌入式電力儀表作為關(guān)鍵測量元件,廣泛應(yīng)用于進(jìn)線柜、出線柜等場景,為系統(tǒng)
    的頭像 發(fā)表于 09-26 09:37 ?751次閱讀
    <b class='flag-5'>嵌入式</b>電力儀表在配電<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>中</b>的應(yīng)用與選型

    是德示波器MSOX3052T在嵌入式系統(tǒng)的應(yīng)用

    在現(xiàn)代電子系統(tǒng)設(shè)計(jì),嵌入式系統(tǒng)已成為智能設(shè)備與物聯(lián)網(wǎng)的核心。面對日益復(fù)雜的硬件架構(gòu)與軟件算法,調(diào)試工具的性能直接決定了產(chǎn)品開發(fā)周期與最終可靠性。是德科技(Keysight)推出的MS
    的頭像 發(fā)表于 08-27 17:38 ?798次閱讀
    是德示波器MSOX3052T在<b class='flag-5'>嵌入式</b><b class='flag-5'>系統(tǒng)</b><b class='flag-5'>中</b>的應(yīng)用

    Linux嵌入式和單片機(jī)嵌入式的區(qū)別?

    Linux嵌入式與單片機(jī)嵌入式在多個方面存在顯著的區(qū)別,以下是詳細(xì)的比較和歸納: 一、基本概念 1. Linux嵌入式: 定義:將Linux操作系統(tǒng)運(yùn)行在
    發(fā)表于 06-20 09:46

    運(yùn)行在嵌入式系統(tǒng)上的emApps

    在當(dāng)今快節(jié)奏的嵌入式系統(tǒng)世界,靈活性和適應(yīng)性是嵌入式系統(tǒng)實(shí)現(xiàn)的關(guān)鍵。SEGGER推出了其最新創(chuàng)新:Embedded apps(emApps
    的頭像 發(fā)表于 06-18 09:53 ?1064次閱讀
    運(yùn)行在<b class='flag-5'>嵌入式</b><b class='flag-5'>系統(tǒng)</b>上的emApps
    石屏县| 安顺市| 时尚| 泊头市| 云和县| 宁都县| 泰顺县| 西城区| 舟曲县| 荣昌县| 荆门市| 平陆县| 且末县| 常宁市| 三门县| 英超| 稻城县| 定远县| 巴林右旗| 友谊县| 大姚县| 栾川县| 江华| 东兰县| 榆社县| 武功县| 郎溪县| 教育| 梁山县| 井陉县| 舞钢市| 客服| 九江县| 吉隆县| 青冈县| 攀枝花市| 绥棱县| 竹山县| 临洮县| 侯马市| 临清市|