色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言宏定義的使用原理

CHANBAEK ? 來源:嵌入式之入坑筆記 ? 作者:嵌入式之入坑筆記 ? 2023-02-01 14:36 ? 次閱讀

使用STM32開發的朋友不知道是否有發現過這樣的一些宏定義? 如下:

#if defined (__CC_ARM)


#pragma anon_unions


#endif

看到上面的語句一開始確實搞不懂為什么要寫這些東西,通過上網去查詢,才搞明白這其中的使用原理。

上面的代碼段我們可以看到兩部分的內容:

1) __CC_ARM

2) #pragma anon_unions

這兩個都有啥用呢? 待我一一道來!

1、__CC_ARM 是 ARM 編譯中的宏選項

__CC_ARM 是一個編譯器的選項,在ARM開發中根據開發環境的不同,有好幾個可選的宏選項。

這些選項可以查看所開發的芯片的內核文件,比如我使用的是STM32F407,所以我從 core_cm4.h 文件中可以查閱到:

#if   defined ( __CC_ARM )


#define __ASM __asm /*!< asm keyword for ARM Compiler */


#define __INLINE __inline /*!< inline keyword for ARM Compiler */


#define __STATIC_INLINE static __inline



#elif defined ( __GNUC__ )


#define __ASM __asm /*!< asm keyword for GNU Compiler */


#define __INLINE inline /*!< inline keyword for GNU Compiler */


#define __STATIC_INLINE static inline



#elif defined ( __ICCARM__ )


#define __ASM __asm /*!< asm keyword for IAR Compiler */


#define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */


#define __STATIC_INLINE static inline



#elif defined ( __TMS470__ )


#define __ASM __asm /*!< asm keyword for TI CCS Compiler */


#define __STATIC_INLINE static inline



#elif defined ( __TASKING__ )


#define __ASM __asm /*!< asm keyword for TASKING Compiler */


#define __INLINE inline /*!< inline keyword for TASKING Compiler */


#define __STATIC_INLINE static inline



#elif defined ( __CSMC__ )


#define __packed


#define __ASM _asm /*!< asm keyword for COSMIC Compiler */


#define __INLINE inline /*use -pc99 on compile line !< inline keyword for COSMIC Compiler */


#define __STATIC_INLINE static inline



#endif

其中:

(1) __CC_ARM 是對應 ARM RealView 開發平臺的,它需結合uvision、eclipse或CodeWarrior等開發環境來使用的。

(2) ICCARM 是對應 IAR EWARM 開發環境的,是 IAR Systems 公司為ARM 微處理器開發的一個集成開發環境。

(3) GNUC 是對應 GNU Compiler Collection 開發平臺的。 GCC最初是為GNU操作系統專門編寫的一款編譯器,是一款開源的軟件。

(4)TASKING 是對應 Altinum Designer 開發平臺的。 Altium Designer 是原Protel軟件開發商Altium公司推出的一體化的電子產品開發系統。

2、#pragma anon_unions 支持匿名結構體/聯合體

匿名結構體/聯合體指的是沒有命名的結構,因為沒有對應的名字,所以也不會直接創建這個對象或者變量,一般都是在嵌套結構中使用。

之所以要使用這個東西進行,是因為在gcc編譯器中是支持匿名結構體/聯合體的使用的,而在ARMCC中不支持,所以如果要在ARMCC中使用匿名的結構體/結合體,就需要使用 #pragma anon_unions 告知編譯器,不然會編譯不通過。

那到底什么樣的才算是匿名結構體/聯合體呢? 我下面舉個例子,大家一看就會明白了。

如下代碼:

typedef union


{


struct {


uint32_t Address;


uint32_t OutputBits;


uint32_t ExtendedAddressBits;


uint32_t ExtendedOutputBit;


uint32_t FrameID;


uint32_t EmptyBits;


};


uint32_t Value;


} StdFrame_t;

從上面可以看出來,定義結構體或者聯合體時,如果沒有命名的話,那這個結構體/聯合體就是匿名的。

注:#pragma指令來設定編譯器的狀態或者是指示編譯器完成一些特定的動作。

3、補充幾個調試非常好的操作

3.1、

LINE 用以指示本行語句在源文件中的位置信息,即這條語句在源文件中的行號。

3.2、文件

FILE 用以指示本行語句所在源文件的文件名,即標示這條語句是在哪個源文件中出現的。

3.3、函數

func 用于指示某個語句出現在哪個函數中,即可以輸出該語句所在的函數的函數名。

注意:這個關鍵字在windows下時使用vc6.0是不支持的。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9087

    瀏覽量

    367401
  • STM32
    +關注

    關注

    2270

    文章

    10896

    瀏覽量

    355766
  • C語言
    +關注

    關注

    180

    文章

    7604

    瀏覽量

    136707
  • 編譯器
    +關注

    關注

    1

    文章

    1624

    瀏覽量

    49108
  • 宏定義
    +關注

    關注

    0

    文章

    50

    瀏覽量

    9007
收藏 人收藏

    評論

    相關推薦

    C語言定義使用技巧

    寫好C語言,漂亮的定義很重要,使用定義可以防止出錯,提高可移植性,可讀性,方便性等等。下面列
    發表于 07-29 09:35 ?1112次閱讀

    【RT-Thread學習筆記】一種C語言定義的寫法

    【RT-Thread學習筆記】一種C語言定義的寫法
    的頭像 發表于 07-30 13:41 ?2321次閱讀
    【RT-Thread學習筆記】一種<b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>宏</b><b class='flag-5'>定義</b>的寫法

    C語言定義小技巧

    今天分享一個C語言定義小技巧,從語法上來看比較簡單,不過一旦真正領悟到其精妙之處不僅可以簡化代碼、還能提高代碼的可擴展性。
    發表于 09-07 09:36 ?630次閱讀

    C語言定義與枚舉類型知識

    定義的標識符不占內存,只是一個臨時的符號,預編譯后這個符號就不存在了。在簡單的程序使用帶參數的定義可完成函數調用的功能,又能減少系統開銷,提高運行效率。正如C
    發表于 10-11 17:34 ?1593次閱讀

    C語言定義

    我感覺還可以
    發表于 11-19 20:33

    c 語言定義函數

    #define A(x) x;x;x;x;x;x;x;x;x;x;我明白這個可以起到控制的作用也就是調用10次;但不太明白其中意思,話說中不用分號 ,這個函數,需求詳細解說
    發表于 10-09 15:42

    C語言定義技巧

    C語言定義技巧
    發表于 03-01 21:58

    C語言定義中#和##的作用

    本文由dongeasy收集整理,原文鏈接:http://www.dongeasy.com/software-development/embedded-system/2013.html在定義
    發表于 08-23 18:22

    C語言定義使用do{}while(0)的好處是什么

    C語言定義使用do{}while(0)的好處1. 概述經常寫項目代碼,有時需要用到定義,而
    發表于 02-25 06:28

    C語言定義使用技巧

    寫好C語言,漂亮的定義很重要,使用定義可以防止出錯,提高可移植性,可讀性,方便性 等等。下面
    發表于 11-13 12:04 ?36次下載

    c語言定義技巧

    深入學習c語言的發燒友可以看看,當然有興趣的入門者也可以看
    發表于 05-13 11:28 ?0次下載

    c語言定義的使用方法

    作為常量使用時,C程序員習慣在名字中只使用大寫字母。但是并沒有如何將用于其他目的的宏大寫的統一做法。由于(特別是帶參數的)可能是程序中錯誤的來源,所以一些程序員更喜歡使用大寫字
    發表于 07-02 15:04 ?1372次閱讀

    C語言基礎:定義使用do{}while(0)的好處

    C語言定義使用do{}while(0)的好處1. 概述 經常寫項目代碼,有時需要用到定義,而
    發表于 01-13 13:06 ?2次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>基礎:<b class='flag-5'>宏</b><b class='flag-5'>定義</b>使用do{}while(0)的好處

    c語言定義用法規則

    定義會在編譯的時候進行替換展開。最好將中的參數用括號括起來。這樣就避免了當一個表達式同時含有定義和其他高優先級運算符時,破壞整個表達式
    發表于 07-31 09:39 ?852次閱讀

    c語言定義可以嵌套嗎?

    c語言定義可以嵌套嗎? C語言
    的頭像 發表于 09-04 17:38 ?3172次閱讀
    主站蜘蛛池模板: 亚洲欲色欲色XXXXX在线AV| 91夫妻交友论坛| 97在线精品视频| 高清mv视频免费观看| 精品午夜视频| 日本熟妇乱人伦A片精品软件| 亚洲精品www久久久久久久软件| 97视频免费在线| 国产精品自在自线亚洲 | 露露的性战k8经典| 色欲AV亚洲永久无码精品| 伊人久久综合影院| 国产成+人欧美+综合在线观看| 久久香蕉国产线看观看首页| 色女仆影院| 91青青草原| 娇喘高潮教室h| 日日干夜夜爱| 最新果冻传媒在线观看免费版| 国产精品A久久久久久久久| 免费精品国产人妻国语| 亚洲精品91| 穿着丝袜被男生强行啪啪| 老人FREE VIODES老少配| 性欧美FREE少妇XXX| oldgrand欧洲老妇人| 国语92电影网午夜福利| 日美一级毛片| 51精品少妇人妻AV一区二区| 国产亚洲精品久久无码98| 皮皮在线精品亚洲| 最近2019中文字幕MV免费看| 国产又湿又黄又硬又刺激视频| 热久久伊大人香蕉网老师| 中文字幕爆乳JULIA女教师| 国产手机在线亚洲精品观看| 日本久久中文字幕| 91蜜桃视频| 久久久久免费视频| 亚洲精品国产精品精| 国产精品成人网|