Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1043913
  • 博文数量: 178
  • 博客积分: 10222
  • 博客等级: 上将
  • 技术积分: 2215
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-03 11:27
个人简介

有所追求

文章分类

全部博文(178)

文章存档

2012年(1)

2011年(5)

2010年(3)

2009年(78)

2008年(91)

我的朋友

分类: BSD

2008-03-12 12:53:38

楼主: 请教周公,关于一个bootload区的问题

我看到LPC2000资料上说:
由于处理器复位后,映射到0x00000000-0x0000003F地址空间的异常向量表源于bootload子块,因此CPU开始执行的实际上是philips在芯片出厂前写入bootload的程序。
问题:
1,bootload区本来就有异常向量表吗?如果有,为什么还要用户自己写
2,bootload区又重新映射到片内FLASH的最高地址,这个是硬件自动完成的吗?
3,不管中断向量表在什么地方,运行中,总是以0x00-0x3f可见,那么我做SMARTARM2200的实验《2.13_存储器重映射实验》时,不是破坏了中断向量表了么?
我是ARM新手,对这个BOOTLOAD和REMAP感到难理解,望朋友们不吝赐教啊

程序如下
/****************************************************************************
* 文 件 名:REMAP.C
* 功    能:将存储器重映射到片内RAM(0x40000000~0x4000003F),然后更改0x40000000~
*           0x4000003F的内容。
* 说    明:观察0x00000000~0x0000003F地址上的数据有何变化
****************************************************************************/
#include  "config.h"

#define   VECTOR_RAM           ((unsigned char *) 0x40000000)

/****************************************************************************
* 名    称:main()
* 功    能:存储器重映射。
****************************************************************************/
int  main(void)
{  
    uint8  i;
    uint8  *addr;

    MEMMAP = 0x02;            // 中断向量从静态RAM重映射(用户RAM模式)

    addr = VECTOR_RAM;
    for(i=0; i<64; i++)        // 用0x55填充0x40000000~0x4000003F
    {  
        *addr = 0x55;
        addr++;
    }
   
    addr = VECTOR_RAM;
    for(i=0; i<64; i++)        // 用0xAA填充0x40000000~0x4000003F
    {  
        *addr = 0xAA;
        addr++;
    }

    MEMMAP = 0x00;            // 中断向量从Boot Block重映射(Boot装载程序模式)
   
    while(1);
    return(0);
}



zlgarm 发表于 2007-6-19 17:16 ZLG-ARM 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

2楼: re:

1,bootload区本来就有异常向量表吗?如果有,为什么还要用户自己写
A:bootloader区的代码有自己的异常向量表,但是仅给bootloader使用的,再boot模式下使用。用户编写的异常向量表是给用户程序使用的。

2,bootload区又重新映射到片内FLASH的最高地址,这个是硬件自动完成的吗?
A:是的,硬件自动映射的。

3,不管中断向量表在什么地方,运行中,总是以0x00-0x3f可见,那么我做
SMARTARM2200的实验《2.13_存储器重映射实验》时,不是破坏了中断向量表了么?
A:该实验的确会破坏异常向量表,但是由于该程序没有产生异常,所以异常向量表的改动不会对程序运行造成影响。该实验是为了演示映射的现象。


cbqcgq 发表于 2007-6-19 23:04 ZLG-ARM 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

3楼: 谢谢您得解答,我如释负重

为了解决这个问题我研究了好几天,如果直接用你们的模板是一点问题也没有,试验作的也很顺。可是总觉得不搞定这个体系结构,自己茶不思饭不香,不明白为什么两个向量表究竟如何区别,究竟为什么需要两个向量表。而且对于试验板提供的程序,也没有去想他仅仅是演示映射用的,不过疑问多了,解决了,算时进步吧,再次谢谢您。
有些东西虽然很简单,但是简单也总得有个理由啊。这是我在这几天寻求解答的过程中得出的结论之一。当我拿这个问题去问别人时,他们的解答仅仅是用书面的资料,再问下去,就没了。做技术得,还是得学会深究。
阅读(1284) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~