zoukankan      html  css  js  c++  java
  • 变量存储

    这两天在写一个系统分区遍历的代码。其中有一个对外部数据存储区的读写。

    这个外部数据存储区的高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。

    看来以后真的要注意以下存储范围,超出了存储范围会出现一些非常奇怪的问题。

  • 相关阅读:
    小程序05 深入小程序框架
    小程序04 小程序框架
    小程序03 第一个小程序
    小程序02 wxml和wxss
    POJ3278 Catch That Cow
    POJ2251 Dungeon Master
    POJ1321棋盘问题
    Java ClassLoad详解
    十大经典排序算法最强总结(含JAVA代码实现)
    Task底层实现原理探秘
  • 原文地址:https://www.cnblogs.com/cuglkb/p/6472870.html
Copyright © 2011-2022 走看看