初级会员

- 积分
- 60
- 金钱
- 60
- 注册时间
- 2017-2-20
- 在线时间
- 9 小时
|
1金钱
对使用stm32的flash作为数据储存的方式有如下疑问:1.手册中如是描述:
在对 STM32F4xx 的 Flash 执行写入或擦除操作期间,任何读取 Flash 的尝试都会导致总线
阻塞。只有在完成编程操作后,才能正确处理读操作。这意味着,写/擦除操作进行期间不能
从 Flash 中执行代码或数据获取操作。
2.代码中是这么写的
FLASH->CR|=1<<16; //开始擦除
res=STMFLASH_WaitDone(200000);//等待操作结束,最大2s
其中函数在不断查询状态
u8 STMFLASH_WaitDone(u32 time)
{
u8 res;
do
{
res=STMFLASH_GetStatus();
if(res!=1)break;//非忙,无需等待了,直接退出.
delay_us(10);
time--;
}while(time);
if(time==0)res=0xff;//TIMEOUT
return res;
}
3. 那么问题来了
首先,这个例程中应该是在flash中运行代码的
那么在执行过
FLASH->CR|=1<<16; //开始擦除
之后,继续要执行
res=STMFLASH_WaitDone(200000);//等待操作结束,最大2s
那么此时取命令、执行代码,不都是在flash中进行的吗?
那岂不是违反了不能从 Flash 中执行代码或数据获取操作。这个要求?
实在是不懂,请指教!谢谢!
|
最佳答案
查看完整内容[请看2#楼]
我在网上找了下,觉得这个帖子说的有道理
http://www.stmcu.org/module/forum/thread-613119-1-1.html
“
简单说,写/擦除的时候,CPU会“停摆”。
一般情况下,程序的运行是CPU从FLASH中读取指令,然后执行。在执行写/擦除操作时,从Flash读指令就要等待,知道写/擦除完成。
擦除是按页/扇区操作的,时间比较长。写是按字节、半字或者字操作的,时间很短。
如果是连续进行n次页擦除操作,则在擦除操作直接是可以响应 ...
|