野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12034|回复: 3

对SPI_FLASH例程中数据写入函数的改写

[复制链接]
发表于 2017-4-14 14:25:30 | 显示全部楼层 |阅读模式
官方例程中,数据写入函讲的很详细,但是太繁琐了,用了大量的IF语句,而一个优雅的程序应该尽量减少IF语句的使用,我就重写了一下

length等于原写入函数里的NumByteToWeite 都是写入数据的长度,但是我觉得length更直观就改了
试了一下能用,但是没用大数据量跑过,反正大家能看懂意思就行,逻辑上应该没错误


void write(u8* pBuffer, u32 WriteAddr, u16 length)
{
        u16 addr,count,batchNum;
        while(length > 0)
        {
                addr = WriteAddr % SPI_FLASH_PageSize;        //地址页内偏移量,如果跟页首地址对齐,为0
                count = SPI_FLASH_PageSize - addr;                //本页剩下可写字节数,如果addr跟页首地址对齐,刚好是一页大小
                batchNum = (length > count) ? count : length;        //本次写入长度,如果剩余长度大于本页可写字节数(本页写不完)完满一页,不然一次完完
                SPI_FLASH_PageWrite(pBuffer, WriteAddr, batchNum);        //写入一次
                pBuffer                += batchNum;        //指针移动到下次要写入的地方
                WriteAddr        += batchNum;        //写入地址移动到下次要写入的地方(如果第一次没写完,就是下页页首)
                length                -= batchNum;        //待写入数据长度减去本次写入长度
               
        }
}
回复

使用道具 举报

发表于 2017-4-14 15:45:12 | 显示全部楼层
不错不错,顶起
回复 支持 反对

使用道具 举报

发表于 2017-4-15 14:49:13 | 显示全部楼层
这个函数在写入的数据大于2*256时可能会出问题。
回复 支持 反对

使用道具 举报

发表于 2017-4-15 14:51:54 | 显示全部楼层
看错了
     
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 13:43 , Processed in 0.028711 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表