機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
嵌入式C編程技術(六)
嵌入式C編程技術(六)
 更新時間:2008-8-18 14:36:35  點擊數(shù):42
【字體: 字體顏色
[編者按] 為使廣大嵌入式系統(tǒng)應用技術人員系統(tǒng)地了解和掌握一些先進應用、開發(fā)技術,本刊從創(chuàng)刊號起開辟《學習園地》欄目。上半年集中介紹嵌入式C編程技術(一)~(六),內容包括單片機C語言應用程序設計中的變量定義和變量空間、C語言編程技巧、函數(shù)有效使用及混合編程技術。 嵌入式C編程技術(六) 北京理工大學馬忠梅 (2)“Structure”型返回值 這部分考慮返回“Structure”型返回值的函數(shù)。例子如下所示: 1〖3〗#define BIG_DATA 5389〖1〗2〖3〗#define SMALL_DATA 145〖1〗3〖3〗#define OK 1〖1〗4〖3〗#define ERR -1〖1〗5〖1〗6〖3〗struct list{〖1〗7〖3〗int data_1;〖1〗8〖3〗int data_2;〖1〗9〖3〗long add;〖1〗10〖3〗long sub;〖1〗11〖3〗long mul;〖1〗12〖3〗long div;〖1〗13〖3〗};〖1〗14〖1〗15〖3〗int main()〖1〗16〖3〗{〖1〗17〖〗1〖〗struct list func_struct(struct list);〖1〗18〖〗1〖〗struct list before;〖1〗19〖〗1〖〗struct list after;〖1〗20〖〗1〖1〗21〖〗1〖〗before.data_1=BIG_DATA;〖1〗22〖〗1〖〗before.data_2=SMALL_DATA;〖1〗23〖〗1〖1〗24〖〗1〖〗after=func_struct(before);〖1〗25〖〗1〖〗if(after.add==before.add)〖1〗26〖〗1〖〗return(OK);〖1〗27〖〗1〖〗else〖1〗28〖〗1〖〗return(ERR);〖1〗29〖〗1〖〗}〖1〗30〖1〗31〖3〗struct list func_struct(struct list dat)〖1〗32〖3〗{〖1〗33〖〗1〖〗dat.add=dat.data_1+dat.data_2;〖1〗34〖〗1〖〗dat.sub=dat.data_1-dat.data_2;〖1〗35〖〗1〖〗dat.mul=dat.data_1*dat.data_2;〖1〗36〖〗1〖〗dat.div=dat.data_1/dat.data_2;〖1〗37〖〗1〖〗〖1〗38〖〗1〖〗return(dat);〖1〗39〖〗1〖〗}這個例子里,“func_main( )”函數(shù)調用返回“l(fā)ist”型結構值的“func_struct( )”函數(shù)。在程序的第24行調用“func_struct( )”函數(shù)。20字節(jié)的結構在調用“func_struct( )”函數(shù)之前拷貝到RAM中。 在這個例子中,“func_struct( )”函數(shù)的返回值結構賦給了“after”結構。像這種情況,也可以定義1個傳遞返回值地址的函數(shù),然后返回值返回到那個地址。下面的例子,函數(shù)“func_p_struct( )”是“func_struct( )”函數(shù)的改進版本。函數(shù)所做的第1件事就是把保存“before”和“after”結構的地址作為參數(shù)。只要傳遞6個字節(jié)。 1〖3〗#define BIG_DATA 5389〖1〗2〖3〗#define SMALL_DATA 145〖1〗3〖3〗#define OK 1〖1〗4〖3〗#define ERR -1〖1〗5〖1〗6〖3〗struct list{〖1〗7〖3〗int data_1;〖1〗8〖3〗int data_2;〖1〗9〖3〗long add;〖1〗10〖3〗long sub;〖1〗11〖3〗long mul;〖1〗12〖3〗long div;〖1〗13〖3〗};〖1〗14〖1〗15〖3〗int main()〖1〗16〖3〗{〖1〗17〖〗1〖〗void func_p_struct(struct list *,struct list *);〖1〗18〖〗1〖〗struct list before;〖1〗19〖〗1〖〗struct list after;〖1〗20〖〗1〖1〗21〖〗1〖〗before.data_1=BIG_DATA;〖1〗22〖〗1〖〗before.data_2=SMALL_DATA;〖1〗23〖〗1〖1〗24〖〗1〖〗func_p_struct(&before,&after);〖1〗25〖〗1〖〗if(after.add==before.add)〖1〗26〖〗1〖〗return(OK);〖1〗27〖〗1〖〗else〖1〗28〖〗1〖〗return(ERR);〖1〗29〖〗1〖〗}〖1〗30〖1〗31〖3〗void func_p_struct(struct list *in,struct list *out)〖1〗32〖3〗{〖1〗33〖〗1〖〗int a,b;〖1〗34〖〗1〖1〗35〖〗1〖〗a=out->data_1=in->data_1;〖1〗36〖〗1〖〗b=out->data_2=in->data_2;〖1〗37〖〗1〖1〗38〖〗1〖〗out->add=a+b;〖1〗39〖〗1〖〗out->sub=a-b;〖1〗40〖〗1〖〗out->mul=a*b;〖1〗41〖〗1〖〗out->div=a/b;〖1〗42〖〗1〖〗}在這個例子里,被調用函數(shù)傳遞的參數(shù)由前面例子的結構變化成結構的地址!癴unc_struct( )”的結果直接返回到“func_main( )”定義的“after”結構中。 四、 混合編程 在用C語言開發(fā)程序的過程中,有時感到速度達不到要求,如很明顯的顯示內容的更新或做顯示內容的移動。在這種情況下,可以找到速度的瓶頸函數(shù):數(shù)據移動和把顯示內容從內存移到顯示掃描存儲器的函數(shù)。見下面程序的“move( )”和“toscr( )”函數(shù),源程序名為step.c。 #include #include #define uchar unsigned char #define uint unsigned int #define SLAVE 0x01 #define SBUFF 0x1f #define RMOVE 0x0000 #define RBUFF 0x2000 #define GMOVE 0x4000 #define GBUFF 0x6000 #define GOFFSET GMOVE-RMOVE uchar data row,col; void move(uint src,uint dest,uint Length); void toscr(uint addr,uchar col1,uchar row1); void main() { uint data i,j,x,y,Length; uint data temp; row=2; col=8; temp=row*col*256; move(RBUFF,RMOVE,temp); move(GBUFF,GM
[1] [2] [3]  下一頁
  • 上一篇: 嵌入式C編程技術(五)
  • 下一篇: 嵌入式RTOS講座(1)
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

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

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

    網站經營許可證:浙B2-20080178-1