打印
[应用相关]

为什么这里只可以读取一页,是不是代码问题呢?

[复制链接]
1081|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
拿起书本|  楼主 | 2013-12-3 20:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
遇到的问题是:用STM32读取Flash的内容时,只能读到一页的数据,超过这个范围后就死机了。

读取Flash内容的代码如下,Flash类型是:MX25L1605D,我使用的是第一个扇区(0x000-0xFFF),共4K字节,从0开始写入和读取,但只能读到0xFF后(第一页),要读取的Flash地址addr再往后增加就死机了,我确认Flash驱动没有问题。

/*
* 函数名:Read_Card_Record
* 描述  :用于从Flash中读取一条权限信息
* 输入  :buf:临时保存读取到的记录        
*                 : dst:要比较的对象,也就是系统从读卡器接收到的刷卡信息
*                 : addr:要读取权限数据在Flash中的的起始地址
* 输出  : 返回1为比对正确,否则对比失败
* 调用  :由主函数调用
*/
u8 Read_Card_Record(u8 buf[], u8 dst[], u32 addr)
{
        u8 i = 0;
        u8 flag = 0;//权限比对成功与否标志位
        //从Flash依次读取每条权限记录,Card_Len是一个常数0x04       
        SPI_FLASH_BufferRead(buf, addr, Card_Len);//从Flash依次读取每条权限记录               
        for(i=0;i<Card_Len;i++)
        {
                //只要有一个字节对比不相等就表示当前读取的权限信息与刷卡信息不匹配
                if (buf[i]!=dst[i])
                {
                        flag=0;
                        break;
                }
                else
                {
                        flag=1;                       
                }
        }
        if (flag==0)//表示从Flash权限中读取的信息与当前刷卡的信息不匹配
        {
                addr+=Card_Len;//将要读取的Flash地址信息增加到下一条记录的开始位置               
                if (addr>0xFF)//将Flash的0x000-0xFFF作为存储权限的区域,4K字节,也就是第0扇区
                {                       
                        return 0;
                }
                else
                {
                        return Read_Card_Record(buf, dst, addr);
                }                       
        }
        else//比对正确返回1
        {
                return 1;
        }       
}

上面的if (addr>0xFF)如果换成if (addr>0xFFF)就死机了,Flash手册上讲,可以从一个起始地址读取整个芯片的内容,为什么这里只可以读取一页,是不是代码问题呢?
沙发
huangfeng33| | 2013-12-4 09:35 | 只看该作者
你这递归调用,估计堆栈爆了,增大堆栈试试。

使用特权

评论回复
板凳
feilusia| | 2013-12-4 09:47 | 只看该作者
看LZ天天发帖,也要记得把前面的贴子结了啊。

使用特权

评论回复
地板
拿起书本|  楼主 | 2013-12-4 19:37 | 只看该作者
呵呵,先谢谢楼上朋友的提醒,这个习惯确实不好,今天先结一部分。谢了,哥们

使用特权

评论回复
5
拿起书本|  楼主 | 2013-12-8 21:03 | 只看该作者
确实是堆栈问题,我试了增大stack,然后就可以,但是这样是不是不好?

使用特权

评论回复
6
rtgchym| | 2013-12-9 14:14 | 只看该作者
拿起书本 发表于 2013-12-8 21:03
确实是堆栈问题,我试了增大stack,然后就可以,但是这样是不是不好?

这个也没什么不好,不过可以考虑一下换个思路,递归并不是一个好办法

使用特权

评论回复
7
拿起书本|  楼主 | 2013-12-9 14:59 | 只看该作者
有道理,这样可以少读很多数据,谢谢 楼上各位朋友了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:好好学习,天天向上!

519

主题

4195

帖子

31

粉丝