案發(fā)經(jīng)過:
最近更新了的QPC6.9.1A的源庫,和往常一樣掏出了大佬已經(jīng)寫好的demo,根據(jù)平臺類型大佬給一分為三:qk(搶占式)、qv(合作式)、win32-gui(Windows平臺)
果斷選擇最簡單的qv開擼,然后選擇編譯器類型,ARM-CM的內(nèi)核還能選編譯器,不是選開發(fā)環(huán)境嗎?IAR或者KEIL,是的沒錯(cuò),其實(shí)他們的本質(zhì)就是編譯器不同,除了開發(fā)環(huán)境以外,你可以選擇一款編譯器直接開擼,例如GNU。
這里我選擇armclang,那是什么鬼?它是一個(gè)編譯器,是KEIL使用的編譯器,任何一款開發(fā)環(huán)境都需要編譯器的支持,ARM天下來來回回都是它們在辛苦的工作。
第一次編譯就被來了個(gè)下馬威:TWO ERROR!
找到這個(gè)定義的位置,看看什么情況,單從打印信息來看是講找不到定義。
_delay的定義是與編譯器相關(guān)的,可是編譯器是內(nèi)置的,應(yīng)該不需要自己額外添加宏去打開編譯器。關(guān)于編譯器是什么樣的,他也沒有具體說清楚。IDE隱藏了太多的細(xì)節(jié)。
繼續(xù)分析我們的錯(cuò)誤,過程曲折,最終找到,是在C語言標(biāo)準(zhǔn)的問題上:
C語言標(biāo)準(zhǔn)還是挺多的,C90 、C99 、C11 還有GNU版本。看樣子還是挺多的,我選的default,默認(rèn)是GNU11版本。編譯錯(cuò)誤消失了,但是問題不能這么放過,百度了一下關(guān)于C的標(biāo)準(zhǔn),新標(biāo)準(zhǔn)兼容了很多新的東西,所以建議大家以后在配置工程時(shí)選用最新的C標(biāo)準(zhǔn)。
另外關(guān)于GNU是什么鬼?GNU是編譯器,它也有很多能夠影響編譯規(guī)則的內(nèi)容。
國際標(biāo)準(zhǔn)組織發(fā)布c11后,gnu為自己的編譯器發(fā)布兩種標(biāo)準(zhǔn)gnu11和c11。
gnu11:帶gnu c擴(kuò)展的c11標(biāo)準(zhǔn),如果你的代碼包含了typeof,__attribute__等等gnu的擴(kuò)展,就必須用這個(gè)。
c11:這個(gè)就是純c11的標(biāo)準(zhǔn),不帶gnu擴(kuò)展。