大学生
最后登录1970-1-1
在线时间 小时
注册时间2015-3-24
|
官方例程中,数据写入函讲的很详细,但是太繁琐了,用了大量的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; //待写入数据长度减去本次写入长度
}
} |
|