ARM的分散加载文件(scatter)介绍
* error 65: access violation at 0x4C000018 : no write permission
* error 65: access violation at 0x00000000 : no execute/read permission (ram.sct的时候)
我发现当我工程设置中linker中选择了runinram.sct和runinflash.sct或者自动生成的sct文件的时候就出现上面的错误。应该就是地址的问题。但是具体怎么修改才能解决这个错误,还没弄明白。弄明白了再发。
下面是找了一篇值得参考的文章:
原文地址:
http://hi.baidu.com/pengjj0807/blog/item/ef73e287a212453cc65cc3be
KEIL下分散加载文件的使用
*
; * Scatter-Loading Description File generated by uVision *
; *
LR_IROM1 0x08000000 0x00004000 ; load region size_region第一个加载域,起始地址0x08000000,{大小0x00004000
ER_IROM1 0x08000000 0x00004000 ; load address = execution address第一个运行时域,
{起始0x08000000,大小0x00004000
*.o (RESET, +First)IAP第一阶段还是在FLASH中运行
*(InRoot$$Sections)
startup_stm32f10x_md.o
}
ER_IROM2 0x20008000 0x00004000 ; load address = execution address第二个运行时域,
{起始0x20008000,大小0x00004000
.ANY (+RO)IAP第二阶段加载到SDRAM中运行
}
RW_IRAM1 0x20000000 0x00008000 ; RW data把可读写的数据和初始化为0的数据放在内存SDRAM的开头
{
.ANY (+RW +ZI)
}
}
让MDK自己分配--选linker-usexxx
对于分散加载的概念,在《ARM体系结构与编程》书中第11章有明确介绍。 分散加载文件(即scatter file 后缀为.scf)是一个文本文件,通过编写一个分散加载文件来指定 但在某些场合,我们希望把某些数据放在指定的地址处,那么这时候SCATTER文件就发挥了非常大的作用 举个例子:比如像LPC2378芯片具有多个不连续的SRAM,通用的RAM是32KB,可是32KB不够用,我想把 这是一个标准的常用的分散加载文件,现在加注释于后,方便以后查阅: LR_IROM1 0x00000000 0x00080000 ;; 第一个加载域,名字为LR_IROM1,起始 RW_IRAM1 0x40000000 0x0000e800 ;;这是第二个运行时域,功能同上 下面是针对LPC2378的USB SRAM作数据RAM使用的配置: ; LR_IROM1 0x00000000 0x00080000 ;; 第一个加载域,名字为LR_IROM1,起始 RW_IRAM1 0x40000000 0x0000e800 |
找了3个分散加载文件来分析:
1、7x256的flash.sct分散加载文件:
Load_region 0x1
ARM分散加载文件scatte 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)