1

我有引导加载程序,当在 lpc2xxx 工作良好时。但是,当我将它复制到 lpc4078 时,引导加载程序不会跳转到主程序。

我试过:1)使用#define USER_FLASH_START 0x8000

__asm void boot_jump(uint32_t address)
{
    LDR SP, [R0]
    LDR PC, [R0, #4]
}

main()
{

  bool t = true;
  while(t)
  {
    ...WORKING CODE...
    uart << "Hello, World!!!";
  }

  uart << "END";
  __disable_irq();
  __set_CONTROL(0);
  __set_MSP(stack_adr);

  SCB->VTOR = (USER_FLASH_START & 0x1FFFFF80);
  boot_jump(USER_FLASH_START);
}

2) 使用#define USER_FLASH_START 0x8000

void JumpToAppAt(unsigned int * vtbp)
{
  __disable_irq();
  __set_MSP(vtbp[0]); // load SP
  ((void (*)(void)) vtbp[1])(); // go...
}

main()
{

    bool t = true;
  while(t)
  {
    ...WORKING CODE...
    uart << "Hello, World!!!";
  }

  uart << "END";
     __disable_irq();
     __set_CONTROL(0);
     __set_MSP(stack_adr);

     SCB->VTOR = (USER_FLASH_START & 0x1FFFFF80);
     JumpToAppAt((unsigned int *) USER_FLASH_START);
}

主程序未启动(。

我认为什么不起作用 MAIN_PROGRAMM 并尝试了:

3)使用#define USER_FLASH_START 0x0,但没有任何改变。

4

1 回答 1

0

LPC2xxx 基于 ARM7,而 LPC4078 基于 Cortex-M4。关于重置向量,我看到您已经调整为使用向量表的第二个条目。请确保向量表中存储的地址的 LSB 设置为 1,即bit[0] = 1,因为该位表示 Thumb 指令,而 Cortex-M4 处理器仅支持 Thumb 指令。(参考

于 2019-06-25T08:39:16.117 回答