1.分散加载文件Scatter file(分散加载描述文件)用于LARM链接器的输入参数,它指定映像文件内部各区域的download与运行时位置。LARM将会根据scatter file生成一些区域相关的符号,它们是全局的供用户建立运行时环境时使用。通过这个文件可以指定程序的入口地址。在利用MDK进行实际应用程序开发时,常常需要使用道分散加载文件,例如以下情况: 存在复杂的地址映射:例如代码和数据需要分开放在在多个区域。 存在多种存储器类型:例如包含Flash、ROM、SDRAM、快速SRAM。需要根据代码与数据的特性把他们放在不同的存储器中,比如中断处理部分放在快速SRAM内部来提高响应速度,而把不常用到的代码放到速度比较慢的Flash内。 函数的地址固定定位:可以利用Scatter file实现把某个函数放在固定地址,而不管其应用程序是否已经改变或重新编译。 利用符号确定堆与堆栈: 内存映射的IO:采用scatter file可以实现把某个数据段放在精确的地指处。 因此对于实际的嵌入式系统来说scatter file是必不可少的,因为嵌入式系统通常采用了ROM,RAM,和内存映射的IO。关于Scatter file的相关知识非常多,详细内容可以参考MDK所带的帮助,下面给出一个简单实例。 LOAD_ROM 0x0000 0x8000 {
EXEC_ROM 0x0000 0x8000
{
*(+RO)
}
RAM 0x10000 0x6000
{
*(+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 语句。
|