|
|
stm32使用hal库数据疑问
有没有STM32F405RG参考设计
在学习stm32,有哪些视频教程呢?想系统研究研究
LSM6DS3TR-C静止情况下使用MotionFX固件算出的欧拉角周期性异常跳动
全球论坛无法登录
STM32F429使用FMC接口扩展SDRAM
用STM32F407做U盘拖拽升级,目前BootLoader和实现U盘,后面就不知道怎么操作了。
STM32上电后会多次进入所有打开的定时器回调函数中,如何避免这样的情况?
STM32F427VIT6这款芯片所支持的摄像头模组的列表有不?
stm32G030C8T6 官方例程库
微信公众号
手机版
中断如果没有多线程情况下,搬运到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是一个解决方案。