機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
嵌入式C編程技術(shù)(四)
嵌入式C編程技術(shù)(四)
 更新時間:2008-8-18 14:36:17  點擊數(shù):56
【字體: 字體顏色
[編者按] 為使廣大嵌入式系統(tǒng)應(yīng)用技術(shù)人員系統(tǒng)地了解和掌握一些先進(jìn)應(yīng)用、開發(fā)技術(shù),本刊從創(chuàng)刊號起開辟《學(xué)習(xí)園地》欄目。上半年集中介紹嵌入式C編程技術(shù)(一)~(六),內(nèi)容包括單片機(jī)C語言應(yīng)用程序設(shè)計中的變量定義和變量空間、C語言編程技巧、函數(shù)有效使用及混合編程技術(shù)。 嵌入式C編程技術(shù)(四) 北京理工大學(xué)馬忠梅 (2) 使用指針訪問結(jié)構(gòu)數(shù)組 這部分描述如何使用指針訪問“結(jié)構(gòu)數(shù)組”(其元素是結(jié)構(gòu)的數(shù)組)。圖3顯示如何定義1個結(jié)構(gòu)數(shù)組。這個例子定義了1個結(jié)構(gòu)數(shù)組array\[NPROC\]。它的元素標(biāo)識是“entry”,數(shù)組元素的個數(shù)由NPROC指定,存儲器要足夠大才可作為結(jié)構(gòu)數(shù)組的存儲空間。 #define NPROC 10 struct entry{/*entry 結(jié)構(gòu)的定義 */ char state; char name; int args; int regs\[10\]; }; struct entry array\[NPROC\];/*array\[\] 結(jié)構(gòu)數(shù)組定義*/ array\[0\]array\[1\]array\[NPROC-2\]array\[NPROC-1\]〖〗state〖〗name[]args[]Reg\[0\][]…[]regs\[9\]state〖〗name[]args[]Reg\[0\][]…[]regs\[9\]\: \: \:state〖〗name[]args[]Reg\[0\][]…[]regs\[9\]state〖〗name[]args[]Reg\[0\][]…[]regs\[9\]圖3結(jié)構(gòu)數(shù)組的定義 通過乘法可計算訪問array\[ \] 結(jié)構(gòu)數(shù)組的“init”元素所在的地址,過程如下: · 完成乘法,找到array\[ init\] 的偏移量。 · 取得array\[ \] 起始地址。 · 把array\[init\]的偏移量加到array\[ \] 起始地址上。 · 另加上附加的偏移量,訪問下一個所需要的元素。 下面是訪問array\[ \] 結(jié)構(gòu)數(shù)組的程序: 程序1: 1〖3〗#define uint unsigned int〖1〗2〖3〗#define NUM 10〖1〗3〖3〗〖1〗4〖3〗struct entry{〖1〗5〖3〗char state;〖1〗6〖3〗char name;〖1〗7〖3〗uint args;〖1〗8〖3〗};〖1〗9〖1〗10〖3〗struct entry array\[NUM\];〖1〗11〖3〗uint cnt;〖1〗12〖3〗〖1〗13〖3〗void func1(uint init)〖1〗14〖3〗{〖1〗15〖〗1〖〗bit flag=0;〖1〗16〖〗1〖1〗17〖〗1〖〗if (array\[init\].state==`0' 〖1〗18〖〗1〖〗 array\[init\].name==`0' 〖1〗19〖〗1〖〗 array\[init\].args==0)〖1〗20〖〗1〖〗flag=1;〖1〗21〖〗1〖〗else〖1〗22〖〗1〖〗++cnt;〖1〗23〖〗1〖〗} MODULE INFORMATION:STATIC OVERLAYABLE CODE SIZE= 68\ \ \ \ CONSTANT SIZE=\ \ \ \ \ \ \ \ XDATA SIZE=\ \ \ \ \ \ \ \ PDATA SIZE=\ \ \ \ \ \ \ \ DATA SIZE=42 \ \ \ \ IDATA SIZE=\ \ \ \ \ \ \ \ BIT SIZE=\ \ \ \ 1 END OF MODULE INFORMATION. 程序2: 1〖3〗#define uint unsigned int〖1〗2〖3〗#define NUM 10〖1〗3〖3〗〖1〗4〖3〗struct entry{〖1〗5〖3〗char state;〖1〗6〖3〗char name;〖1〗7〖3〗uint args;〖1〗8〖3〗};〖1〗9〖3〗〖1〗10〖3〗struct entry array\[NUM\];〖1〗11〖3〗uint cnt;〖1〗12〖3〗〖1〗13〖3〗void func2(uint init)〖1〗14〖3〗{〖1〗15〖〗1〖〗bit flag=0;〖1〗16〖〗1〖〗struct entry *base;〖1〗17〖〗1〖〗〖1〗18〖〗1〖〗base=&array\[init\];〖1〗19〖〗1〖〗if (base->state==`0' 〖1〗20〖〗1〖〗 base->name==`0' 〖1〗21〖〗1〖〗 base->args==0)〖1〗22〖〗1〖〗flag=1;〖1〗23〖〗1〖〗else〖1〗24〖〗1〖〗++cnt;〖1〗25〖〗1〖〗} MODULE INFORMATION:STATIC OVERLAYABLE CODE SIZE= 58\ \ \ \ CONSTANT SIZE=\ \ \ \ \ \ \ \ XDATA SIZE=\ \ \ \ \ \ \ \ PDATA SIZE=\ \ \ \ \ \ \ \ DATA SIZE=42 \ \ \ \ IDATA SIZE=\ \ \ \ \ \ \ \ BIT SIZE=\ \ \ \ 1 END OF MODULE INFORMATION. 程序1的func1( )函數(shù)訪問結(jié)構(gòu)數(shù)組元素;“if”條件表達(dá)式訪問結(jié)構(gòu)數(shù)組的“state ”、“name”和“args”成員。每次訪問1個成員,func1( )都要進(jìn)行上述的地址計算。在“if”條件表達(dá)式中使用的結(jié)構(gòu)數(shù)組“init”元素的下標(biāo)是1個不變量。然而在條件表達(dá)式中,為找“array\[ \]”結(jié)構(gòu)數(shù)組的第“init”結(jié)構(gòu)地址的計算進(jìn)行了3次,每次得到同樣的結(jié)果。 程序2的func2( )使用1個變量來訪問結(jié)構(gòu)數(shù)組的元素!癮rray\[ init\]”結(jié)構(gòu)數(shù)組的地址賦給“base”指針,指針指向“entry”結(jié)構(gòu)。地址采用這種方法,上述的地址計算過程只要1。后續(xù)的訪問結(jié)構(gòu)數(shù)組的“state ”、“name”和“args”成員就可基于“base”指針,這可相應(yīng)減少運行時間。 訪問結(jié)構(gòu)數(shù)組時,使用指針不僅可以減少運行時間而且可以減少代碼長度。從這個意義上講,使用指針減少了地址計算所需的時間。使用指針訪問結(jié)構(gòu)數(shù)組元素也可以看作是消除公共表達(dá)式的另一種方法。 (3) 指針嵌套和處理效率的降低 指針變量方便、有效。盡管如此,取決于如何使用指針,它們還有可能降低效率。這部分解釋了由于使用嵌套指針,使得效率是如何下降的。 在C語言中,指針變量的嵌套可很容易地訪問復(fù)雜數(shù)據(jù)結(jié)構(gòu)的元素,如圖4所示。當(dāng)指針嵌套太深,常有結(jié)構(gòu)的訪問,處理效率就受到影響。 #define LEN 20 struct entry{ int state; int next; int prev; struct{ int addr; char name\[LEN\]; }*list1; str
[1] [2] [3] [4]  下一頁
  • 上一篇: 針對FPGA實現(xiàn)安全的系統(tǒng)內(nèi)編程功能
  • 下一篇: 嵌入式C編程技術(shù)(五)
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1