我为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
}
你知道我错过了什么吗?如果您需要任何其他信息,请告诉我们。 在此先感谢!!
答案 0 :(得分:0)
FLASH中没有任何部分!对于1850年,您使用地址0x1C000000在外部闪存中下载程序。
答案 1 :(得分:0)
虽然这个问题很古老,但最近我遇到了这种问题,所以这里有一些答案:一般来说,当所有中断导致pc进入0xfffffffe
时,它表明向量表有一些可怕的错误。如果您正在使用某些HW调试器并且处于这种情况,则应检查SCB中的VTOR寄存器[1]的内容。它应该指向有效的向量表(例如从GCC骑行启动程序集生成的.isr_vector
部分)。
LPCxxxx芯片对我来说很陌生,所以我不能提供任何有用的细节,但是例如如果LPC1850和LPC1857在内存地址上有差异并且你在某处设置了VTOR,你可能需要以不同的方式设置它。您首先能够启动(调用重置处理程序)LPC1850的事实表明您具有启动设备的有效向量表。
[1] 0xe000ed08
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/Ciheijba.html