新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 關于STM32庫中 __IO 修飾符(volatile修飾符,反復無常的意思)

        關于STM32庫中 __IO 修飾符(volatile修飾符,反復無常的意思)

        作者: 時間:2016-11-10 來源:網絡 收藏
        STM32例子代碼中會有像這樣的代碼 static __IO uint32_t TimingDelay; 這里邊的__IO修飾符不好理解,單從字面可以看出是為IO相關,查其標準庫可以得知這個__IO原來是在Core_cm3.h中被重定義,其實就是volatile,句子如下
        /* IO definitions (access restrictions to peripheral registers) */
        #ifdef __cplusplus
        #define __I volatile /*!< defines read only permissions */
        #else
        #define __I volatile const /*!< defines read only permissions */
        #endif
        #define __O volatile /*!< defines write only permissions */
        #define __IO volatile /*!< defines read / write permissions */
        不難看出這些修飾管是用于指示編譯器在編譯時如何對變量進行操作。volatile 的作用就是指示編譯器不要因優化而省略此指令,必須每次都直接讀寫其值。
        寫一段測試代碼如下
        u8 test;
        test = 1;
        test = 2;
        test = 3;
        設置優化級別中級
        運行后test會被直接取值為3 只有最后一個語句被編譯
        如用volatile
        volatile u8 test;
        test = 1;
        test = 2;
        test = 3;
        則所有語句都會被編譯。test先后被設置成1、2、3
        由此可以看出這個作用在IO操作,寄存器操作,特殊變量,多線程變量讀寫都是很重要。


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 平原县| 兰溪市| 临汾市| 来安县| 大余县| 平山县| 政和县| 广州市| 中宁县| 彭阳县| 淅川县| 桃江县| 平江县| 天峨县| 蕉岭县| 巩义市| 宜宾县| 周口市| 孟州市| 丰顺县| 招远市| 清河县| 合川市| 万年县| 凤翔县| 进贤县| 平罗县| 亚东县| 全椒县| 玛多县| 宁南县| 昔阳县| 天峨县| 门源| 延吉市| 得荣县| 五家渠市| 颍上县| 永安市| 灵宝市| 建阳市|