1. gzyueqian
      13352868059

      如何學習嵌入式開發程序設計中的函數?

      更新時間: 2019-04-03 15:06:18來源: 嵌入式培訓瀏覽量:4952

        前面提到C語言對嵌入式開發的重要性,作為C語言程序設計的核心的函數,也是我們需要了解的部分。如何學習嵌入式開發程序設計中的函數?粵嵌嵌入式培訓怎么做到的。


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


        函數的格式


        嵌入式開發C語言課程給出了函數的定義性說明和原型說明。


        1)定義性說明格式


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

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


        2)原型說明格式


        Extern     類型說明符[修飾符]     標識符(參數表){函數體}


        其中:

        類型說明符、標識符、參數表、函數體這幾項是函數定義性說明中必不可少的部分。可在程序源文件的任意處進行函數的定義說明,并被分配內存。


        有簡單類型,符合類型。為說明函數返回的是指針,在函數名前加星號。


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


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

        函數體部分由符合語句構成。


        存儲類說明符部分。


        extern——C語言的函數否是全程需存在的,在不加任何存儲類說明的情況下,都是全程序可見的。但是,如果程序為多源文件時,非定義函數的文件要調用該函數時,須加原型說明。另外,即使在定義函數的源文件中,如果在函數定義之前超前調用,也需要加原型說明,而且原型說明中必須加存儲類說明符extern。


        static——為了提高函數的安全性,在進行函數的定義性說明時,加上static存儲類說明符,表示在本文件定義前和非函數定義文件中,該函數將不能被調用。它可定義需要具有內部鏈接的全局變量或者函數,即它們應在一個單一的編譯單元里是可見的,但在外部則不可見。使用static關鍵詞限制變量的范圍。


        修飾符對函數起修飾作用。


        interrupt——為重要的修飾符。它將函數修飾為中斷函數。中斷函數的特點是返回類型和參數均必須為void。函數經過interrupt修飾后,程序員只編寫中斷服務程序的主題部分,中斷服務程序中的保護現場前綴段和恢復現場的后綴段,均由編譯程序完成。另外,編譯程序還將ret指令改為reti指令。


        near、far和huge——規定函數的地址類型。它將覆蓋存儲模式規定的函數缺省地址類型。它指明函數和被調用函數之間的距離的遠近。near為近調用(16位段內地址);far為原調用(32位段間地址);huge為規范化遠調用(32為段間地址規范地址)。


        示例:本函數為LED燈亮、滅顯示的控制程序段,是帶參數的函數。


        void Led_Display(int LedStatus)                 /函數定義,參數為int LedStatus,用于表示LED狀態,根據參數點亮熄滅LED1或LED2/
        (
        led_state=LedStatus;                           /將傳遞來的參數值賦給LED狀態全局變量*/
        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滅/
        }
        示例       本函數為鍵盤初始化程序,該函數不需要參數。
        void        KeyboardInt(void)
        {
        Int value;
        rI_ISPC=BIT_EINT1           //清除中斷掛起位
        rEXTINTPND=0xF;                    //設置EXTINTPND寄存器
        value=key_read();
        if(value>-1)
        Digit_Led_Symbol(value);
        rI_ISPC=BIT_EINT1;                 //清除中斷掛起位
        rINTCON=0x1;

        }


        如你想學好嵌入式開發,除了掌握C語言,來粵嵌嵌入式培訓無疑也是非常好的途徑之一。

      免費預約試聽課

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

      
      

      1. 综合欧美亚洲日本少妇 | 午夜福利啪国产 | 污污污网站在线免费观看 | 最新国产99热这里只有精品 | 天堂在线天堂在线视频 | 欧美高清免费A√在线 |