[ZLG-ARM] IAP:擦除一扇区后,分几次在不同页写数据可以实现吗??

[复制链接]
2489|4
 楼主| jstu023123 发表于 2007-9-19 13:26 | 显示全部楼层 |阅读模式
在flash中写数据时,考虑到跨页问题,分数次写人数据到FLASH中,而缓冲区不可太大,取512字节长度,正好一页,我刚试过了,好象不行!!程序如下:<br />buffer:数据源地址指针<br />flashaddr:数据目标相对地址,位于第16扇区,范围0~8K-1<br />length:待写入字节长度<br />UINT8&nbsp;WriteToMemory(UINT8&nbsp;*buffer,&nbsp;UINT16&nbsp;flashaddr,&nbsp;UINT16&nbsp;length)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;UINT16&nbsp;writesize;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;BlankCheck(&nbsp;Sector_16,&nbsp;Sector_16&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;查空<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;paramout[0]&nbsp;==&nbsp;SECTOR_NOT_BLANK)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;非空擦除<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SelSector(&nbsp;Sector_16,Sector_16&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EraseSector(&nbsp;Sector_16,Sector_16&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;擦除第16个扇区<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(&nbsp;(flashaddr+length)&gt(flashaddr|0x1ff)&nbsp;)&nbsp;&nbsp;//跨页<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writesize&nbsp;=&nbsp;512-flashaddr&0x1ff;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToPage(buffer,&nbsp;flashaddr,&nbsp;writesize);&nbsp;&nbsp;//写一页<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flashaddr&nbsp;+=&nbsp;writesize;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer&nbsp;+=writesize;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;-=writesize;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToPage(buffer,&nbsp;flashaddr,&nbsp;length);<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;paramout[0];<br />}
Ice_River 发表于 2007-9-19 14:31 | 显示全部楼层

什么CPU 分页?

  
 楼主| jstu023123 发表于 2007-9-19 15:09 | 显示全部楼层

回Ice_River

呵呵,片内256KFLASH,RamToFlash时写入字节为512*i!!习惯性错误!!我现在先写入一些数据,再在其他地址上写入数据,可以的吧?!
realrots 发表于 2007-9-23 09:33 | 显示全部楼层

应该是可以的

writesize&nbsp;=&nbsp;512-flashaddr&0x1ff;?我觉得应该是先写整页,不到一页的放到最后吧,不过最好补足一页<br />
gql1123 发表于 2007-9-26 10:12 | 显示全部楼层

哈哈

每写一页加上&nbsp;<br />&nbsp;SelSector(&nbsp;Sector_16,Sector_16&nbsp;);<br />就可以了。不加的话不行。我试过了,你试试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

93

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部