变量存储
这两天在写一个系统分区遍历的代码。其中有一个对外部数据存储区的读写。
这个外部数据存储区的高32K不是我们通常使用的RAM,而是用Flash表示。
所以对这个数据存储区的读写都必须按照Flash的规则进行,先擦后写。
下面是代码:
uint16 s = 0x18000; while(s<0x20000){ MutliFuncHigh_32K(s,x); // s = s+x; } //读写高32K void MutliFuncHigh_32K(uint16 addr,uint16 len) { uint16 i,adr; adr=addr; P1=0x00; EraseSector(addr,1); for(i=0;i<len;i++) { WByte_Flash(addr++,i); } for(i=0;i<len;i++) { P1=~P1; ReadByte(adr++); P1=~P1; } }
看代码是发现没有什么问题的。
但是在仿真的时候总是出现问题,读写了一会时钟就会停止,很奇怪的现象,因为没有对时钟进行操作,但是时钟却受到了影响。
一下午都在排查这个问题。
最后发现是变量存储的问题。
0x18000,已经超出了uint16的存储范围。uint16的存储范围是0~65535,0x18000是98304,早已经超出了存储范围。
把变量声明为uint32,就OK。
看来以后真的要注意以下存储范围,超出了存储范围会出现一些非常奇怪的问题。