目前测试情况来看就是这样,0x2000 0000地址的这一个Byte,在不为0的情况下赋予某些特殊值,执行Timer1复位,就会出现这种情况。受影响范围我目前观测到的结果是0x2000 0000地址开始的前8个字节,至于会不会影响其他什么地方,我也看不到,毕竟我也不能把所有136K内存全部过一遍对吧。
具体小于多少,我没测,反正我测过0xAA,正常,0xFF正常,0x1C不正常,0x0B不正常,0x0C不正常。
至于我怎么发现的,好巧不巧有一个变量占用一个Byte,被编译器分配到了这里,这个变量很关键,一旦出错整个系统就会出错,我发现系统出错后无论怎么看代码都不觉得有问题,.map找到这个变量位于0x2000 0000之后单步调试,定位到执行Timer1复位时这个变量就G了,然后我就顺势研究了一下到底是怎么回事,就有了我俩对话里的那么多图。也如你所见,为了排除各项影响,我是直接在SystemInit里执行的测试代码,也屏蔽了M0内核,寄存器的值和汇编代码我看没什么问题,也贴在对话里了,唯独内存会出错。
如果你手里有LPC4357的话也可以测试一下,我这已经测试过2片板子都是这样,我的单片机完整型号是LPC4357FET256,生产批次ESD17160A。
//******************************************以上是历史消息******************************************
不好意思是我2B了,屏蔽M0内核的代码是0x01000002才对,不是0x10000002,这样子执行结果就对了,没有内存受到影响。
看上去这个问题是复位RGU的库函数错误地启动了M0内核,M0内核工作之后更改了内存导致的。
没事了没事了,此贴终结,又虚惊一场,想用好这个单片机可真不容易
