|
为何要改?
NVIC_SetVectorTabl(NVIC_VectTab_FLASH, 0x00002000); 改为什么了?
1 。我在做CM3的IAP升级程序的时候,我把BOOT程序放在从0X08000000开始的地方,应用程序放在0X08002000开始的地方,也就是不从0X08000000开始,可是程序中断向量表却在0X08000000开始,也就是说应用程序一旦发生中断,比如TIMER中 断,程序就跳到0X08000000到0X080000E8中的一行即跳到中断向量表1了,可这已是BOOT程序了呀?也就是说:在用户程序(应用程序1)中,进不了中断了,我怎么改,要应用程序1在产生中断的时候跳到中断向量表2,而中断向量表2中有一条跳转指令,跳转到对应的中断服务程序中
答:在用户程序中,运行了NVIC_SetVectorTabl(NVIC_VectTab_FLASH, 0x00002000);,系统就将Cortex-M3的中断跳转地址变为以0x2000为相对起始地址,当发生中断时,中断将跳转到Flash中以0x2000+相对偏移量的地址,以Timer为例,就跳到0X080020E8,而不是0X080000E8。
2。关于烧写的问题,如何能在FLASH中把程序烧成如上图所示的样子,是否是这样分别建两个工程,把着两个工程lnkarm_flash.xcl的-DROMSTART分别设为 -DROMSTART=0x08002000 和 -DROMSTART=0x08002000,就可以了吗? 你的两个工程为什么是一样的? |
|