这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » EasyArm2200,BUG 怀疑是EasyArm2200的一个BUG

共2条 1/1 1 跳转至

EasyArm2200,BUG 怀疑是EasyArm2200的一个BUG

院士
2006-09-17 18:14:16     打赏
EasyArm2200,BUG 怀疑是EasyArm2200的一个BUG



关键词: EasyArm2200     怀疑     一个    

院士
2006-12-22 22:43:00     打赏
2楼
问 现象:      在easyARM2200配套的代码中,任意地方调用如下函数,将产生data abort的异常。
            void   function( void )
            {
                unsigned long *p = ( unsigned long * )0x81F80130;       /* line 1 */
                *p = 0xFFFFFFFF;                                        /* line 2 */
            }

问题:      为什么会产生data abort的异常? 如何解决?

相关资料:  1). 利用ARMcc中 -S的参数的功能,输出以上函数的汇编代码,如下
                function PROC
                    LDR      r0,|L1.16|
                    MVN      r1,#0
                    STR      r1,[r0,#0]
                    MOV      pc,lr
                |L1.16|
                    DCD      0x81f80130
                    ENDP
                在系统初始化的时候调用这个函汇编数,也会产生同样的异常(注:我是通过在data abort异常处理
                的入口点,添加点亮led的代码来判断是否进入data abort异常的)。
             2).将line 2中的0xFFFFFFFF改成0x11111111,则不会产生异常。
             3).将line 1中的0x81F80130改成0x81F80120,则不会产生异常。
             4).line 1中的0x81F80130已经字对齐。
             5).执行如下代码片断,同样会产生data abort的异常。
                ........
                unsigned long *p = ( unsigned long * )0x81000000;
                while( p < 81FFFFFF )
                {
                    *p++ = 0;       /* initialize ram  */
                }
                注:执行这段代码的环境代码很小,且没有使用外部的ram。
             6).相关的初始化代码
                reset
                    ldr     r0, =PINSEL2
                    ldr     r1, =0x0f814914
                    str     r1, [R0]
                    ldr     r0, =BCFG0
                    ldr     r1, =0x1000ffef
                    str     r1, [R0]
                    ldr     r0, =BCFG1
                    ldr     r1, =0x1000ffef
                    str     r1, [R0]
                    ......
说明:  我在设计一个内存管理模块,以上的代码反映了调试中遇到的问题。 1: 测试通过,并没问题。/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:            main.c
** Last modified Date:  2004-09-16
** Last Version:        1.0
** Descriptions:        The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:            Chenmingji
** Created date:        2004-09-16
** Version:                1.0
** Descriptions:        The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"

void   function( void )
       {
            unsigned long *p = ( unsigned long * )0x81F80130;       /* line 1 */
            *p = 0xFFFFFFFF;                                        /* line 2 */
       }

        int main (void)
{// add user source code
    unsigned long *p = ( unsigned long * )0x81000000;
    function();

       while( p < (unsigned long *)0x81FFFFFF )
    {
        *p++ = 0;       /* initialize ram  */
    }
    return 0;
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]