进行分散加载避免擦写flash对中断的影响

使用stm32f4 在进行对flash的擦除和写操作过程中,会使中断无法进入,
为避免其他严重依赖中断处理的实时性极强的程序无法及时处理,我把中断向量表拷贝到ram中,并把中断服务函数编译到ram中,

1、中断向量表拷贝到ram中
void moveInterruptVectorToRam(void)
{
memcpy(0x20000000,(uint32_t *)NVIC_VectTab_FLASH, 512);
NVIC_SetVectorTable(NVIC_VectTab_RAM,0x00);
}
拷贝到ram中的偏移地址最好为0,不为0有可能有问题;这时中断向量表已经成功移动到ram中(其实是程序运行到main函数又重定向的中断向量表,并不是一开始运行就跳转到0x20000000定位到ram中的向量表)

2、中断服务函数编译到ram
#pragma arm section code = “RAMCODE”
void SysTick_Handler(void)
{
m_sysTickCount++;
}
#pragma arm section
在服务函数前后加上这两个语句

3、keil设置
在这里插入图片描述取消勾线,然后在edit处选择sct文件。
4、编辑sct文件
在这里插入图片描述
5、编译成功后查看map文件
发现中断服务程序的地址在ram中
中断服务函数编译到ram中成功后地址会是0x20000000+offset

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值