现在在做一个NUC972的串口IAP程序。
1、我自己写了一个IAP程序,用来接收串口的APP二进制代码。IAP程序的执行地址是0x0,存放在SPI中0x0开始的地方;
2、现在选择SPI启动,将SPI里面的IAP程序加载到DDR中0x0地址开始的地方运行,并从串口接收APP二进制代码文件,存放到DDR的0x0020 0000的地方。这个APP程序的执行地址也是0x0020 0000;
3、等IAP程序将APP二进制文件接收完成并存放在DDR中0x0020 0000开始的地方之后,再从IAP跳转到地址为0x0020 0000的地方去执行APP程序。
这种情况下,如果APP程序发生中断,系统会跳到哪里去查找中断向量表?能不能找到APP中断服务程序的入口地址?
2022/09/06 14:37
ARM9的Vector 我们固定在0x0的地方,所以你如果有多个程序要执行,不能放在地址0的位置,可以放0x8000,0x100000等地址。程序boot的时候,把vector table搬到地址0的位置。
有关向量的使用请参照我们的bsp里的demo程序。例如:如果你用Keil MDK编译程序,script 如下即可
LR_IROM1 0x0008000
{
EXE_IROM2 +0
{ ; load address = execution address
startup.o (NUC_INIT, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_RAM1 +0;0x200000;+0
{ ; RW_RAM1 start address is after EXE_ROM2
.ANY (+RW +ZI)
}
ARM_LIB_HEAP +0 EMPTY 0x4000 ; 0x80000 ; Heap region growing up
{
}
VEC_ROM0 0x00000000 0x8000
{ ; vector table
vector.o(VECTOR, +First)
}
}