zxj123

zxj123

0个粉丝

92

问答

0

专栏

0

资料

zxj123  发布于  2012-12-24 14:37:17
采纳率 0%
92个问答
2732

MDK分散加载文件

 
    分散加载文件

    Scatterfile(分散加载描述文件)用于LARM链接器的输入参数,它指定映像文件内部各区域的download与运行时位置。LARM将会根据scatterfile生成一些区域相关的符号,它们是全局的供用户建立运行时环境时使用。通过这个文件可以指定程序的入口地址。在利用MDK进行实际应用程序开发时,常常需要使用道分散加载文件,例如以下情况:

    存在复杂的地址映射:例如代码和数据需要分开放在在多个区域。

    存在多种存储器类型:例如包含Flash、ROM、SDRAM、快速SRAM。需要根据代码与数据的特性把他们放在不同的存储器中,比如中断处理部分放在快速SRAM内部来提高响应速度,而把不常用到的代码放到速度比较慢的Flash内。

    函数的地址固定定位:可以利用Scatterfile实现把某个函数放在固定地址,而不管其应用程序是否已经改变或重新编译。

    利用符号确定堆与堆栈:

    内存映射的IO:采用scatterfile可以实现把某个数据段放在精确的地指处。

    因此对于实际的嵌入式系统来说scatterfile是必不可少的,因为嵌入式系统通常采用了ROM,RAM,和内存映射的IO。关于Scatterfile的相关知识非常多,详细内容可以参考MDK所带的帮助,下面给出一个简单实例。

    LOAD_ROM 0x0000 0x8000

    {

    EXEC_ROM 0x00000x8000

    {

    *(+RO)

    }

    RAM 0x100000x6000

    {

    *(+RW, +ZI)

    }

    }

    这个分散加载描述文件对应的分散加载映像如图3-12所示,文件中各项内容的含义分别是:

    LOAD_ROM(下载区域名称) 0x0000(下载区域起始地址) 0x8000(下载区域最大字节数)

    {

    EXEC_ROM(第一执行区域名称) 0x0000(第一执行区域起始地址) 0x8000(第一执行

   区域最大字节数)

    {

    *(+RO(代码与只读数据))

    }

    RAM(第二执行区域名称) 0x10000(第二执行区域起始地址) 0x6000(第二执行区域最大

   字节数)

    {

    *(+RW(读写变量), +ZI(未初始化变量))

    }

    }

    图3-12 分散加载映像图

    2.内嵌汇编语言

    编译C时,可以通过__asm 汇编程序说明符调用内嵌汇编程序。说明符后面跟随有一列包含在大括号中的汇编程序指令。例如:

    __asm

    {

    instruction[;instruction]

    ...

    [instruction]

    }

    如果两条指令在同一行中,必须用分号将其分隔。如果一条指令占用多行,必须用反斜线符号(\)指定续行。可在内嵌汇编语言块内的任意位置处使用C注释。可在任何可以使用C语句的地方使用__asm 语句。


我来回答
回答0个
时间排序
认可量排序
易百纳技术社区暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区