OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4623|回复: 3

求原子哥帮忙分析下 FLASH例程中语句

[复制链接]

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2014-12-24
在线时间
10 小时
发表于 2014-12-25 09:46:30 | 显示全部楼层 |阅读模式
5金钱
    
[mw_shl_code=c,true]void STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite) { u32 secpos; //???????· u16 secoff; //?????????????·(16??×?????) u16 secremain; //?????????à???·(16??×?????) u16 i; u32 offaddr; //????0X08000000?ó?????· if(WriteAddr<STM32_FLASH_BASE||(WriteAddr>=(STM32_FLASH_BASE+1024*STM32_FLASH_SIZE)))return;//·?·¨???· FLASH_Unlock(); //???? offaddr=WriteAddr-STM32_FLASH_BASE; //???????????·. secpos=offaddr/STM_SECTOR_SIZE; //???????· 0~127 for STM32F103RBT6 secoff=(offaddr%STM_SECTOR_SIZE)/2; //??????????????(2??×??????ù±?????.) secremain=STM_SECTOR_SIZE/2-secoff; //???????à?????ó?? if(NumToWrite<=secremain)secremain=NumToWrite;//???ó????????·??§ while(1) { STMFLASH_Read(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);//?????????????????? for(i=0;i<secremain;i++)//???é???? { if(STMFLASH_BUF[secoff+i]!=0XFFFF)break;//?è?????? } if(i<secremain)//?è?????? { FLASH_ErasePage(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE);//???????????? for(i=0;i<secremain;i++)//???? { STMFLASH_BUF[i+secoff]=pBuffer; } STMFLASH_Write_NoCheck(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);//???????????? }else STMFLASH_Write_NoCheck(WriteAddr,pBuffer,secremain);//?????­????????,?±?????????????à????. if(NumToWrite==secremain)break;//?????á???? else//???????á?? { secpos++; //???????·??1 secoff=0; //??????????0 pBuffer+=secremain; //???????? WriteAddr+=secremain; //?????·???? NumToWrite-=secremain; //×???(16??)?????? if(NumToWrite>(STM_SECTOR_SIZE/2))secremain=STM_SECTOR_SIZE/2;//???????????????????ê else secremain=NumToWrite;//?????????????????ê?? } }; FLASH_Lock();//???? }[/mw_shl_code]
secoff=(offaddr%STM_SECTOR_SIZE)/2; //??????????????(2??×??????ù±?????.)
secremain=STM_SECTOR_SIZE/2-secoff; //???????à?????ó?? 
 扇区剩余空间如何得到的? 请高手帮忙分析下,thanks

最佳答案

查看完整内容[请看2#楼]

这个问题,你先好好自己想想。 想两天再说。 提示:看STM32的FLASH资料,搞懂一个扇区是多大,然后自己给定一个地址,去列出一个公式出来,看看这个地址属于哪个扇区,偏移量是多少?得出一个通用的公式后,再来看我的代码。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-25 09:46:31 | 显示全部楼层
这个问题,你先好好自己想想。
想两天再说。
提示:看STM32的FLASH资料,搞懂一个扇区是多大,然后自己给定一个地址,去列出一个公式出来,看看这个地址属于哪个扇区,偏移量是多少?得出一个通用的公式后,再来看我的代码。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

28

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
381
金钱
381
注册时间
2014-10-9
在线时间
6 小时
发表于 2014-12-26 09:28:40 | 显示全部楼层
刚接触,学习一下。。
拿什么让你自己信服 自己
回复

使用道具 举报

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2014-12-24
在线时间
10 小时
 楼主| 发表于 2014-12-27 20:28:24 | 显示全部楼层
已经解决 谢谢大家~~
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 02:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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