分散加载(5)---函数放在指定内存位置

  通过连接器,把一个函数放在指定存储器期望的位置,大体有两种方法。第一种:可以指定函数放到绝对物理地址位置。使用__at放置符号,不用分散加载文件。第二种,指定函数在某一个范围,使用name section,配合分散加载文件使用。我这里就归纳为总共2种方法吧。

  name section是啥? 我也不知道准确的翻译,大概意识就是定义一个段section,给这个段取一个name,合起来就是name section。

  注意:下面都是针对ARM编译器5(AC5)描述,AC6可能有区别。

1)方法一:使用放置符号__at把函数放在指定存储器位置,无需修改分散加载文件。

①在main.c中增加如下代码:

int sqr_formula(int n1) __attribute__((section(".ARM.__at_0x08006000")));

int sqr_formula(int n1)

{

    return n1*n1;

}

②我们在map文件中可以看到:

分散加载(5)---函数放在指定内存位置_第1张图片 

 分散加载(5)---函数放在指定内存位置_第2张图片

 2)方法二:使用name section把函数放在指定存储器位置,配合分散加载文件。

  这种方式可以指定函数在一个执行域的地址范围内,而不是指定在绝对物理地址。

  ①在main.c中增加代码:

int sqr_formula(int n1) __attribute__((section("foo_name_section")));

int sqr_formula(int n1)

{

    return n1*n1;

}

  ②在分散加载文件中增加内容:

 分散加载(5)---函数放在指定内存位置_第3张图片

 

③查看map文件:

分散加载(5)---函数放在指定内存位置_第4张图片 

 分散加载(5)---函数放在指定内存位置_第5张图片

 

   

你可能感兴趣的:(SCATTER,FILE,单片机)