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。

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

  • 相关阅读:
    scala学习资料
    maven安装scala插件
    关于 mod_python
    Python读取Excel数据
    Python展开一个嵌套的序列
    随手写的Java向文本文件写字符串的类
    Python三元表达式
    递归的概述
    一分钟让你明白CSS中的盒模型
    Python实现ID3算法
  • 原文地址:https://www.cnblogs.com/cuglkb/p/6472870.html
Copyright © 2011-2022 走看看