使用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中