案发经过:
最近更新了的QPC6.9.1A的源库,和往常一样掏出了大佬已经写好的demo,根据平台类型大佬给一分为三:qk(抢占式)、qv(合作式)、win32-gui(Windows平台)
果断选择最简单的qv开撸,然后选择编译器类型,ARM-CM的内核还能选编译器,不是选开发环境吗?IAR或者KEIL,是的没错,其实他们的本质就是编译器不同,除了开发环境以外,你可以选择一款编译器直接开撸,例如GNU。
这里我选择armclang,那是什么鬼?它是一个编译器,是KEIL使用的编译器,任何一款开发环境都需要编译器的支持,ARM天下来来回回都是它们在辛苦的工作。
第一次编译就被来了个下马威:TWO ERROR!
找到这个定义的位置,看看什么情况,单从打印信息来看是讲找不到定义。
_delay的定义是与编译器相关的,可是编译器是内置的,应该不需要自己额外添加宏去打开编译器。关于编译器是什么样的,他也没有具体说清楚。IDE隐藏了太多的细节。
继续分析我们的错误,过程曲折,最终找到,是在C语言标准的问题上:
C语言标准还是挺多的,C90 、C99 、C11 还有GNU版本。看样子还是挺多的,我选的default,默认是GNU11版本。编译错误消失了,但是问题不能这么放过,百度了一下关于C的标准,新标准兼容了很多新的东西,所以建议大家以后在配置工程时选用最新的C标准。
另外关于GNU是什么鬼?GNU是编译器,它也有很多能够影响编译规则的内容。
国际标准组织发布c11后,gnu为自己的编译器发布两种标准gnu11和c11。
gnu11:带gnu c扩展的c11标准,如果你的代码包含了typeof,__attribute__等等gnu的扩展,就必须用这个。
c11:这个就是纯c11的标准,不带gnu扩展。