这两天在看OAD方面的东西,请教个问题。
加了BIM后,加电执行的第一块代码在哪个工程中?
我理解的是首先执行的APP工程,之后由于APP工程main中的一段代码
#ifdef FEATURE_OAD{uint8_t counter;uint32_t *vectorTable = (uint32_t*) 0x20000000; #if defined(__IAR_SYSTEMS_ICC__)uint32_t *flashVectors = &__vector_table; #elif defined(__TI_COMPILER_VERSION__)uint32_t *flashVectors = &ti_sysbios_family_arm_m3_Hwi_resetVectors; #endif //Compiler.// Write image specific interrupt vectors into RAM vector table.for(counter = 0; counter < 15; ++counter){*vectorTable++ = *flashVectors++;}} #endif //FEATURE_OAD
执行后,才通过BIOS_start函数跳转到BIM中执行,
之后在BIM中,通过CRC检测确定执行哪个Image。
不知道理解的对不对,总感觉这么的别扭。
Light J:
不对,BIM在复位向量处,一上电就执行,没得选择。
MagicQ:
回复 Light J:
那请教一下,向量处的设置在什么地方。
首先BIM和APP是单独编译的。那就是说APP本身应该有一个中断向量表,而BIM也有一个中断向量表。那么,都在什么地方。
请指点一下,谢谢。
Light J:
回复 MagicQ:
我想是这样的:BIM的链接文件指定了位置,main函数自然被放在复位向量处,BIM没有使用其他外设,也就没有外设中断向量,程序的跳转是直接内嵌了LJMP汇编指令。至于APP的向量表,我也想知道是如何处理的,A和B的代码可以分别放在两处,但向量表只有一个,烧写了B不就把A的向量表覆盖了么,求论坛大神解答。