战舰实验Flash模拟EEPROM有个小隐患~

2019-08-16 22:13发布

void STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite) {          if(WriteAddr<STM32_FLASH_BASE||(WriteAddr>=(STM32_FLASH_BASE+1024*STM32_FLASH_SIZE)))return;//非法地址

这个判断是否是非法地址的语句少判断了两种非法情况,一个是地址是否为偶数,一个是所有要写入的数据地址是否超出。
我改成下面这样了:

if( (WriteAddr < STM32_FLASH_BASE) || (WriteAddr%2) ||((WriteAddr+2*NumToWrite) >= (STM32_FLASH_BASE+1024*STM32_FLASH_SIZE))) return;//非法地址

供大家参考。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
ST-FAE-SALE
1楼-- · 2019-08-16 22:16
不错,可以参考一下
lanny_cn
2楼-- · 2019-08-17 02:46
原子大多例程都对参数没做严格检查的,也有好处:不要浪费CPU时间,有不好:调试的时候麻烦会多些

可以参考usosii里的,比如定义个_DEBUG_>0,然后就做参数检查,否则就不做检查
正点原子
3楼-- · 2019-08-17 04:21
 精彩回答 2  元偷偷看……
MrXiong
4楼-- · 2019-08-17 05:17
谢谢楼主,刚好在学习中,这个帖正好给予很好的帮助!

一周热门 更多>