新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機C語言中 static 用法小結

        單片機C語言中 static 用法小結

        作者: 時間:2016-11-18 來源:網絡 收藏
        一、c程序存儲空間布局

        C程序一般由下列部分組成:

        本文引用地址:http://www.104case.com/article/201611/315900.htm

        1)正文段——CPU執行的機器指令部分;少量的液晶字庫等也放在這里;只讀,防止程序由于意外事故而修改自身指令;
        2)初始化數據段(數據段)——在程序中所有賦了初值的全局變量,存放在這里。
        3)非初始化數據段(bss段)——在程序中沒有初始化的全局變量;內核將此段初始化為0。
        4)棧——增長方向:自頂向下增長;自動變量以及每次函數調用時所需要保存的信息(返回地址;環境信息)。
        5)堆——動態存儲分。

        |-----------|
        | |
        |-----------|
        | 棧 |
        |-----------|
        | | |
        | |/ |
        | |
        | /| |
        | | |
        |-----------|
        | 堆 |
        |-----------|
        | 未初始化 |
        |-----------|
        | 初始化 |
        |-----------|
        | 正文段 |
        |-----------|

        二、static的作用
        1、內部標識,也就是說無論是定義函數還是變量,只要有了static,就不能被外部調用;
        舉例說明:static char i = 0;
        static int putchar(int c );
        {
        static char a = 0;
        ....a++;.....

        }
        extern sprintf(const char *format , ... );
        {
        putchar(...);
        }
        假設以上變量及函數都在uart.c的文件中main()函數是在main.c中,那么,在main中只能調用sprintf,而不能直接調用putchar,也不能直接用變量 i。

        2、靜態變量,我認為這個是針對于static定義的局部變量而言的,除了只能在定義它的函數內局部使用外其他的和全局變量是一樣的(只在第一次調用時初始化,用完后空間不會釋放,已存值不會改變)。比方說以上的a在第一次調用時被初始化為0.然后自加為1,那么第二次調用時(無論誰調用)a的初始值就是1,運行完就是2。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 方正县| 阿拉善盟| 汶川县| 二手房| 略阳县| 米脂县| 蒙阴县| 元谋县| 永吉县| 五大连池市| 当阳市| 仁化县| 黄平县| 南和县| 娱乐| 阜康市| 涿鹿县| 务川| 伊宁市| 泾源县| 宜宾市| 淳安县| 元朗区| 高青县| 佛学| 宝丰县| 屏东市| 汕尾市| 涞水县| 蓬莱市| 泾阳县| 柘城县| 六枝特区| 葫芦岛市| 古浪县| 麦盖提县| 嘉荫县| 马鞍山市| 资中县| 汶川县| 泸州市|