请教一个简单的C语言相等判断问题

2019-12-22 13:50发布

<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>
24条回答
qiuchen
1楼 · 2019-12-23 08:33.采纳回答
多谢各位坛友回复,问题找到了。
最终原因出在变量定义上,本来RX_Date[]是在main.c中定义的,在其他C文件中用extern声明,使用没问题。
前天改了一下,把所有声明放在一个.h文件中,结果在多个文件中引用这个.h文件会因为变量重复声明报的错。
我就想了个投机取巧的办法,在main.c文件中用extern声明了一下。链接和编译都没问题,时机并不能调用RX_Data[],导致了程序出错。
现在老老实实改回在main.c中声明了,虽然不够整洁,贵在能用。
qiuchen
2楼-- · 2019-12-24 22:00
typedef 发表于 2017-9-24 02:01
其实参考ucos定义全局变量的方法也很不错

多谢!还没看过ucos呢,应该去看看。
wctmdgcd
3楼-- · 2019-12-24 22:01
我的做法:用一个variable·c的文件定义全局变量,再用一个variable·h文件来extern将所有全局变量声明为外部变量,我在所有的c文件把variable·h包含进去就可以了。
wctmdgcd
4楼-- · 2019-12-25 00:59
我在除了variable·c之外的c文件,都没有定义全变量的,要管理全局变量,只需要打开variable这个c文件就行了
redroof
5楼-- · 2019-12-25 02:50
wctmdgcd 发表于 2017-9-24 20:55
我的做法:用一个variable·c的文件定义全局变量,再用一个variable·h文件来extern将所有全局变量声明为外 ...

这样会引入太多的可见性。
如果一个全局变量只被a和b文件使用,在a里定义,那么b里面引用a.h就行了,别的文件无需见到这个全局变量。
当然对那些大部分文件都需要的全局变量,放在一个专门的文件里让所有文件都引用也行。只是要预备着你在那个头文件里改一点就得重编译全部
wctmdgcd
6楼-- · 2019-12-25 06:40
 精彩回答 2  元偷偷看……

一周热门 更多>