在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

    關注

    6067

    文章

    44961

    瀏覽量

    648908
  • 寄存器
    +關注

    關注

    31

    文章

    5430

    瀏覽量

    123970
  • ANSIC
    +關注

    關注

    0

    文章

    6

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    求助,關于SGTL5000 LINE-IN聲音錄制問題

    我在定制載板上運行帶有 IMX8MQ 處理器的 Android 11作系統。我正在使用SGTL5000編解碼器。 我正在嘗試通過將麥克風連接到芯片的 Line-In 引腳來錄制聲音SGTL5000
    發表于 04-11 06:49

    基于小凌派RK2206開發板:OpenHarmony如何使用IoT接口控制ADC外設

    != LZ_HARDWARE_SUCCESS) { PRINT_ERR(\"%s, %s, %d: ADC Key IO Init fail\\\\n\", __FILE__, __func__, __LINE__
    發表于 04-10 16:20

    準定義、標注方法及設計選取

    一、基準的定義 首先我們要清楚關于基準的一些定義,根據國標GB/T1182、GB/T4249-1996、GB/T16671-1996中的定義。 基準要素:是指用來確定被測要素方向和位置的要素,在零件
    的頭像 發表于 01-23 10:27 ?2994次閱讀
    基<b class='flag-5'>準定義</b>、標注方法及設計選取

    TTL電平標準的介紹與解析

    逐漸成熟,并成為數字電路設計中的一個標準。 TTL電平標準定義 TTL電平標準定義了數字信號的高低電平電壓范圍。在TTL電平標準中,高電平
    的頭像 發表于 01-16 09:46 ?1947次閱讀

    const定義的是不是常量

    C語言是如何定義常量的?const定義的算不算是常量? 常見的有這么幾種方式。 首先就是宏定義,使用 define 來定義。 宏的特點就是在
    的頭像 發表于 01-14 11:35 ?401次閱讀

    AWG與其他標準電纜的比較

    在電子和電氣工程領域,選擇合適的電纜對于確保設備性能和安全性至關重要。美國線規(AWG)是一種廣泛使用的電線規格標準,它定義了不同直徑和橫截面積的電線。然而,在全球范圍內,還有其他幾種電纜規格
    的頭像 發表于 01-13 18:07 ?1595次閱讀

    AWG電纜線規的標準定義

    AWG(American wire gauge)電纜線規的標準定義如下: 一、基本概念 AWG是美國線規的簡稱,是一種區分導線直徑的標準,也被稱為Brown & Sharpe線規。這種標準化線規系統
    的頭像 發表于 01-13 16:35 ?3056次閱讀

    晶圓中scribe line(劃片線)和saw line(鋸片線)的差異

    關鍵的概念,它們在晶圓的后段工藝中扮演著重要的角色。為了方便理解,我們可以把晶圓比作一塊大餅,而每一片芯片就像是從大餅上切下來的薄片,劃片線和鋸片線則是切割這些薄片的“指引”和“路徑”。 Scribe Line(劃片線) 定義:劃片線是晶圓表面上的一系列細長的空白區域,用
    的頭像 發表于 01-03 11:33 ?1320次閱讀
    晶圓中scribe <b class='flag-5'>line</b>(劃片線)和saw <b class='flag-5'>line</b>(鋸片線)的差異

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

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

    如何實現室內精準定位?分享室內精準定位技術及方法

    室內精準定位在現代社會中具有重要的意義和應用價值,它能夠精確確定人或物體在封閉的空間內的位置。在過去,只有在室外才能實現精確的定位,但隨著技術的發展,室內定位已經成為可能。在本文中,我們將探討實現
    的頭像 發表于 09-24 11:21 ?1486次閱讀
    如何實現室內精<b class='flag-5'>準定</b>位?分享室內精<b class='flag-5'>準定</b>位技術及方法

    單北斗精準定位,頂堅北斗有源終端賦能行業新應用!

    在當今這個日新月異的科技時代,精準定位技術已成為推動各行各業轉型升級的關鍵力量。而在眾多衛星導航系統中,北斗導航系統以其獨特的優勢,正逐步成為全球定位領域的璀璨明星。尤其是單北斗精準定位技術與頂堅
    的頭像 發表于 09-21 10:34 ?783次閱讀
    單北斗精<b class='flag-5'>準定</b>位,頂堅北斗有源終端賦能行業新應用!

    PCB打樣不簡單:這些特殊工藝你知道嗎?

    打樣不僅涉及標準的工藝流程,還包含多種特殊工藝,以滿足不同設計需求和應用場景。本文將深入探討PCB打樣中的幾種特殊工藝,包括金手指處理、阻抗控制、盲孔與埋孔技術、厚
    的頭像 發表于 09-18 13:39 ?1587次閱讀
    PCB打樣不簡單:這些<b class='flag-5'>特殊</b>工藝你知道嗎?

    UTB定位技術能不能精準定

    在當今科技日新月異的時代,定位技術以其廣泛的應用場景和不斷提升的精度,成為了多個領域的核心支撐。其中,UTB定位技術以其高精度、低延遲和高抗干擾性等特點,在眾多定位技術中脫穎而出,成為精準定位領域的佼佼者。那么,UTB定位技術到底能不能精準定位呢?下面就給大家具體介紹一下
    的頭像 發表于 09-03 10:07 ?1105次閱讀

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

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

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

    說到室內精準定位很多人可能會比較陌生,因為這一說法并沒有大范圍推廣,又或者說只是很多相關行業的人才知道這樣的說法。但是定位這一問題大家都知道吧?尤其是要到一個地方去,都會進行定位導航。那么這一般都是
    的頭像 發表于 07-09 16:30 ?843次閱讀
    主站蜘蛛池模板: 欧美成人性色区 | 黄网站色视频免费看无下截 | 亚洲综合精品成人啪啪 | 性xxxx黑人与亚洲 | 综合激情网站 | 午夜小影院 | 国产三级黄色录像 | 72种姿势欧美久久久久大黄蕉 | 啪啪免费看视频 | 两性色午夜视频免费国产 | tube69日本| 好大好硬好深好爽视频h | 一区二区三区伦理高清 | 日夜夜操 | 亚洲国产精品日韩专区avtube | 亚洲精品久久久久午夜福 | 国产午夜一区二区在线观看 | 一级做a免费视频 | 性xxxx欧美 | 欧美人另类zooz | 毛片基地在线 | 婷婷深爱五月 | 成人黄色免费 | 久久婷婷六月 | 上课被同桌摸下面做羞羞 | 狠狠操欧美 | 一级福利视频 | 国产成人精品亚洲77美色 | 色a4yy综合私人 | 日本一区二区三区在线网 | 神马国产 | 五月婷婷爱| 99热最新网址 | 生活片一级性 | 日本特黄特色视频 | 激情五月激情综合 | 亚洲看黄| 99热久久精品最新 | 一级毛片在线不卡直接观看 | 午夜精品福利视频 | 91福利视频免费 |