ucos2,7X256,官网的IAR版本的例程,可以debug, 掉电重启后不能启动, 很诡异啊...
情况是这样:官网下载的ucos2的例程, IAR版本的, 针对AT91SAM7X256的板子;
使用jlink, Debug情况下运行正常, 但是断电之后, 板子程序不能启动, 不知道是没有烧写进去还是启动不起来...
大家有遇到过这种情况的么? 启动文件如下:
;
;********************************************************************************************************
; EXCEPTION VECTORS & STARTUP CODE
;
; File : cstartup.s
; For : ARM7 or ARM9
; Toolchain : IAR EWARM V5.10 and higher
;********************************************************************************************************
;
;********************************************************************************************************
; MACROS AND DEFINIITIONS
;********************************************************************************************************
; Mode, correspords to bits 0-5 in CPSR
MODE_BITS DEFINE 0x1F ; Bit mask for mode bits in CPSR
USR_MODE DEFINE 0x10 ; User mode
FIQ_MODE DEFINE 0x11 ; Fast Interrupt Request mode
IRQ_MODE DEFINE 0x12 ; Interrupt Request mode
SVC_MODE DEFINE 0x13 ; Supervisor mode
ABT_MODE DEFINE 0x17 ; Abort mode
UND_MODE DEFINE 0x1B ; Undefined Instruction mode
SYS_MODE DEFINE 0x1F ; System mode
;********************************************************************************************************
; ARM EXCEPTION VECTORS
;********************************************************************************************************
SECTION .intvec:CODE:NOROOT(2)
PUBLIC__vector
PUBLIC__iar_program_start
IMPORTOS_CPU_ARM_ExceptUndefInstrHndlr
IMPORTOS_CPU_ARM_ExceptSwiHndlr
IMPORTOS_CPU_ARM_ExceptPrefetchAbortHndlr
IMPORTOS_CPU_ARM_ExceptDataAbortHndlr
IMPORTOS_CPU_ARM_ExceptIrqHndlr
IMPORTOS_CPU_ARM_ExceptFiqHndlr
ARM
__vector:
LDR PC, ; Absolute jump can reach 4 GByte
LDR PC, ; Branch to undef_handler
LDR PC, ; Branch to swi_handler
LDR PC, ; Branch to prefetch_handler
LDR PC, ; Branch to data_handler
__vector_0x14:
DC32 0 ; Reserved
LDR PC, ; Branch to irq_handler
LDR PC, ; Branch to fiq_handler
DC32 __iar_program_start
DC32 OS_CPU_ARM_ExceptUndefInstrHndlr
DC32 OS_CPU_ARM_ExceptSwiHndlr
DC32 OS_CPU_ARM_ExceptPrefetchAbortHndlr
DC32 OS_CPU_ARM_ExceptDataAbortHndlr
DC32 0
DC32 OS_CPU_ARM_ExceptIrqHndlr
DC32 OS_CPU_ARM_ExceptFiqHndlr
;********************************************************************************************************
; LOW-LEVEL INITIALIZATION
;********************************************************************************************************
SECTION FIQ_STACK:DATA:NOROOT(3)
SECTION IRQ_STACK:DATA:NOROOT(3)
SECTION SVC_STACK:DATA:NOROOT(3)
SECTION ABT_STACK:DATA:NOROOT(3)
SECTION UND_STACK:DATA:NOROOT(3)
SECTION CSTACK:DATA:NOROOT(3)
SECTION text:CODE:NOROOT(2)
REQUIRE __vector
EXTERN?main
PUBLIC__iar_program_start
EXTERNlowlevel_init
__iar_program_start:
;********************************************************************************************************
; STACK POINTER INITIALIZATION
;********************************************************************************************************
MRS r0,cpsr ; Original PSR value
BIC r0,r0,#MODE_BITS ; Clear the mode bits
ORR r0,r0,#SVC_MODE ; Set SVC mode bits
MSR cpsr_c,r0 ; Change the mode
LDR sp,=SFE(SVC_STACK) ; End of SVC_STACK
BIC r0,r0,#MODE_BITS ; Clear the mode bits
ORR r0,r0,#UND_MODE ; Set UND mode bits
MSR cpsr_c,r0 ; Change the mode
LDR sp,=SFE(UND_STACK) ; End of UND_STACK
BIC r0,r0,#MODE_BITS ; Clear the mode bits
ORR r0,r0,#ABT_MODE ; Set ABT mode bits
MSR cpsr_c,r0 ; Change the mode
LDR sp,=SFE(ABT_STACK) ; End of ABT_STACK
BIC r0,r0,#MODE_BITS ; Clear the mode bits
ORR r0,r0,#FIQ_MODE ; Set FIQ mode bits
MSR cpsr_c,r0 ; Change the mode
LDR sp,=SFE(FIQ_STACK) ; End of FIQ_STACK
BIC r0,r0,#MODE_BITS ; Clear the mode bits
ORR r0,r0,#IRQ_MODE ; Set IRQ mode bits
MSR cpsr_c,r0 ; Change the mode
LDR sp,=SFE(IRQ_STACK) ; End of IRQ_STACK
BIC r0,r0,#MODE_BITS ; Clear the mode bits
ORR r0,r0,#SYS_MODE ; Set System mode bits MSR cpsr_c,r0 ; Change the mode
LDR sp,=SFE(CSTACK) ; End of CSTACK
;********************************************************************************************************
; ADDITIONAL INITIALIZATION
;********************************************************************************************************
;********************************************************************************************************
; CONTINUE TO ?main FOR ADDITIONAL INITIALIZATION
;********************************************************************************************************
LDR r0,=?main
BX r0
END 链接文件如下:
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x00000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__= 0x00000100;
define symbol __ICFEDIT_region_ROM_end__ = 0x0003FFFF;
define symbol __ICFEDIT_region_RAM_start__= 0x00200000;
define symbol __ICFEDIT_region_RAM_end__ = 0x0020FFFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x400;
define symbol __ICFEDIT_size_svcstack__ = 0x100;
define symbol __ICFEDIT_size_irqstack__ = 0x100;
define symbol __ICFEDIT_size_fiqstack__ = 0x40;
define symbol __ICFEDIT_size_undstack__ = 0x40;
define symbol __ICFEDIT_size_abtstack__ = 0x40;
define symbol __ICFEDIT_size_heap__ = 0x400;
/**** End of ICF editor section. ###ICF###*/
define memory mem with size = 4G;
define region ROM_region = mem:;
define region RAM_region = mem:;
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
define block SVC_STACK with alignment = 8, size = __ICFEDIT_size_svcstack__ { };
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };
define block FIQ_STACK with alignment = 8, size = __ICFEDIT_size_fiqstack__ { };
define block UND_STACK with alignment = 8, size = __ICFEDIT_size_undstack__ { };
define block ABT_STACK with alignment = 8, size = __ICFEDIT_size_abtstack__ { };
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
initialize by copy { readwrite };
do not initialize{ section .noinit };
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
place in ROM_region { readonly };
place in RAM_region { readwrite,
block CSTACK, block SVC_STACK, block IRQ_STACK, block FIQ_STACK,
block UND_STACK, block ABT_STACK, block HEAP }; 顶一下 设置里bebug的download选项内容全部去掉。 回复【5楼】size327948964
设置里bebug的download选项内容全部去掉。
-----------------------------------------------------------------------
你是说把截图里面的选项都去掉?
你不是认真的吧.....
http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_653555CUFEYP.png
(原文件名:TM截图未命名.png) 首先那个rom地址不对,应该是
define symbol __ICFEDIT_region_ROM_start__ = 0x100000;
define symbol __ICFEDIT_region_ROM_end__ = 0x13FFFF;
然后那个debug中的download选项确实是要全部去掉,因为jlink下载的时候不使用iar自带的校验和下载方式。
这个应该和启动文件没什么关系
应该就可以了吧,我就是一直这么用的。 有两个可能:
1.用 jlink 调试时正常运行,可能是下载到 RAM 里,不是下载到 Flash 里
2.下载到 Flash 里,但没有设置从 Flash 启动
好好看看 7x256 的硬件手册吧。 回复【7楼】cxbing001
首先那个rom地址不对,应该是
define symbol __icfedit_region_rom_start__ = 0x100000;
define symbol __icfedit_region_rom_end__ = 0x13ffff;
然后那个debug中的download选项确实是要全部去掉,因为jlink下载的时候不使用iar自带的校验和下载方式。
这个应该和启动文件没什么关系
应该就可以了吧,我就是一直这么用的。
-----------------------------------------------------------------------
地址没有问题,就是一个remap的差异,你的这种和我贴的,之前都已经测试过了.
下载的选项我都去掉之后, 进度条一闪就完了,这种情况下,debug都不能正常运行.....
你说的这个方式我之前一致都没用成功过, 都是用的默认的, 这会是什么问题呢?
太诡异啦!!!!!!! 回复【8楼】mcu.runner
有两个可能:
1.用 jlink 调试时正常运行,可能是下载到 ram 里,不是下载到 flash 里
2.下载到 flash 里,但没有设置从 flash 启动
好好看看 7x256 的硬件手册吧。
-----------------------------------------------------------------------
肯定不会犯这种基本错误.....
还有什么好的建议吗? 回复【10楼】sevenchrist
-----------------------------------------------------------------------
1、把从0地址开始的n字节读出来和你链接生成的 bin 文件的前n字节比对一下,看看是不是一致。
2、确认往0xffffFF64 写了 0x5A00020B 了(配置从 flash 启动)
如果都没问题,那就只能去找芯片厂家问究竟了。。。。 回复【11楼】mcu.runner
回复【10楼】sevenchrist
-----------------------------------------------------------------------
1、把从0地址开始的n字节读出来和你链接生成的 bin 文件的前n字节比对一下,看看是不是一致。
2、确认往0xffffff64 写了 0x5a00020b 了(配置从 flash 启动)
如果都没问题,那就只能去找芯片厂家问究竟了。。。。
-----------------------------------------------------------------------
好的,文件之前我比对过了,是一致的.
flash启动是用的atmel的samba工具设置的,但是没有读出来测试过.
关键是一样的代码,我用IAR4.41的版本就一切正常, 现在想用5.1的版本,就不正常了,悲剧啊...
页:
[1]