|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
搞不定了,上來向大家求助:IAR下LPC2214的調(diào)試問題 |
| 作者:stonewater 欄目:ARM技術(shù) |
幾乎把有關(guān)的帖子都看了,我把問題說一下吧: 我用的開發(fā)環(huán)境是IAR V4.40A,工具是wiggler,使用了H-JTAG。 只要是運(yùn)行這段代碼****處就跳到地址為0x0000000C處(代碼用的是micrium上面的,不論有沒有用ucos都是這樣) #define BSP_UNDEF_INSTRUCTION_VECTOR_ADDR (*(INT32U *)0x00000004L) #define BSP_SWI_VECTOR_ADDR (*(INT32U *)0x00000008L) #define BSP_PREFETCH_ABORT_VECTOR_ADDR (*(INT32U *)0x0000000CL) #define BSP_DATA_ABORT_VECTOR_ADDR (*(INT32U *)0x00000010L) #define BSP_IRQ_VECTOR_ADDR (*(INT32U *)0x00000018L) #define BSP_FIQ_VECTOR_ADDR (*(INT32U *)0x0000001CL) #define BSP_IRQ_ISR_ADDR (*(INT32U *)0x00000038L) #define BSP_FIQ_ISR_ADDR (*(INT32U *)0x0000003CL) . . . MEMMAP = 0x01; PINSEL2 = 0x0f814914; BCFG0 = 0x1000ffef; BCFG1 = 0x1000ffef; . . . **** BSP_IRQ_VECTOR_ADDR = 0xE59FF018; **** BSP_IRQ_ISR_ADDR = (INT32U)OS_CPU_IRQ_ISR; **** BSP_FIQ_VECTOR_ADDR = 0xE59FF018; **** BSP_FIQ_ISR_ADDR = (INT32U)OS_CPU_FIQ_ISR; **** BSP_UNDEF_INSTRUCTION_VECTOR_ADDR = 0xEAFFFFFE; **** BSP_SWI_VECTOR_ADDR = 0xEAFFFFFE; **** BSP_PREFETCH_ABORT_VECTOR_ADDR = 0xEAFFFFFE; **** BSP_DATA_ABORT_VECTOR_ADDR = 0xEAFFFFFE; **** BSP_FIQ_VECTOR_ADDR = 0xEAFFFFFE; 我在加了starup文件后,對(duì)xcl文件進(jìn)行了修改在log文件中可以看到(沒有加這個(gè)文件的時(shí)候,log文件中沒有提示以下的問題): 1:FLASH調(diào)試時(shí): The stack pointer for stack 'SVC_STACK' (currently 0x400000F8) is outside the stack range (0x400005FC to 0x400006FC) 2: RAM調(diào)試時(shí): The stack pointer for stack 'SVC_STACK' (currently 0x4000220C) is outside the stack range (0x40002710 to 0x40002910) 全軟件仿真的時(shí)候沒有問題,但是在內(nèi)部FASH和內(nèi)部RAM下就跳到數(shù)據(jù)預(yù)取出錯(cuò)0x0000000C處了,希望各位高手能夠指點(diǎn),先謝了:) |
| 2樓: | >>參與討論 |
| 作者: wlq_9 于 2006/8/5 10:20:00 發(fā)布:
memmap=0x02; |
|
| 3樓: | >>參與討論 |
| 作者: stonewater 于 2006/8/5 10:40:00 發(fā)布:
試了,可以調(diào)試了,謝謝wlq_9了 但是為什么:不能用memmap=0x01;呢?為什么不能用FLASH模式而要用RAM模式呢?還有就是: The stack pointer for stack 'SVC_STACK' (currently 0x40002208) is outside the stack range (0x40002710 to 0x40002910)還是出現(xiàn)。我也設(shè)置xcl文件了: -DRAMSTART=40000000 -DRAMEND=40003FFF -D_SVC_STACK_SIZE=200 -D_CSTACK_SIZE=1000 -D_IRQ_STACK_SIZE=100 -D_FIR_STACK_SIZE=20 -D_ABT_STACK_SIZE=0 -D_UND_STACK_SIZE=0 -D_HEAP_SIZE=1000 -Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND -Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)FIR_STACK+_FIR_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)ABT_STACK+_ABT_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)UND_STACK+_UND_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)HEAP+_HEAP_SIZE=RAMSTART-RAMEND 這個(gè)問題怎么解決啊,謝謝了 |
|
| 4樓: | >>參與討論 |
| 作者: wlq_9 于 2006/8/5 14:56:00 發(fā)布:
因?yàn)?br>重映射到RAM,你才可以動(dòng)態(tài)修改中斷向量啊.如果映射到FLASH,中斷向量就不能動(dòng)態(tài)修改了. |
|
| 5樓: | >>參與討論 |
| 作者: stonewater 于 2006/8/5 18:20:00 發(fā)布:
哦,原來是這樣 還有一個(gè)問題要請(qǐng)教: The stack pointer for stack 'SVC_STACK' (currently 0x40002208) is outside the stack range (0x40002710 to 0x40002910)的問題是因?yàn)閤cl文件沒有設(shè)置好嗎? |
|
| 6樓: | >>參與討論 |
| 作者: stonewater 于 2006/8/8 11:58:00 發(fā)布:
問題具體的現(xiàn)象和設(shè)置 在: LDR R0, ??OS_TaskSwHook ; OSTaskSwHook(); MOV LR, PC BX R0 運(yùn)行的是SYS模式下,執(zhí)行: MSR CPSR_cxsf, #0xD3 ; SWITCH.html">SWITCH to SVC mode with IRQ and FIQ disabled 后切換到SVC模式下之后,執(zhí)行到*****時(shí): ; SWITCH TO HIGHEST PRIORITY TASK LDR R4, ??OS_TCBHighRdy ; Get highest priority task TCB address LDR R4, [R4] ; get stack pointer ****** LDR SP, [R4] ; SWITCH to the new stack 就抱堆棧越界了。 堆棧的分配是: INTVEC 00000000 - 0000003B 3C com 2 ICODE 00000040 - 0000015F 120 rel 2 DIFUNCT 00000160 rel 2 CODE 00000160 - 00001EB3 1D54 rel 2 INITTAB 00001EB4 - 00001EBF C rel 2 DATA_ID 00001EC0 dse 0 DATA_C 00001EC0 - 0000203B 17C rel 2 DATA_I 40000000 dse 0 DATA_Z 40000000 - 400007CC 7CD rel 2 SVC_STACK 400007D0 - 400008CF 100 rel 2 CSTACK 400008D0 - 400018CF 1000 rel 2 IRQ_STACK 400018D0 - 40001ECF 600 rel 2 xcl文件是: -DRAMSTART=40000000 -DRAMEND=40003FFF -D_SVC_STACK_SIZE=100 -D_CSTACK_SIZE=1000 -D_IRQ_STACK_SIZE=600 -D_FIR_STACK_SIZE=10 -D_ABT_STACK_SIZE=10 -D_UND_STACK_SIZE=10 -D_HEAP_SIZE=2000 -Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND -Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)FIR_STACK+_FIR_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)ABT_STACK+_ABT_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)UND_STACK+_UND_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)HEAP+_HEAP_SIZE=RAMSTART-RAMEND 搞了幾天都不知道怎么解決這個(gè)越界的問題(SVC_STACK_SIZE我也改大過),啟動(dòng)文件用的是IAR下帶的: lpc2xxx_cstartup.s79,希望大家能夠給些指導(dǎo),謝謝了 |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |