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

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

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

3天內不再提示

ANSIC幾種特殊的標準定義 (__FILE__、__LINE__、__STDC__···)

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-20 09:46 ? 次閱讀

Ⅰ寫在前面

為方便大家閱讀,本文內容已經整理成PDF文件:

http://pan.baidu.com/s/1gfHygyn

對于我們大部分使用單片機進行裸機開發的朋友來說,可能很少有人在程序中許多關鍵的地方打印一些關鍵信息

有較大系統開發,或復雜系統開發經驗的朋友一般都會在程序中輸出很多調試信息,如在UCOSfreeRTOSLinux等系統開發調試時打印許多關鍵信息。

1.我們在使用STM32庫開發時,在stm32fxxx_conf.h文件下會發現如下這么一條語句:

#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))

這條語句,對于使用寄存器,開發簡單且不大程序的朋友而言,可能他覺得用處不大,它可能就覺得很占資源,且耗時。

其實不然,ST這么設計是有他一定的道理的,對于開發大型、復雜系統的朋友而言,這條語句其實用處很大。每次,程序運行錯誤之后,它會打印程序代碼指定的位置,方便我們在龐大的程序中很快找到錯誤的位置。

2.我們的系統會隨著時間的推移,不斷升級更新,也就是需要提交很多版本的可執行文件(hex、bin等)。但是,產品后期使用中,我們對某些設備進行了升級,可能忽略了一些設備,也就是有些設備沒有升級,如果出現故障,我們怎樣才能很快找到是哪一個版本的軟件出現故障呢?

這里就需要我們在程序中添加一些關于版本的信息,我們最基礎的就是Vx.x.x.x等這種信息,但對于大型系統而言,這種信息是不夠的,還需要更多,比如:編譯日期,時間,編譯環境的版本等。

Ⅱ幾種特殊標準定義

上面說了這么多,就是需要讓大家知道,這些特殊標準定義的用途。上面說的只是簡單的舉例,其實他們的用途還很廣泛,掌握了基礎之后相信你們都會知道它們更多比較實用的意義。言歸正傳,下面講述這些基礎的知識。

本文主要講述下面幾個標準定義:

__LINE__:正在編譯文件的行號

__FILE__:正在編譯文件的文件名

__DATE__:編譯時刻的日期字符串 如“Jun 17 2017”

__TIME__:編譯時刻的時間字符串 如”1000“

__STDC__:判斷該文件是不是標準C程序

1.__FILE__編譯文件名稱

File中文意思即文件,這里的意思主要是指:正在編譯文件對應正在編譯文件的路徑和文件的名稱。

Keil版本對應的路徑是相對于工程文件而言的路徑,IAR版本路徑是相對Windows路徑。

比如下面提供源代碼工程:

char BuildFile[] = __FILE__;

printf("編譯文件路徑:%s\n", BuildFile);

Keil:

編譯文件路徑:App\main.c

IAR:

編譯文件路徑:C:\Users\Administrator\Desktop\STM32F417ZG(IAR)_ANSIC幾種特殊的標準定義\App\main.c

2.__LINE__編譯文件行號

上面說的是編譯的文件名,是一個字符串,而這里說的是行號,是一個整型變量,這是這兩者的區別,所以在我提供工程中可以看到的源代碼:

char BuildLine = __LINE__;

printf("編譯代碼所在行:%d\n", BuildLine);

可以看不是數組的字符串,打印信息:

編譯代碼所在行:44

一般情況下,__FILE__是和__LINE__結合一起使用,用于打印我們代碼信息,方便快速定位代碼位置。

3.__DATE__編譯日期

__DATE__日期,需要注意的是:這個日期是你在編譯時Windows系統的日期,如果對應那部分代碼之前編譯好了,后面沒有編譯,這個日期還是之前的日期,而不是后面編譯的日期。因此,如果這里用于定版本,就需要在定版本時對工程進行全部重新編譯,它才會更新至你最后編譯的日期。

代碼:

char BuildDate[] = __DATE__;

printf("編譯日期:%s\n", BuildDate);

輸出結果:

編譯日期:Jun 17 2017

4.__TIME__編譯時間

這個和__DATE__一樣的原理,編譯時的時間,也是一個字符串。

再次提醒:用于定版本:需要重新編譯,這樣才是最后一次編譯時間。

代碼:

char BuildTime[] = __TIME__;

printf("編譯時間:%s\n", BuildTime);

輸出結果

編譯時間:1115

5.__STDC__標準C代碼

這個標準在我們單片機及嵌入式編程中運用的比較少,當要求程序嚴格遵循ANSIC標準時該標識符被賦值為1,主要是判斷我們的程序文件是不是標準C程序。

#ifdef __STDC__

printf("標準C代碼文件\n");

#else

printf("非標準C代碼文件\n");

#endif

Ⅲ源代碼分析與下載

為了方便大家學習,本文提供的源代碼比較基礎和簡單,也方便理論結合實際學習,僅供參考。

我們在之前新建好的Demo工程上添加了如下部分代碼:

char BuildLine = __LINE__;

char BuildFile[] = __FILE__;

char BuildDate[] = __DATE__;

char BuildTime[] = __TIME__;

printf("編譯文件路徑:%s\n", BuildFile);

printf("編譯代碼所在行:%d\n", BuildLine);

printf("編譯日期:%s\n", BuildDate);

printf("編譯時間:%s\n", BuildTime);

#ifdef __STDC__

printf("標準C代碼文件\n");

#else

printf("非標準C代碼文件\n");

#endif

Keil版本輸出結果:

編譯文件路徑:App\main.c

編譯代碼所在行:44

編譯日期:Jun 17 2017

編譯時間:1115

標準C代碼文件

IAR版本輸出結果:

編譯文件路徑:C:\Users\Administrator\Desktop\STM32F417ZG(IAR)_ANSIC幾種特殊的標準定義\App\main.c

編譯代碼所在行:44

編譯日期:Jun 17 2017

編譯時間:1100

標準C代碼文件

源代碼工程(STM32F417ZG_ANSIC幾種特殊的標準定義)下載地址:

http://pan.baidu.com/s/1hskScba

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

    關注

    6035

    文章

    44554

    瀏覽量

    634665
  • 寄存器
    +關注

    關注

    31

    文章

    5336

    瀏覽量

    120232
  • ANSIC
    +關注

    關注

    0

    文章

    6

    瀏覽量

    8679
收藏 人收藏

    評論

    相關推薦

    TLV320AIC3106要是LINE IN ,LINE OUT都只用單通道,電路怎么處理?

    大家好,我在使用TLV320AIC3106實現語音對講功能時,有點疑惑,芯片有LINE1L+,LINE1R+,EVM上面是這兩個都是用了,我現在只想用一個通道,問題是不知道是選LINE1L+呢還是
    發表于 10-25 08:01

    室內精準定位的應用范圍?室內精準定位的方式有哪些

    什么是室內精準定位?簡單來講就是根據定位功能,實現室內詳細的布局,然后利用這一功能去確定到精準的位置。隨著我國科技水平的發展迅猛,定位系統也從曾經初級的簡單定位發展到了如今的精準定位,取得了重大
    的頭像 發表于 07-11 11:52 ?422次閱讀
    室內精<b class='flag-5'>準定</b>位的應用范圍?室內精<b class='flag-5'>準定</b>位的方式有哪些

    室內精準定位是什么?室內精準定位的方式有哪些?

    說到室內精準定位很多人可能會比較陌生,因為這一說法并沒有大范圍推廣,又或者說只是很多相關行業的人才知道這樣的說法。但是定位這一問題大家都知道吧?尤其是要到一個地方去,都會進行定位導航。那么這一般都是
    的頭像 發表于 07-09 16:30 ?492次閱讀

    app \"espsoftap\"如何使用自定義數據?

    ;esp_prov.py\", line 440, inif not custom_data(obj_transport, obj_security, args.custom_data):File
    發表于 06-24 07:57

    網絡跳線的標準有哪幾種

    網絡跳線的標準主要有以下幾種: 雙絞線標準:雙絞線分為屏蔽雙絞線(STP)和非屏蔽雙絞線(UTP)兩種類型。其中,Cat5e是最基本的雙絞線標準,而Cat6、Cat6a、Cat7和Ca
    的頭像 發表于 06-14 10:42 ?926次閱讀

    stm32h745的特殊引腳如何使用HAL庫重定義

    現在手上有塊stm32h745ii的板子,想把pc13 pc14 pc15三個特殊引腳重定義為普通io口,找了一下HAL庫,好像沒有f4庫里面能直接調用的接口,有知道的大神麻煩告知一下該如何操作
    發表于 05-24 08:31

    請問CAN數據域的數據格式該如何定義?以什么標準定義

    最近需要實現上位機與下位機的CAN通訊,現在雙方苦于不知該如何定義數據格式,尤其是傳輸浮點數據~~ 起初經過討論直接根據個人主觀意愿定義了雙方的數據協議,,,其后,boss要求采用標準進行定義
    發表于 05-09 07:20

    MC SDK5.0導致電機運行時驅動管發熱嚴重,定時器deadtime設置為0怎么解決?

    ) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } 我的修改方法是main.c中包含頭文件parameters_conversion.h
    發表于 04-29 08:43

    如何用cubemx做lin通信?

    ; if (HAL_LIN_Init( huart3, UART_LINBREAKDETECTLENGTH_11B) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } }
    發表于 04-26 07:44

    STM32H743 UART DMA數據發送報錯的原因?

    = UART_ADVFEATURE_NO_INIT; if (HAL_UART_Init( huart4) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } } void
    發表于 04-26 06:59

    虛擬串口與STM32通信遇到的疑問求解

    ; if (HAL_RCC_ClockConfig( RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { _Error_Handler(__FILE__, __LINE__
    發表于 04-24 08:29

    主循環里不斷開啟關閉ADC的DMA傳輸功能,上電有幾率死機怎么解決?

    ; if (HAL_ADC_ConfigChannel( hadc1,sConfig) != HAL_OK) _Error_Handler(__FILE__, __LINE__); for(i = 0; i &
    發表于 04-23 07:20

    STM32F0 ADC多通道單次轉換,最后一個通道的EOC不置位是為什么?

    = ADC_OVR_DATA_PRESERVED; if (HAL_ADC_Init( hadc) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } sConfig.Channel
    發表于 04-16 06:34

    STM32F103VET6使用定時器DMA做比較輸出PWM,輸出波形第一次不正確是怎么回事?

    ) { Error_Handler(__FILE__, __LINE__); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL
    發表于 03-28 07:27

    請問STM32G071如何通過DWT實現us精準定時?

    STM32G071怎樣通過DWT實現us精準定時?,各位大佬有實現的嗎?
    發表于 03-20 06:59
    主站蜘蛛池模板: 老妇xxxxbbbb| 2021国产精品久久久久精品免费网 | 天天躁日日躁狠狠躁中文字幕老牛 | 免费人成在线观看视频不卡| 久久嫩草影院网站| 乱xxxjapanese黑人| 美女伊人网| 欧美xxxxxbb| 日日摸夜夜添无码AVA片| 骚浪插深些好烫喷了| 桃花论坛POWERED2019| 亚洲乱码AV久久久久久久| 亚洲一区在线视频观看| 3D内射动漫同人资源在线观看| 91国内精品久久久久免费影院| BL全肉多攻NP高H| 国产成人小视频| 黄 色 网 站 免 费 涩涩屋| 乱辈通奷XXXXXHD猛交| 日本女人bbb| 亚洲中文字幕在线第六区| 中文字幕A片视频一区二区| qvod影院| 精品无码一区二区三区中文字幕| 免费国产精品视频| 天美传媒在线观看完整高清| 在教室伦流澡到高潮HNP视频 | 青青草狠狠干| 亚洲欧美免费无码专区| wwwzzz日本| 娇妻归来在线观看免费完整版电影| 嗯啊不要老师| 亚洲精品久久久久一区二区三| 99久久精品国产交换| 国产亚洲精品成人AV久久| 妻子的妹妹在线| 影音先锋色av男人资源网| 国产成人一区二区三区在线观看| 免费观看激烈日板子| 亚洲综合色在线视频久| 亚洲AV久久无码精品九九软件|