错误信息如下(IAR5.30,LPC2378,SmartARM2300板):<br />Thu Apr 16 14:55:42 2009: DLL version: V3.92a, compiled Oct 6 2008 19:58:36<br />Thu Apr 16 14:55:42 2009: Firmware: J-Link ARM V6 compiled Jul 30 2008 11:24:59<br />Thu Apr 16 14:55:42 2009: JTAG speed is initially set to: 32 kHz<br />Thu Apr 16 14:55:42 2009: Initial reset was performed<br />Thu Apr 16 14:55:42 2009: TotalIRLen = 4, IRPrint = 0x01<br />Thu Apr 16 14:55:42 2009: J-Link found 1 JTAG device(s). ARM core Id: 4F1F0F0F ARM7<br />Thu Apr 16 14:55:42 2009: Device at TAP0 selected<br />Thu Apr 16 14:55:42 2009: JLINK command: ProjectFile = C:\uCOSARM\HansBoard\NXP\LPC2378\APP\settings\uCOSARM_Debug.jlink, return = 0<br />Thu Apr 16 14:55:42 2009: JLINK command: device = LPC2378, return = 0<br />Thu Apr 16 14:55:42 2009: TotalIRLen = 4, IRPrint = 0x01<br />Thu Apr 16 14:55:42 2009: RTCK reaction time is approx. 189ns<br />Thu Apr 16 14:55:42 2009: Auto JTAG speed: Adaptive<br />Thu Apr 16 14:55:45 2009: 40479 bytes downloaded (14.88 Kbytes/sec)<br />Thu Apr 16 14:55:45 2009: Loaded debugee: C:\uCOSARM\HansBoard\NXP\LPC2378\APP\Debug\Exe\uCOSARM.out<br />Thu Apr 16 14:55:45 2009: Target reset<br />Thu Apr 16 14:55:57 2009: Breakpoint hit: Code @ bsp.c:278.9, type: default (auto) <br />Thu Apr 16 14:55:57 2009: The stack pointer for stack 'SVC_STACK' (currently 0x40001B70) is outside the stack range (0x40000400 to 0x40000600)<br />Thu Apr 16 14:55:59 2009: Breakpoint hit: Code @ bsp.c:278.9, type: default (auto) <br />Thu Apr 16 14:55:59 2009: The stack pointer for stack 'SVC_STACK' (currently 0x40001B60) is outside the stack range (0x40000400 to 0x40000600)<br />Thu Apr 16 14:56:01 2009: The stack pointer for stack 'SVC_STACK' (currently 0x40001B60) is outside the stack range (0x40000400 to 0x40000600)<br />Thu Apr 16 14:56:02 2009: The stack 'CSTACK' is filled to 96% (992 bytes used out of 1024). The warning threshold is set to 90.%<br />Thu Apr 16 14:56:02 2009: The stack pointer for stack 'SVC_STACK' (currently 0x40001B60) is outside the stack range (0x40000400 to 0x40000600)<br /><br /><br /><br /><br />很奇怪,堆栈指针一下子就已经跑到0x40001B70去了,中间连个90%的提示都没有,很显然不是堆栈设置过小,而是堆栈指针从一开始就根本没有在0x40000400 to 0x40000600这个区域内,各位帮忙看看这是哪里设置错了?<br /><br /><br />icf文件:<br /><br />/*###ICF### Section handled by ICF editor, don't touch! ****/<br />/*-Editor annotation file-*/<br />/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */<br />/*-Specials-*/<br />define symbol __ICFEDIT_intvec_start__ = 0x00000000;<br />/*-Memory Regions-*/<br />define symbol __ICFEDIT_region_ROM_start__ = 0x00000044;<br />define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF;<br />define symbol __ICFEDIT_region_RAM_start__ = 0x40000000;<br />define symbol __ICFEDIT_region_RAM_end__ = 0x40007FFF;<br />/*-Sizes-*/<br />define symbol __ICFEDIT_size_cstack__ = 0x400;<br />define symbol __ICFEDIT_size_svcstack__ = 0x200;<br />define symbol __ICFEDIT_size_irqstack__ = 0x100;<br />define symbol __ICFEDIT_size_fiqstack__ = 0x40;<br />define symbol __ICFEDIT_size_undstack__ = 0x10;<br />define symbol __ICFEDIT_size_abtstack__ = 0x10;<br />define symbol __ICFEDIT_size_heap__ = 0x2000;<br />/**** End of ICF editor section. ###ICF###*/<br /><br /><br />define memory mem with size = 4G;<br />define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__];<br />define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__];<br /><br />define symbol __region_USB_DMA_RAM_start__ = 0x7FD00000;<br />define symbol __region_USB_DMA_RAM_end__ = 0x7FD01FFF;<br />define region USB_DMA_RAM_region= mem:[from __region_USB_DMA_RAM_start__ to __region_USB_DMA_RAM_end__];<br /><br />define symbol __region_EMAC_DMA_RAM_start__ = 0x7FE00000;<br />define symbol __region_EMAC_DMA_RAM_end__ = 0x7FE03FFF;<br />define region EMAC_DMA_RAM_region= mem:[from __region_EMAC_DMA_RAM_start__ to __region_EMAC_DMA_RAM_end__];<br /><br />define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };<br />define block SVC_STACK with alignment = 8, size = __ICFEDIT_size_svcstack__ { };<br />define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };<br />define block FIQ_STACK with alignment = 8, size = __ICFEDIT_size_fiqstack__ { };<br />define block UND_STACK with alignment = 8, size = __ICFEDIT_size_undstack__ { };<br />define block ABT_STACK with alignment = 8, size = __ICFEDIT_size_abtstack__ { };<br />define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };<br /><br />initialize by copy { readwrite };<br />do not initialize { section .noinit };<br />do not initialize { section USB_DMA_RAM };<br />do not initialize { section EMAC_DMA_RAM };<br /><br />place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };<br /><br />place in ROM_region { readonly };<br />place in RAM_region { readwrite,<br /> block CSTACK, block SVC_STACK, block IRQ_STACK, block FIQ_STACK,<br /> block UND_STACK, block ABT_STACK, block HEAP };<br />place in USB_DMA_RAM_region<br /> { readwrite data section USB_DMA_RAM };<br />place in EMAC_DMA_RAM_region<br /> { readwrite data section EMAC_DMA_RAM };<br /><br /><br />另外,在xcl文件里面有这么一段:<br /><br />-D_CSTACK_SIZE=100<br />-D_IRQ_STACK_SIZE=100<br />-D_FIQ_STACK_SIZE=0<br />-D_SVC_STACK_SIZE=100<br />-D_ABT_STACK_SIZE=0<br />-D_UND_STACK_SIZE=0<br />-D_HEAP_SIZE=100<br /><br />-Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND<br />-Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE=RAMSTART-RAMEND<br />-Z(DATA)FIQ_STACK+_FIQ_STACK_SIZE=RAMSTART-RAMEND<br />-Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND<br />-Z(DATA)ABT_STACK+_ABT_STACK_SIZE=RAMSTART-RAMEND<br />-Z(DATA)UND_STACK+_UND_STACK_SIZE=RAMSTART-RAMEND<br />-Z(DATA)HEAP+_HEAP_SIZE=RAMSTART-RAMEND<br /><br />两者设置的明明是同一个东西,但是数值却不一样,尤其是xcl文件,把几个堆栈都定义在整个RAM空间内了? |
|