如题目所示,工程中有一个变量是long型的,按照设计它正常应该在5至-5之间波动,但是在线调试时发现它会出现65535这个异常值!
检查寄存器发现是由于高16位数据和低16位数据没有同时更新造成的,请问这样的问题应该如何回避,是我的嵌入式C程序设计的有问题吗?
Susan Yang:
请问您使用的是哪款芯片?若是可以的话,请给出您的代码或者私信一下您的工程
,
user6407498:
这个工程是一个电机驱动工程需要外接编码器并采样三项电流,如果直接将工程发给你,恐怕您也不能复现我的问题。
不知您是否方便使用teamviewer,或者其他远程桌面控制软件查看我的运行状态?
谢谢您的回复!
,
Susan Yang:
抱歉,我这边电脑暂时不能安装teamviewer。
“检查寄存器发现是由于高16位数据和低16位数据没有同时更新造成的”
若是可以的话,您可以详细说明一下,看是否能帮到您
,
user6407498:
你好,原谅我刚刚才复现了之前的问题,现做说明如下:
1、首先说明问题:在变量在线监测表中可以看到IqFdb这个变量的值可以出现-65514这个值,而根据我的设计,这是绝对不可能的,此时电流为0,它应该如上面的变量IdFdb所示,在几十–负几十之间波动。
2、给出我观察到的现象:
图中红框内的数据地址为0xd38c,也就是上面提到的那个会出现异常值的变量IqFdb,可以看到它的高16位此时没有更新(显示为黑色),值为0x0000;低16位更新了(显示为红色),值为0xFFF9,所以此时监控框内用了分别用了先后两个数据的高16位和低16位,拼接出的数据是"0x0000 FFF9"也就是“61433”,这绝对超出我的限值范围了!
3、我的推论:由于2中描述的现象,我认为是long型的变量高16位和低16位没有同时更新,导致的显示错误。而此时该变量的值应该是“0xFFFF FFF9”,也就是"-7"。
4、本次提问的目的:想咨询一下这种BUG大家也经常遇到吗?两个字节没有同时更新显示的问题是由什么引起的?应如何避免。毕竟我之前的工程当中没有出现这种情况。
**附加说明:由于操作困难,上面出现的两张截图不是同时截取的,所以变量的值不能对应上。
,
user6407498:
芯片型号是28379S
,
Susan Yang:
我们将在您最新的帖子内回复