F072的uid读到内存,过段时间会变化,为什么会这样

2019-12-19 18:07发布

void Get_ChipID(void)
{
//         F103       
//                CPU_ID[0]=CPU_ID[0] = *(__IO uint32_t *)(0X1FFFF7F0); // 高字节
//                CPU_ID[1]=CPU_ID[1] = *(__IO uint32_t *)(0X1FFFF7EC); //
//                CPU_ID[2]=CPU_ID[2] = *(__IO uint32_t *)(0X1FFFF7E8); // 低字节

//        F0       
                CPU_ID[0] = *(__IO uint32_t *)(0X1FFFF7b4); // 高字节
                CPU_ID[1] = *(__IO uint32_t *)(0x1ffff7b0); //
                CPU_ID[2] = *(__IO uint32_t *)(0x1ffff7ac); // 低字节
}

我的系统一上电就把 UID读到内存变量数组uint32_t CPU_ID[3],因为软件要用这个作为识别,之前的代码都是上电就读一次,以前都不会有问题。最近不知为什么,发现内存变量数组 CPU_ID[3] 中的数据会变化,导致识别失败。uint32_t CPU_ID[3] 是全局变量,程序中不修改的,为啥会变?我在办公室测试的时候都正常,没有发现错误。可是板子现场用着就不行,我开始也不信,去了几次现场调试代码,真的发现 CPU_ID[]变化了,导致识别失败。但是有些板子又不会,现场电柜有变频器,但是离的挺远啊。电源是电柜中的开关电源接24V过来,板子离变频器有20米左右,还有跟电柜有RS485通讯。开始我以为是开关电源不行,但是单独接他们的开关电源我的板子就正常。。。
如果是变频器干扰,为啥之前的板子不会,这是第二批板子。。。
现在临时在需要识别UID的时候重新读取UID放到uint32_t CPU_ID[3]内存变量数组中,今天下午接电柜测试就可以正常识别了。如果在识别前取消重新读取,发现又识别不了,UID 变化了。真是想不懂啊,郁闷。。。
大家遇到变量的数据变化这种情况不?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
eddia2012
1楼-- · 2019-12-20 11:19
 精彩回答 2  元偷偷看……
EMC菜鸟
2楼-- · 2019-12-20 12:35
dswkl11 发表于 2018-4-25 07:24
数组越界、堆栈溢出?  但是我办公室测试UID一直正常啊,所以一直都没有发现这个问题。如果 数组越界、堆 ...

办公室测试你确定能完全模拟到现场的情况?很有可能是某段你在办公室未测试到的代码有BUG导致的
MAD_FISH
3楼-- · 2019-12-20 15:02
指针越界应该还会导致其他莫名问题,如果是干扰导致的话,理论上也应该会导致其他各种问题,为什么只有这个uid出问题??

一周热门 更多>