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