<p>
被一个简单的问题搞蒙了,折腾了一晚上没解决,特来请教。</p><br><p>
在STM32F401上做过一个串口接收的程序,运行没问题。现在要移植到F103上,发现接收数据正确,用“==“判断却不相等。编译器是IAR 7.70.1</p><br><p>
在F401上判断0XA5,0X5A作为接收标志,接收判断没问题。在F103上接收正确,判断不能通过。后来改成判断0XA5,竟然也不行。</p><br><p>
如下图所示,不能进入断点。 </p><p><img src="https://image.xiaopingtou.net/data/attach/191222/5b054sbG.png" alt="230951oehwv6v6bnhrr4rl"><br></p><p><br></p>
h里面不加extern,虽然语法上没问题,但实际应用中就是错的!
C语言的这种形式规则太自由了,你在h里面写任何东西都没人管你,你把C文件后缀改成h也没人管你
就像你拿菜刀可以割自己的手一样,没人管你。
为了防止自己拿菜刀割了自己的手,你自己要给自己制定操作规则:切菜应当如何切,才能保证不被自己的到割到自己的手。
这里面同理,操作规则就是h文件里面只准写变量的extern声明,不准写不带extern的变量定义。
遵守这个规则就保证你不会把同一个东西定义两遍。
另:在h文件里面写函数声明并不需要加extern,因为函数的声明已经隐含是extern的。只要注意非inline的函数体不能写在h文件里面就行。
一周热门 更多>