1. gzyueqian
      18529173453

      如何學(xué)習(xí)嵌入式開(kāi)發(fā)程序設(shè)計(jì)中的函數(shù)?

      更新時(shí)間: 2019-04-03 15:06:18來(lái)源: 嵌入式培訓(xùn)瀏覽量:5037

        前面提到C語(yǔ)言對(duì)嵌入式開(kāi)發(fā)的重要性,作為C語(yǔ)言程序設(shè)計(jì)的核心的函數(shù),也是我們需要了解的部分。如何學(xué)習(xí)嵌入式開(kāi)發(fā)程序設(shè)計(jì)中的函數(shù)?粵嵌嵌入式培訓(xùn)怎么做到的。


        一個(gè)較大的C語(yǔ)言程序一般由一個(gè)主函數(shù)和若干個(gè)子函數(shù)組成,每個(gè)函數(shù)實(shí)現(xiàn)一個(gè)特定的功能。主函數(shù)可調(diào)用其他函數(shù),其它函數(shù)之間也可相互調(diào)用。函數(shù)庫(kù)為了減輕編程工作量,將一些常用功能的函數(shù)放在函數(shù)庫(kù)中供公共使用。好的程序盡量使用函數(shù)和函數(shù)庫(kù)。函數(shù)和函數(shù)庫(kù)是基于C語(yǔ)言編程的基本單元。


        函數(shù)的格式


        嵌入式開(kāi)發(fā)C語(yǔ)言課程給出了函數(shù)的定義性說(shuō)明和原型說(shuō)明。


        1)定義性說(shuō)明格式


        [存儲(chǔ)類說(shuō)明符]     類型說(shuō)明符    [修飾符] 標(biāo)識(shí)符 (參數(shù)表){函數(shù)體}
        其中:
        存儲(chǔ)類說(shuō)明符有static和extern2種。
        類型說(shuō)明符有char、unsigned、char、int、unsigned long、float、double、long double、struct、union、void等幾種。
        標(biāo)識(shí)符有函數(shù)名、。函數(shù)名、(。函數(shù)名)、。(。函數(shù)名)等幾種。

        修飾符有Interrupt、near、far、huge等幾種。


        2)原型說(shuō)明格式


        Extern     類型說(shuō)明符[修飾符]     標(biāo)識(shí)符(參數(shù)表){函數(shù)體}


        其中:

        類型說(shuō)明符、標(biāo)識(shí)符、參數(shù)表、函數(shù)體這幾項(xiàng)是函數(shù)定義性說(shuō)明中必不可少的部分??稍诔绦蛟次募娜我馓庍M(jìn)行函數(shù)的定義說(shuō)明,并被分配內(nèi)存。


        有簡(jiǎn)單類型,符合類型。為說(shuō)明函數(shù)返回的是指針,在函數(shù)名前加星號(hào)。


        標(biāo)識(shí)符部分用以說(shuō)明函數(shù)名。但函數(shù)名前加分割符“*”時(shí),說(shuō)明返回值是指針。被圓括號(hào)起如(*函數(shù)名),則標(biāo)識(shí)符是函數(shù)指針。如果括號(hào)外再加分割符“*”,如“*(*函數(shù)名)”,則標(biāo)識(shí)符是函數(shù)指針,且函數(shù)的返回指針類型。


        參數(shù)表是傳入函數(shù)的形式參數(shù)表。形式參數(shù)表格式為:
       ?。愋驼f(shuō)明符       變量名 [,類型說(shuō)明符 變量名]…)或(void)或()
        其中(void)說(shuō)明無(wú)參數(shù)傳入。允許用空格代替void作為參數(shù)表,即()。

        函數(shù)體部分由符合語(yǔ)句構(gòu)成。


        存儲(chǔ)類說(shuō)明符部分。


        extern——C語(yǔ)言的函數(shù)否是全程需存在的,在不加任何存儲(chǔ)類說(shuō)明的情況下,都是全程序可見(jiàn)的。但是,如果程序?yàn)槎嘣次募r(shí),非定義函數(shù)的文件要調(diào)用該函數(shù)時(shí),須加原型說(shuō)明。另外,即使在定義函數(shù)的源文件中,如果在函數(shù)定義之前超前調(diào)用,也需要加原型說(shuō)明,而且原型說(shuō)明中必須加存儲(chǔ)類說(shuō)明符extern。


        static——為了提高函數(shù)的安全性,在進(jìn)行函數(shù)的定義性說(shuō)明時(shí),加上static存儲(chǔ)類說(shuō)明符,表示在本文件定義前和非函數(shù)定義文件中,該函數(shù)將不能被調(diào)用。它可定義需要具有內(nèi)部鏈接的全局變量或者函數(shù),即它們應(yīng)在一個(gè)單一的編譯單元里是可見(jiàn)的,但在外部則不可見(jiàn)。使用static關(guān)鍵詞限制變量的范圍。


        修飾符對(duì)函數(shù)起修飾作用。


        interrupt——為重要的修飾符。它將函數(shù)修飾為中斷函數(shù)。中斷函數(shù)的特點(diǎn)是返回類型和參數(shù)均必須為void。函數(shù)經(jīng)過(guò)interrupt修飾后,程序員只編寫中斷服務(wù)程序的主題部分,中斷服務(wù)程序中的保護(hù)現(xiàn)場(chǎng)前綴段和恢復(fù)現(xiàn)場(chǎng)的后綴段,均由編譯程序完成。另外,編譯程序還將ret指令改為reti指令。


        near、far和huge——規(guī)定函數(shù)的地址類型。它將覆蓋存儲(chǔ)模式規(guī)定的函數(shù)缺省地址類型。它指明函數(shù)和被調(diào)用函數(shù)之間的距離的遠(yuǎn)近。near為近調(diào)用(16位段內(nèi)地址);far為原調(diào)用(32位段間地址);huge為規(guī)范化遠(yuǎn)調(diào)用(32為段間地址規(guī)范地址)。


        示例:本函數(shù)為L(zhǎng)ED燈亮、滅顯示的控制程序段,是帶參數(shù)的函數(shù)。


        void Led_Display(int LedStatus)                 /函數(shù)定義,參數(shù)為int LedStatus,用于表示LED狀態(tài),根據(jù)參數(shù)點(diǎn)亮熄滅LED1或LED2/
        (
        led_state=LedStatus;                           /將傳遞來(lái)的參數(shù)值賦給LED狀態(tài)全局變量*/
        if((LedStatus&0x01)==0x01)
        rPDATB=rPDATB&0x5FF;                 /LED1亮/
        else
        rPDATB=rPDATB|0x200;                    /LED1滅/
        if((LedStatus&0x01)==0x02)
        rPDATB=rPDATB&0x3FF;                 /LED2亮/
        else
        rPDATB=rPDATB|0x400;                    /LED2滅/
        }
        示例       本函數(shù)為鍵盤初始化程序,該函數(shù)不需要參數(shù)。
        void        KeyboardInt(void)
        {
        Int value;
        rI_ISPC=BIT_EINT1           //清除中斷掛起位
        rEXTINTPND=0xF;                    //設(shè)置EXTINTPND寄存器
        value=key_read();
        if(value>-1)
        Digit_Led_Symbol(value);
        rI_ISPC=BIT_EINT1;                 //清除中斷掛起位
        rINTCON=0x1;

        }


        如你想學(xué)好嵌入式開(kāi)發(fā),除了掌握C語(yǔ)言,來(lái)粵嵌嵌入式培訓(xùn)無(wú)疑也是非常好的途徑之一。

      免費(fèi)預(yù)約試聽(tīng)課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 久久精品99久久无色码中文字幕 | 午夜福利国产小视频 | 视频二区丝袜国产欧美日韩 | 日本久久久免费精品 | 亚洲变态另类天堂AV手机版 | 婷婷中文字幕精品一区二区 |