2

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

我更改了 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
}

你知道我错过了什么吗?如果您需要任何其他信息,请告诉我。提前致谢!!

4

2 回答 2

1

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

LPCxxxx 芯片对我来说是陌生的,所以我无法提供任何有用的细节,但例如,如果 LPC1850 和 LPC1857 的内存地址存在差异,并且您将 VTOR 设置在某个地方,则可能需要对其进行一些不同的设置。您首先能够启动(调用重置处理程序)LPC1850 的事实表明您拥有从其中启动设备的有效向量表。

[1] 0xe000ed08 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/Ciheijba.html

于 2013-11-29T11:03:06.373 回答
0

FLASH中没有部分!?对于 1850,您将程序下载到地址为 0x1C000000 的外部闪存中。

于 2013-06-08T07:03:45.027 回答