|
|
在擦除flash时 同时挂起中断 是否会造成卡死以及相关的卡死机制
STM32F407VET6,使用cubeIDE下载跑不起来
FLASH擦除轮询等待时CPU真的会轮询吗
STM32F417 RTC读取亚秒寄存器
使用 HAL 库通过串口以 ASCII 形式发送整型数据
USB Host 外部中断按键失效
STM32F405ZGT6 批次22+ 问下这颗料,60度烘烤12小时后,出现鼓包,是怎么回事? 原厂有标准的烘烤温度范围 跟时长范围吗?
调用HAL_FLASH_OB_Unlock()直接进入 HardFaultHandler
STM32 增加 WiFi + 以太网的低成本方案
NUCLEO G474RE无法运行程序
微信公众号
手机版
中断如果没有多线程情况下,搬运到RAM可以在擦FLASH时可以正常执行,一旦加了RT多线程,我把中断搬到RAM区其擦FLASH时不会执行中断,其他线程也不会被调度
我使用了Bootloader引导启动,程序烧录FLASH,Bootloader将该程序拷贝到RAM区,然后跳转到该RAM区,FLASH相当于只做存储。任然不能使程序在擦FLASH期间正常运行。
在看汇编时发现,其执行的时候还是在执行FLASH区域的程序,并没有执行RAM区程序
(这有可能是因为我调试主程序并没有经过Bootloader引导)
不知道你是部分函数搬迁还是所有的代码都在RAM执行。如果是前者,我记得常量数据初始化的时候是没有搬迁的,另外你搬迁的这个函数调用的子函数的执行地址按道理也没有搬迁。(我不太确定,需要你自己做个试验。有结果告诉我。)
围观高手解答
理论上这时候如果产生中断,中断服务函数也应该放在RAM中。
.sct文件中加载与运行地址之前均为FLASH区,我尝试把加载,运行改到片外RAM区,可以编译,烧录时出现Error-Flash Download failed Cortex-M4错误
如果是只有中断,可以放在ram区执行,擦FLASH不影响中断执行。可是我加了线程,中断放进ram他也不执行了,主要我还想要在擦FLASH时执行其他线程
[md]我主程序烧录地址是0x8020000,大小:0x20000,我拷贝的时候是直接从这个地址开始所有数据全部拷贝到片外RAM
这个是物理上的特征。 程序擦除和烧录时,是不能访问FLASH的。
所以此时任何放在FLASH中的代码都不能被执行。 这也是为什么后面的芯片有双BANK的原因之一。
[md]比方说你函数相互调用的时候,你的程序挑战的地址应该在那里?你可以单步调试看一下。我感觉只是这样copy好像不行。
双bank是一个解决方案。