色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美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

    文章

    9364

    瀏覽量

    378155
  • STM32
    +關注

    關注

    2295

    文章

    11033

    瀏覽量

    365580
  • C語言
    +關注

    關注

    180

    文章

    7633

    瀏覽量

    141993
  • 編譯器
    +關注

    關注

    1

    文章

    1663

    瀏覽量

    50296
  • 宏定義
    +關注

    關注

    0

    文章

    51

    瀏覽量

    9239
收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    C語言定義使用技巧

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

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

    【RT-Thread學習筆記】一種C語言定義的寫法
    的頭像 發表于 07-30 13:41 ?2714次閱讀
    【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 ?792次閱讀

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

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

    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 ?1590次閱讀

    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 ?1133次閱讀

    c語言定義可以嵌套嗎?

    c語言定義可以嵌套嗎? C語言
    的頭像 發表于 09-04 17:38 ?3745次閱讀
    主站蜘蛛池模板: 日韩国产精品欧美一区二区 | 国模啪啪久久久久久久 | 久久婷婷丁香五月色综合啪免费 | 高清一区二区亚洲欧美日韩 | 欧美ZC0O人与善交的最新章节 | 日韩免费一区 | 国产精品69人妻无码久久久 | 13小箩利洗澡无码视频APP | 久久午夜伦理 | 久久久精品久久久久特色影视 | 国产精品igao视频网网址 | 羞羞漫画免费漫画页面在线看漫画秋蝉 | 欧美国产精品主播一区 | 强开少妇嫩苞又嫩又紧九色 | 2020年国产理论 | 99视频精品全部免费观看 | 欧美亚洲视频在线二区 | 国产精品久久久久久影院 | 亚洲an天堂an在线观看 | 伦理片天堂eeuss影院 | 法国剧丝袜情版h级在线电影 | 四虎影视永久无码精品 | 亚洲国产女人aaa毛片在线 | 大相蕉伊人狼人久草av | 国产精品嫩草影院一区二区三区 | 久久综合久综合久久鬼色 | 久久婷婷国产五月综合色啪最新 | 蜜臀AV精品一区二区三区 | 日韩欧美一区二区三区免费观看 | 无码AV毛片色欲欧洲美洲 | 久久精品国产男包 | 国产亚洲精品AV片在线观看播放 | 九九久久国产精品免费热6 九九久久国产精品大片 | 亚洲国产在线播放在线 | 国产精品久久久久婷婷五月色 | 18岁末年禁止观看免费1000个 | 日本欧美久久久久免费播放网 | 久久精品免费看网站 | 91麻豆精品一二三区在线 | 97资源总站(中文字幕) | 亚洲一区二区影院 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品