搜索
bottom↓
回复: 12

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

[复制链接]

出0入0汤圆

发表于 2011-6-29 15:43:15 | 显示全部楼层 |阅读模式
情况是这样:

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

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

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 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

    IMPORT  OS_CPU_ARM_ExceptUndefInstrHndlr
    IMPORT  OS_CPU_ARM_ExceptSwiHndlr
    IMPORT  OS_CPU_ARM_ExceptPrefetchAbortHndlr
    IMPORT  OS_CPU_ARM_ExceptDataAbortHndlr
    IMPORT  OS_CPU_ARM_ExceptIrqHndlr
    IMPORT  OS_CPU_ARM_ExceptFiqHndlr

    ARM

__vector:
    LDR            PC, [PC,#24]    ; Absolute jump can reach 4 GByte
    LDR     PC, [PC,#24]    ; Branch to undef_handler
    LDR     PC, [PC,#24]    ; Branch to swi_handler
    LDR     PC, [PC,#24]    ; Branch to prefetch_handler
    LDR     PC, [PC,#24]    ; Branch to data_handler
__vector_0x14:
    DC32    0               ; Reserved
    LDR            PC, [PC,#24]    ; Branch to irq_handler
    LDR            PC, [PC,#24]    ; 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
    EXTERN  lowlevel_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

出0入0汤圆

 楼主| 发表于 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

出0入0汤圆

 楼主| 发表于 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:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__];
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__];

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

出0入0汤圆

 楼主| 发表于 2011-6-30 08:56:45 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2011-6-30 09:02:35 | 显示全部楼层
设置里bebug的download选项内容全部去掉。

出0入0汤圆

 楼主| 发表于 2011-6-30 12:51:19 | 显示全部楼层
回复【5楼】size327948964  
设置里bebug的download选项内容全部去掉。
-----------------------------------------------------------------------

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


(原文件名:TM截图未命名.png)

出0入0汤圆

发表于 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自带的校验和下载方式。

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

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

出0入0汤圆

发表于 2011-6-30 23:05:39 | 显示全部楼层
有两个可能:
1.用 jlink 调试时正常运行,可能是下载到 RAM 里,不是下载到 Flash 里
2.下载到 Flash 里,但没有设置从 Flash 启动

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

出0入0汤圆

 楼主| 发表于 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都不能正常运行.....
你说的这个方式我之前一致都没用成功过, 都是用的默认的, 这会是什么问题呢?

太诡异啦!!!!!!!

出0入0汤圆

 楼主| 发表于 2011-7-1 09:08:17 | 显示全部楼层
回复【8楼】mcu.runner  
有两个可能:
1.用 jlink 调试时正常运行,可能是下载到 ram 里,不是下载到 flash 里
2.下载到 flash 里,但没有设置从 flash 启动
好好看看 7x256 的硬件手册吧。
-----------------------------------------------------------------------

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

还有什么好的建议吗?

出0入0汤圆

发表于 2011-7-1 21:53:23 | 显示全部楼层
回复【10楼】sevenchrist  
-----------------------------------------------------------------------

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

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

出0入0汤圆

 楼主| 发表于 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的版本,就不正常了,悲剧啊...
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 21:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表