[PIC®/AVR®/dsPIC®产品]

xc8 1.33编译器-函数中临时变量赋值的疑问

[复制链接]
940|6
手机看帖
扫描二维码
随时随地手机跟帖
天上飞的树儿|  楼主 | 2019-3-14 08:36 | 显示全部楼层 |阅读模式
在进入一个函数时,定一个临时变量,对这个变量赋了一个全局变量的值.  现在调试模式中我观察到这个临时变量大概率没有正常被赋值.原因是那个全局变量不可能比临时变量小.大家有啥想法:
QQ拼音截图20190314083550.png
零三翟邢止胃| | 2019-3-14 08:51 | 显示全部楼层
帮你看看的啊!!!!

使用特权

评论回复
systemchip| | 2019-3-14 09:32 | 显示全部楼层
完全没看懂啥意思,局部变量只有在运行到相关函数体内才能在watch窗口观察到

使用特权

评论回复
oxygenzz| | 2019-3-14 11:05 | 显示全部楼层
"这个临时变量大概率没有正常被赋值" 具体是指什么?

观察到赋值语句执行后,这个临时变量的值不对?还是该条赋值语句没有执行?

编译器优化等级是什么?

使用特权

评论回复
CoolSilicon| | 2019-3-14 15:36 | 显示全部楼层
systemchip 发表于 2019-3-14 09:32
完全没看懂啥意思,局部变量只有在运行到相关函数体内才能在watch窗口观察到 ...

正解!!!

使用特权

评论回复
奔波儿熊| | 2019-3-15 15:29 | 显示全部楼层
最好把优化都关了再观察.

使用特权

评论回复
天上飞的树儿|  楼主 | 2019-11-23 11:01 | 显示全部楼层
竟然百度到自己的帖子,,,  描述一下问题和解决吧.
问题当时是定一个16位的临时变量,这个变量取值为后面的一个16位的全局变量.在实际操作的时候发现全局变量的值不能完全赋值到临时变量里面.

最后问题的原因是那个全局变量在串口接受中断中有自加的操作,在赋值的时候如果正好被中断打断赋值就会导致执行完赋值语句发现两个变量值并不相等的情况,解决办法就是在定义和赋值之前把串口接受中断暂时关闭,完成赋值之后再打开就可以解决这个问题.  对一些全局变量的操作,一定要注意多线程(中断)的操作产生的影响,望各位引以为戒.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

30

帖子

0

粉丝