sevenchrist 发表于 2011-6-29 15:43:15

ucos2,7X256,官网的IAR版本的例程,可以debug, 掉电重启后不能启动, 很诡异啊...

情况是这样:

官网下载的ucos2的例程, IAR版本的, 针对AT91SAM7X256的板子;

使用jlink, Debug情况下运行正常, 但是断电之后, 板子程序不能启动, 不知道是没有烧写进去还是启动不起来...

大家有遇到过这种情况的么?

sevenchrist 发表于 2011-6-29 15:44:06

启动文件如下:

;
;********************************************************************************************************
;                                    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

sevenchrist 发表于 2011-6-29 15:44:32

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

sevenchrist 发表于 2011-6-29 15:45:21

链接文件如下:

/*###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 };

sevenchrist 发表于 2011-6-30 08:56:45

顶一下

size327948964 发表于 2011-6-30 09:02:35

设置里bebug的download选项内容全部去掉。

sevenchrist 发表于 2011-6-30 12:51:19

回复【5楼】size327948964
设置里bebug的download选项内容全部去掉。
-----------------------------------------------------------------------

你是说把截图里面的选项都去掉?
你不是认真的吧.....

http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_653555CUFEYP.png
(原文件名:TM截图未命名.png)

cxbing001 发表于 2011-6-30 20:45:45

首先那个rom地址不对,应该是

define symbol __ICFEDIT_region_ROM_start__   = 0x100000;
define symbol __ICFEDIT_region_ROM_end__   = 0x13FFFF;

然后那个debug中的download选项确实是要全部去掉,因为jlink下载的时候不使用iar自带的校验和下载方式。

这个应该和启动文件没什么关系

应该就可以了吧,我就是一直这么用的。

mcu.runner 发表于 2011-6-30 23:05:39

有两个可能:
1.用 jlink 调试时正常运行,可能是下载到 RAM 里,不是下载到 Flash 里
2.下载到 Flash 里,但没有设置从 Flash 启动

好好看看 7x256 的硬件手册吧。

sevenchrist 发表于 2011-7-1 09:07:39

回复【7楼】cxbing001
首先那个rom地址不对,应该是
define symbol __icfedit_region_rom_start__   = 0x100000;
define symbol __icfedit_region_rom_end__   = 0x13ffff;
然后那个debug中的download选项确实是要全部去掉,因为jlink下载的时候不使用iar自带的校验和下载方式。
这个应该和启动文件没什么关系
应该就可以了吧,我就是一直这么用的。

-----------------------------------------------------------------------
地址没有问题,就是一个remap的差异,你的这种和我贴的,之前都已经测试过了.

下载的选项我都去掉之后, 进度条一闪就完了,这种情况下,debug都不能正常运行.....
你说的这个方式我之前一致都没用成功过, 都是用的默认的, 这会是什么问题呢?

太诡异啦!!!!!!!

sevenchrist 发表于 2011-7-1 09:08:17

回复【8楼】mcu.runner
有两个可能:
1.用 jlink 调试时正常运行,可能是下载到 ram 里,不是下载到 flash 里
2.下载到 flash 里,但没有设置从 flash 启动
好好看看 7x256 的硬件手册吧。
-----------------------------------------------------------------------

肯定不会犯这种基本错误.....

还有什么好的建议吗?

mcu.runner 发表于 2011-7-1 21:53:23

回复【10楼】sevenchrist
-----------------------------------------------------------------------

1、把从0地址开始的n字节读出来和你链接生成的 bin 文件的前n字节比对一下,看看是不是一致。
2、确认往0xffffFF64 写了 0x5A00020B 了(配置从 flash 启动)

如果都没问题,那就只能去找芯片厂家问究竟了。。。。

sevenchrist 发表于 2011-7-2 09:02:04

回复【11楼】mcu.runner
回复【10楼】sevenchrist
-----------------------------------------------------------------------
1、把从0地址开始的n字节读出来和你链接生成的 bin 文件的前n字节比对一下,看看是不是一致。
2、确认往0xffffff64 写了 0x5a00020b 了(配置从 flash 启动)
如果都没问题,那就只能去找芯片厂家问究竟了。。。。
-----------------------------------------------------------------------

好的,文件之前我比对过了,是一致的.

flash启动是用的atmel的samba工具设置的,但是没有读出来测试过.

关键是一样的代码,我用IAR4.41的版本就一切正常, 现在想用5.1的版本,就不正常了,悲剧啊...
页: [1]
查看完整版本: ucos2,7X256,官网的IAR版本的例程,可以debug, 掉电重启后不能启动, 很诡异啊...