新建
上传
首页
助手
最?/div>
资料?/div>
工具

原来一直不太明白单片机的地址映射?/p>

也没有仔细的研究过,

我想这就是我不是牛人的原?/p>

吧。通常开始学单片机,

都是写一些比较小的程序,如果不做项目开发之类的,以飞思卡?/p>

16

位单片机的资源配置来说也足够了。但是前一阵子遇到了一个问题,需要在

RAM

中存一

个比较大的常数数组,但是单单存在

RAM

中的话,肯定是存不下,考虑到数组是常数,所

以只能存?/p>

ROM

里,但是当时时间较短,没有研究明白,还得到了非常惨痛的教训,觉得

不甘心,

打算再花时间研究了一下?/p>

在以后的文章中我会把我的研究心得记录下来?/p>

希望?/p>

家提出意见?/p>

 

飞思卡?/p>

16

位单片机的资源配?/p>

 

?/p>

MC9S12XS128MAL

为例?/p>

其实

DG128

之类的类似?/p>

如图一?/p>

128

代表的是单片机中?/p>

FLASH

大小?/p>

128K Byte

,同?/p>

64

代表的是单片机中?/p>

FLASH

大小?/p>

64 K Byte

?/p>

256

代表的是单片

机中?/p>

FLASH

大小?/p>

256 K Byte

?/p>

但是

S12(X)

所使用的内?/p>

CPU12(X)

的地址总线?/p>

16

位,

?/p>

址范围最大为

2^16 =64K Byte

?/p>

而这

64K Byte

的寻址空间还包括寄存器?/p>

EEPROM

(利?/p>

Data 

Flash

模拟?/p>

?/p>

RAM

等,因此不是所有的

64K Byte

都是用来寻址

FLASH

。所以在

S12(X)

系列?/p>

片机中,很多资源是以分页的形式出现的,其中包?/p>

EEPROM

?/p>

RAM

?/p>

FLASH

?/p>

EEPROM

?/p>

每页大小?/p>

1K Byte

?/p>

RAM

的每页大小为

4K Byte

?/p>

FLASH

的每页大小为

16K Byte

?/p>

因此

XS128

?/p>

EEPROM

的页数为

8K/1K = 8

页,

RAM

的页数为

8K/4K = 2

页,

Flash

的页数为

128K/16K = 8

页?/p>

 

 

图一

 

 

图二

 

在单片普通模式中?/p>

复位后,

所有内存资源的映射如图二所示,

其中?/p>

0x0000-0x07FF

?/p>

2K

范围内映射为寄存器区,如

I/O

端口寄存器等,当然寄存器没有那么多,后面的一部分其实

没有使用?/p>

 

?/p>

0x0800-0x0BFF

,共

1K

的空间,映射?/p>

EEPROM

区,由上面的分析?/p>

XS128

中共?/p>

8

页的

?/p>

8K

?/p>

EEPROM

,所以这

8

页的

EEPROM

都是以分页的形式出现的,可以通过设置寄存?/p>

EPAGE

选择不同的页并进行访问;

 

?/p>

0x0C00

?/p>

0x0FFF

?/p>

1K

空间为保留区(其实这里面也有学问,以后探讨)

?/p>

 

?/p>

0x1000

?/p>

0x3FFF

?/p>

12K

空间?/p>

RAM

区,分为三页,但是和前面所说的

EEPROM

不同?/p>

这三页中?/p>

2

页(对于

XS128

?/p>

XS256

)或一页(对于

XS64

)为固定页,位于

12K

空间的后

一部分?/p>

?/p>

XS128

为例?/p>

其内部的

RAM

资源?/p>

8K

?/p>

所以其三页中的最后两?/p>

?/p>

0x2000-0x3FFF

?/p>

为固定页,第一页(

0x1000-0x1FFF

)为窗口区,通过设置寄存?/p>

RPAGE

来映射其他分页的

RAM

,当然在单片普通模式下?/p>

XS128

内部已经没有其他?/p>

RAM

了,所以这一页其实也?/p>

有用。但是对?/p>

XS256

,这一页是有用的,因为它总共?/p>

12K

?/p>

RAM

。但是,在单片普通模

式下,即没有外扩

RAM

的情况下,用户是不用刻意的去配置

RPAGE

的,因为复位的时候,

已经默认指向那一页的

RAM

?/p>

 

?/p>

0x4000-0xFFFF

的总共

48K

的空间为

Flash

区,分为三页。其中第一页和第三页为固定?/p>

Flash

页,中间的一页(

0x8000-0xBFFF

)为窗口区,通过设置

PPAGE

寄存器,可以映射到其

他的分页

Flash

?/p>

 

在最后的一页固定的

Flash

区域中的最?/p>

256

字节中,保存的是中断向量?/p>

 

 

对于

RAM

?/p>

Flash

来说,其实固定页和其他的分页资源是统一编址的,不同的是固定页不

可以通过寄存器(

RPAGE

?/p>

PPAGE

)改变映射,而其他的页必须通过寄存器的设置来选择?/p>

射不同的页?/p>

 

Ͼλ
新建
上传
首页
助手
最?/div>
资料?/div>
工具

原来一直不太明白单片机的地址映射?/p>

也没有仔细的研究过,

我想这就是我不是牛人的原?/p>

吧。通常开始学单片机,

都是写一些比较小的程序,如果不做项目开发之类的,以飞思卡?/p>

16

位单片机的资源配置来说也足够了。但是前一阵子遇到了一个问题,需要在

RAM

中存一

个比较大的常数数组,但是单单存在

RAM

中的话,肯定是存不下,考虑到数组是常数,所

以只能存?/p>

ROM

里,但是当时时间较短,没有研究明白,还得到了非常惨痛的教训,觉得

不甘心,

打算再花时间研究了一下?/p>

在以后的文章中我会把我的研究心得记录下来?/p>

希望?/p>

家提出意见?/p>

 

飞思卡?/p>

16

位单片机的资源配?/p>

 

?/p>

MC9S12XS128MAL

为例?/p>

其实

DG128

之类的类似?/p>

如图一?/p>

128

代表的是单片机中?/p>

FLASH

大小?/p>

128K Byte

,同?/p>

64

代表的是单片机中?/p>

FLASH

大小?/p>

64 K Byte

?/p>

256

代表的是单片

机中?/p>

FLASH

大小?/p>

256 K Byte

?/p>

但是

S12(X)

所使用的内?/p>

CPU12(X)

的地址总线?/p>

16

位,

?/p>

址范围最大为

2^16 =64K Byte

?/p>

而这

64K Byte

的寻址空间还包括寄存器?/p>

EEPROM

(利?/p>

Data 

Flash

模拟?/p>

?/p>

RAM

等,因此不是所有的

64K Byte

都是用来寻址

FLASH

。所以在

S12(X)

系列?/p>

片机中,很多资源是以分页的形式出现的,其中包?/p>

EEPROM

?/p>

RAM

?/p>

FLASH

?/p>

EEPROM

?/p>

每页大小?/p>

1K Byte

?/p>

RAM

的每页大小为

4K Byte

?/p>

FLASH

的每页大小为

16K Byte

?/p>

因此

XS128

?/p>

EEPROM

的页数为

8K/1K = 8

页,

RAM

的页数为

8K/4K = 2

页,

Flash

的页数为

128K/16K = 8

页?/p>

 

 

图一

 

 

图二

 

在单片普通模式中?/p>

复位后,

所有内存资源的映射如图二所示,

其中?/p>

0x0000-0x07FF

?/p>

2K

范围内映射为寄存器区,如

I/O

端口寄存器等,当然寄存器没有那么多,后面的一部分其实

没有使用?/p>

 

?/p>

0x0800-0x0BFF

,共

1K

的空间,映射?/p>

EEPROM

区,由上面的分析?/p>

XS128

中共?/p>

8

页的

?/p>

8K

?/p>

EEPROM

,所以这

8

页的

EEPROM

都是以分页的形式出现的,可以通过设置寄存?/p>

EPAGE

选择不同的页并进行访问;

 

?/p>

0x0C00

?/p>

0x0FFF

?/p>

1K

空间为保留区(其实这里面也有学问,以后探讨)

?/p>

 

?/p>

0x1000

?/p>

0x3FFF

?/p>

12K

空间?/p>

RAM

区,分为三页,但是和前面所说的

EEPROM

不同?/p>

这三页中?/p>

2

页(对于

XS128

?/p>

XS256

)或一页(对于

XS64

)为固定页,位于

12K

空间的后

一部分?/p>

?/p>

XS128

为例?/p>

其内部的

RAM

资源?/p>

8K

?/p>

所以其三页中的最后两?/p>

?/p>

0x2000-0x3FFF

?/p>

为固定页,第一页(

0x1000-0x1FFF

)为窗口区,通过设置寄存?/p>

RPAGE

来映射其他分页的

RAM

,当然在单片普通模式下?/p>

XS128

内部已经没有其他?/p>

RAM

了,所以这一页其实也?/p>

有用。但是对?/p>

XS256

,这一页是有用的,因为它总共?/p>

12K

?/p>

RAM

。但是,在单片普通模

式下,即没有外扩

RAM

的情况下,用户是不用刻意的去配置

RPAGE

的,因为复位的时候,

已经默认指向那一页的

RAM

?/p>

 

?/p>

0x4000-0xFFFF

的总共

48K

的空间为

Flash

区,分为三页。其中第一页和第三页为固定?/p>

Flash

页,中间的一页(

0x8000-0xBFFF

)为窗口区,通过设置

PPAGE

寄存器,可以映射到其

他的分页

Flash

?/p>

 

在最后的一页固定的

Flash

区域中的最?/p>

256

字节中,保存的是中断向量?/p>

 

 

对于

RAM

?/p>

Flash

来说,其实固定页和其他的分页资源是统一编址的,不同的是固定页不

可以通过寄存器(

RPAGE

?/p>

PPAGE

)改变映射,而其他的页必须通过寄存器的设置来选择?/p>

射不同的页?/p>

 

">
新建
上传
首页
助手
最?/div>
资料?/div>
工具

原来一直不太明白单片机的地址映射?/p>

也没有仔细的研究过,

我想这就是我不是牛人的原?/p>

吧。通常开始学单片机,

都是写一些比较小的程序,如果不做项目开发之类的,以飞思卡?/p>

16

位单片机的资源配置来说也足够了。但是前一阵子遇到了一个问题,需要在

RAM

中存一

个比较大的常数数组,但是单单存在

RAM

中的话,肯定是存不下,考虑到数组是常数,所

以只能存?/p>

ROM

里,但是当时时间较短,没有研究明白,还得到了非常惨痛的教训,觉得

不甘心,

打算再花时间研究了一下?/p>

在以后的文章中我会把我的研究心得记录下来?/p>

希望?/p>

家提出意见?/p>

 

飞思卡?/p>

16

位单片机的资源配?/p>

 

?/p>

MC9S12XS128MAL

为例?/p>

其实

DG128

之类的类似?/p>

如图一?/p>

128

代表的是单片机中?/p>

FLASH

大小?/p>

128K Byte

,同?/p>

64

代表的是单片机中?/p>

FLASH

大小?/p>

64 K Byte

?/p>

256

代表的是单片

机中?/p>

FLASH

大小?/p>

256 K Byte

?/p>

但是

S12(X)

所使用的内?/p>

CPU12(X)

的地址总线?/p>

16

位,

?/p>

址范围最大为

2^16 =64K Byte

?/p>

而这

64K Byte

的寻址空间还包括寄存器?/p>

EEPROM

(利?/p>

Data 

Flash

模拟?/p>

?/p>

RAM

等,因此不是所有的

64K Byte

都是用来寻址

FLASH

。所以在

S12(X)

系列?/p>

片机中,很多资源是以分页的形式出现的,其中包?/p>

EEPROM

?/p>

RAM

?/p>

FLASH

?/p>

EEPROM

?/p>

每页大小?/p>

1K Byte

?/p>

RAM

的每页大小为

4K Byte

?/p>

FLASH

的每页大小为

16K Byte

?/p>

因此

XS128

?/p>

EEPROM

的页数为

8K/1K = 8

页,

RAM

的页数为

8K/4K = 2

页,

Flash

的页数为

128K/16K = 8

页?/p>

 

 

图一

 

 

图二

 

在单片普通模式中?/p>

复位后,

所有内存资源的映射如图二所示,

其中?/p>

0x0000-0x07FF

?/p>

2K

范围内映射为寄存器区,如

I/O

端口寄存器等,当然寄存器没有那么多,后面的一部分其实

没有使用?/p>

 

?/p>

0x0800-0x0BFF

,共

1K

的空间,映射?/p>

EEPROM

区,由上面的分析?/p>

XS128

中共?/p>

8

页的

?/p>

8K

?/p>

EEPROM

,所以这

8

页的

EEPROM

都是以分页的形式出现的,可以通过设置寄存?/p>

EPAGE

选择不同的页并进行访问;

 

?/p>

0x0C00

?/p>

0x0FFF

?/p>

1K

空间为保留区(其实这里面也有学问,以后探讨)

?/p>

 

?/p>

0x1000

?/p>

0x3FFF

?/p>

12K

空间?/p>

RAM

区,分为三页,但是和前面所说的

EEPROM

不同?/p>

这三页中?/p>

2

页(对于

XS128

?/p>

XS256

)或一页(对于

XS64

)为固定页,位于

12K

空间的后

一部分?/p>

?/p>

XS128

为例?/p>

其内部的

RAM

资源?/p>

8K

?/p>

所以其三页中的最后两?/p>

?/p>

0x2000-0x3FFF

?/p>

为固定页,第一页(

0x1000-0x1FFF

)为窗口区,通过设置寄存?/p>

RPAGE

来映射其他分页的

RAM

,当然在单片普通模式下?/p>

XS128

内部已经没有其他?/p>

RAM

了,所以这一页其实也?/p>

有用。但是对?/p>

XS256

,这一页是有用的,因为它总共?/p>

12K

?/p>

RAM

。但是,在单片普通模

式下,即没有外扩

RAM

的情况下,用户是不用刻意的去配置

RPAGE

的,因为复位的时候,

已经默认指向那一页的

RAM

?/p>

 

?/p>

0x4000-0xFFFF

的总共

48K

的空间为

Flash

区,分为三页。其中第一页和第三页为固定?/p>

Flash

页,中间的一页(

0x8000-0xBFFF

)为窗口区,通过设置

PPAGE

寄存器,可以映射到其

他的分页

Flash

?/p>

 

在最后的一页固定的

Flash

区域中的最?/p>

256

字节中,保存的是中断向量?/p>

 

 

对于

RAM

?/p>

Flash

来说,其实固定页和其他的分页资源是统一编址的,不同的是固定页不

可以通过寄存器(

RPAGE

?/p>

PPAGE

)改变映射,而其他的页必须通过寄存器的设置来选择?/p>

射不同的页?/p>

 

Ͼλ">
Ͼλ
Ŀ

内存溢出 - 百度文库
新建
上传
首页
助手
最?/div>
资料?/div>
工具

原来一直不太明白单片机的地址映射?/p>

也没有仔细的研究过,

我想这就是我不是牛人的原?/p>

吧。通常开始学单片机,

都是写一些比较小的程序,如果不做项目开发之类的,以飞思卡?/p>

16

位单片机的资源配置来说也足够了。但是前一阵子遇到了一个问题,需要在

RAM

中存一

个比较大的常数数组,但是单单存在

RAM

中的话,肯定是存不下,考虑到数组是常数,所

以只能存?/p>

ROM

里,但是当时时间较短,没有研究明白,还得到了非常惨痛的教训,觉得

不甘心,

打算再花时间研究了一下?/p>

在以后的文章中我会把我的研究心得记录下来?/p>

希望?/p>

家提出意见?/p>

 

飞思卡?/p>

16

位单片机的资源配?/p>

 

?/p>

MC9S12XS128MAL

为例?/p>

其实

DG128

之类的类似?/p>

如图一?/p>

128

代表的是单片机中?/p>

FLASH

大小?/p>

128K Byte

,同?/p>

64

代表的是单片机中?/p>

FLASH

大小?/p>

64 K Byte

?/p>

256

代表的是单片

机中?/p>

FLASH

大小?/p>

256 K Byte

?/p>

但是

S12(X)

所使用的内?/p>

CPU12(X)

的地址总线?/p>

16

位,

?/p>

址范围最大为

2^16 =64K Byte

?/p>

而这

64K Byte

的寻址空间还包括寄存器?/p>

EEPROM

(利?/p>

Data 

Flash

模拟?/p>

?/p>

RAM

等,因此不是所有的

64K Byte

都是用来寻址

FLASH

。所以在

S12(X)

系列?/p>

片机中,很多资源是以分页的形式出现的,其中包?/p>

EEPROM

?/p>

RAM

?/p>

FLASH

?/p>

EEPROM

?/p>

每页大小?/p>

1K Byte

?/p>

RAM

的每页大小为

4K Byte

?/p>

FLASH

的每页大小为

16K Byte

?/p>

因此

XS128

?/p>

EEPROM

的页数为

8K/1K = 8

页,

RAM

的页数为

8K/4K = 2

页,

Flash

的页数为

128K/16K = 8

页?/p>

 

 

图一

 

 

图二

 

在单片普通模式中?/p>

复位后,

所有内存资源的映射如图二所示,

其中?/p>

0x0000-0x07FF

?/p>

2K

范围内映射为寄存器区,如

I/O

端口寄存器等,当然寄存器没有那么多,后面的一部分其实

没有使用?/p>

 

?/p>

0x0800-0x0BFF

,共

1K

的空间,映射?/p>

EEPROM

区,由上面的分析?/p>

XS128

中共?/p>

8

页的

?/p>

8K

?/p>

EEPROM

,所以这

8

页的

EEPROM

都是以分页的形式出现的,可以通过设置寄存?/p>

EPAGE

选择不同的页并进行访问;

 

?/p>

0x0C00

?/p>

0x0FFF

?/p>

1K

空间为保留区(其实这里面也有学问,以后探讨)

?/p>

 

?/p>

0x1000

?/p>

0x3FFF

?/p>

12K

空间?/p>

RAM

区,分为三页,但是和前面所说的

EEPROM

不同?/p>

这三页中?/p>

2

页(对于

XS128

?/p>

XS256

)或一页(对于

XS64

)为固定页,位于

12K

空间的后

一部分?/p>

?/p>

XS128

为例?/p>

其内部的

RAM

资源?/p>

8K

?/p>

所以其三页中的最后两?/p>

?/p>

0x2000-0x3FFF

?/p>

为固定页,第一页(

0x1000-0x1FFF

)为窗口区,通过设置寄存?/p>

RPAGE

来映射其他分页的

RAM

,当然在单片普通模式下?/p>

XS128

内部已经没有其他?/p>

RAM

了,所以这一页其实也?/p>

有用。但是对?/p>

XS256

,这一页是有用的,因为它总共?/p>

12K

?/p>

RAM

。但是,在单片普通模

式下,即没有外扩

RAM

的情况下,用户是不用刻意的去配置

RPAGE

的,因为复位的时候,

已经默认指向那一页的

RAM

?/p>

 

?/p>

0x4000-0xFFFF

的总共

48K

的空间为

Flash

区,分为三页。其中第一页和第三页为固定?/p>

Flash

页,中间的一页(

0x8000-0xBFFF

)为窗口区,通过设置

PPAGE

寄存器,可以映射到其

他的分页

Flash

?/p>

 

在最后的一页固定的

Flash

区域中的最?/p>

256

字节中,保存的是中断向量?/p>

 

 

对于

RAM

?/p>

Flash

来说,其实固定页和其他的分页资源是统一编址的,不同的是固定页不

可以通过寄存器(

RPAGE

?/p>

PPAGE

)改变映射,而其他的页必须通过寄存器的设置来选择?/p>

射不同的页?/p>

 



ļ׺.doc޸Ϊ.docĶ

  • ѧ²֪ʶܽᣨĩ - ͼ
  • ѧٿ֪ʶеѶ
  • ȽԽȺȲ
  • ѧϰ⼰
  • ¹ܽ¹ƻ
  • ˮѧϰ⼯-ˮ
  • ʡVFPģ()
  • ѧϰ⼰
  • ĻʵʩȫĻϢԴ̵֪ͨ
  • ϸˮеļ[1]

վ

԰ Ͼλ
ϵͷ779662525#qq.com(#滻Ϊ@)