Gcc LPC1850:为什么在systick中断后程序执行跳转到0xFFFFFE?

Gcc LPC1850:为什么在systick中断后程序执行跳转到0xFFFFFE?,gcc,interrupt,lpc,Gcc,Interrupt,Lpc,我为LPC1857编写了一个工作程序,它启用中断,然后每个systick中断调用一些函数。它与LPC1857完美配合。当我尝试在LPC1850上运行相同的程序时,程序执行跳转到0xFFFFFE,并在中断发生时停止。在SystickHandler中调用的函数永远不会被调用。看起来程序得到了错误的处理程序地址,但我不明白这是怎么回事。发生这种情况时,LR指向0xFFFFF9。这两个地址都是保留的 我更改了LPC1850的链接器文件(与LPC1857项目的唯一区别在于初始化了一些不相关的端口),看起来

我为LPC1857编写了一个工作程序,它启用中断,然后每个systick中断调用一些函数。它与LPC1857完美配合。当我尝试在LPC1850上运行相同的程序时,程序执行跳转到0xFFFFFE,并在中断发生时停止。在SystickHandler中调用的函数永远不会被调用。看起来程序得到了错误的处理程序地址,但我不明白这是怎么回事。发生这种情况时,LR指向0xFFFFF9。这两个地址都是保留的

我更改了LPC1850的链接器文件(与LPC1857项目的唯一区别在于初始化了一些不相关的端口),看起来如下所示:

ENTRY(_start)                     
INPUT(& &)


MEMORY
{
    FLASH (rx) : ORIGIN = 0x1C000000, LENGTH = 16M
    SRAM (rwx) : ORIGIN = 0x10000000, LENGTH = 64K
}

SECTIONS

    .text :
    {
        _text = .;
        KEEP(*(.isr_vector))
        *startup.o(.text)   
        *(.text*)
        *(.glue_7t) *(.glue_7)
        *(.rodata*)
        _text_end = .;
    } > SRAM

    .bss :
    {
        _bss = .;
        *(.bss*)
        *(COMMON)
        _bss_end = .;
        . = ALIGN(4);
    } > SRAM

    .data : AT (ADDR(.text) + SIZEOF(.text))
    {
        _data = .;
        *(vtable)
        *(.data*)
        _data_end = .;
    } > SRAM

    . = ALIGN(4);
    .ARM.extab : {
      *(.ARM.extab*)
    } > SRAM

    . = ALIGN(4);
    __exidx_start = ABSOLUTE(.);
    .ARM.exidx : {
      *(.ARM.exidx*)
    } > SRAM
    __exidx_end = ABSOLUTE(.);



    .stack :
    {
      _stack_top = . + SIZEOF(.stack);
    } > SRAM
}
你知道我错过了什么吗?如果你需要任何其他信息,请告诉我。
提前谢谢

FLASH中没有分区!?对于1850,您可以在外部闪存中下载程序,地址为0x1C000000

虽然这个问题很古老,但我最近遇到了这种问题,所以这里有一些答案:一般来说,当所有中断都导致pc进入
0xfffffffe
时,这表明向量表有严重错误。如果您正在使用某些硬件调试器,并且处于这种情况,则应检查SCB中VTOR寄存器[1]的内容。它应该指向有效的向量表(例如从GCC骑乘启动程序集生成的节
.isr\u vector

LPCxxx芯片对我来说是陌生的,所以我不能给出任何有用的细节,但例如,如果LPC1850和LPC1857在内存地址上有差异,并且您在某个地方设置了VTOR,您可能需要将其设置为不同的位置。首先,您能够引导(调用重置处理程序)LPC1850,这表明您拥有引导设备的有效向量表


[1]
0xe000ed08

为什么它不能在SRAM中工作?LPC1857在SRAM上运行良好。谢谢。这并没有解决我的问题,但它是一个有用的建议。