让单片机运行速度更快一些
[09-12 16:29:29] 来源:http://www.88dzw.com 单片机学习 阅读:8241次
文章摘要: RomTool.c完成860T初始化,SDRAM的刷新,中断及外设的初始化;Flash到SDRAM的代码搬运驱动模块及跳转模块。对应的二进制映像文件为RomTool.bin。 RAMapp.c是实际的应用程序, 对应的二进制映像文件为RAMapp .bin。RAMapp.bin被搬运后在SDRAM中运行。 3.1 物理存储器地址映射规则 RomTool.c的物理地址映射规则为:数据放在起始为0x3000,大小为0xf0000的SDRAM空间里;代码被烧结在起始为0x02800000,大小为0x10000的Flash空间里,不会被搬运,也在该空间里运行。所以在RomTo
让单片机运行速度更快一些,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.comRomTool.c完成860T初始化,SDRAM的刷新,中断及外设的初始化;Flash到SDRAM的代码搬运驱动模块及跳转模块。对应的二进制映像文件为RomTool.bin。
RAMapp.c是实际的应用程序, 对应的二进制映像文件为RAMapp .bin。RAMapp.bin被搬运后在SDRAM中运行。
3.1 物理存储器地址映射规则
RomTool.c的物理地址映射规则为:数据放在起始为0x3000,大小为0xf0000的SDRAM空间里;代码被烧结在起始为0x02800000,大小为0x10000的Flash空间里,不会被搬运,也在该空间里运行。
所以在RomTool.lnx中指定的定位规则也应该是这个地址范围,如下:
MEMORY
{
ram1: ORIGIN = 0x00003000, LENGTH = 0xf000
flash: ORIGIN = 0x02800000, LENGTH = 0x1000
}
SECTIONS
{
.data : {} > ram1
.text : {} > flash
}
RamApp.c的物理地址映射规则为:
数据放在起始为0x3000,大小为0xf0000的空间里;代码被烧结在起始为0x02810000,大小为0x70000的Flash中,它要被搬运到起始为0x00F00000,大小为0x70000的SDRAM空间里,即RamApp.Bin实际在SDRAM中运行。
所以,在RamApp.lnx中指定的定位规则应该在SDRAM中,如下:
MEMORY
{
ram1: ORIGIN = 0x00003000, LENGTH = 0xf000
ram: ORIGIN = 0x00F00000, LENGTH = 0x7000
}
SECTIONS
{
.data : {} > ram1
.text : {} > ram
}
最后,在860单片机系统的地址映射规则如图2所示。对照图1,可以观察到这和传统的程序地址映射有很大不同。
3.2 搬运的过程
860T上电复位,RomTool.bin首先被执行,完成初始化工作后,运行代码搬运函数,将RAMapp.bin搬运到SDRAM中,随后改变PC(Program Counter)的值,无条件转移到SDRAM中运行RAMapp.bin,如图3所示。
3.3 搬运代码的驱动模块及跳转模块源代码
(1)搬运代码驱动模块的代码
void MoveCodeF_to_RAM(UWORD *FlashCode_Add, UWORD *RamCode_Add,UWORD CodeLen) {
do{
*RamCode_Add++ = *FlashCode_Add++;
CodeLen?
} while ( CodeLen!=0)
}
该段代码是将开始地址为FlashCode_Add,长度为CodeLen的Flash代码搬运到开始地址为RamCode_Add,长度为CodeLen的SDRAM 中。
(2)主函数及跳转模块
#define FlashCode_Add_V 0x02810000
#define RamCode_Add_V 0x00f00000
#define CodeLen_V 0x00070000/4
void main(){
UWORD *I=(UWORD *) FlashCode_Add_v;
UWORD *j= (UWORD *) RamCode_Add_v;
UWORD *k= (UWORD *) CodeLen_V;
MoveCodeF_to_RAM( (UWORD *) i, (UWORD *) j, (UWORD *)k );
# 跳转模块
asm(“addis r2,0,0x00f0”);
asm(“ori r2,r2,0x0000”); # 代码起始地址0x00f00000
asm(“mtspr LR,r2”);
asm(“bclr 20,0”); # 无条件转跳到链接寄存器
# (LR)中的地址
《让单片机运行速度更快一些》相关文章
- › 让单片机运行速度更快一些
- 在百度中搜索相关文章:让单片机运行速度更快一些
- 在谷歌中搜索相关文章:让单片机运行速度更快一些
- 在soso中搜索相关文章:让单片机运行速度更快一些
- 在搜狗中搜索相关文章:让单片机运行速度更快一些