
SCATTER FILE
文章平均质量分 72
hill_guo
从实践中学习技术。
展开
-
分散加载(8)---使用举例
所以,code_ram_1的加载域地址必然是在LR_ROM_1范围中,图中分配的地址 = 0x08000a74 (Code),0x08000ab4 (Data). 当程序跑起来,code_ram_1必然在ER_RAM_1的范围中,图中分配的地址 = 0x2000004c. 基于这个原理推理,加载域中包含的执行域的地址范围全部加起来,不得超过加载域的最大范围。3)分散加载文件有什么好处?test_variant_C,test_func_A(u8 input),存放到ER_RAM_3;五、分散加载文件内容。原创 2023-04-03 16:06:27 · 816 阅读 · 0 评论 -
分散加载(7)---输入节input section
这个适配器是用来找出输入节名称的,比如在程序中定义了一些输入节名称:__attribute__((section(“ram_code_1”)), __attribute__((section(“ram_code_2”)), __attribute__((section(“ram_code_3”)), 那么可以使用ram_code*作为input_section_pattern,这样就可以把所有含有ram_code的输入节名称找出来,输入节对应的内容(代码或者数据)放到指定的存储器位置。原创 2023-04-03 16:00:55 · 605 阅读 · 0 评论 -
分散加载(6)---根域root region
使用偏移量 +0 的方式定义根域,有一个特别需要注意的地方,就是后面的执行域都视作根域,但是包含ZI数据的执行域除外。在分散加载文件中,我们必须定义一个这样的执行域:这个执行域的开始地址必须等于它所在的加载域的开始地址,并且在这个执行域中,必须包含整个程序(也称镜像文件)的入口点(entry point),说白了就是我们常用的启动文件***.S,在这个文件中包含了RESET段,C语言入口函数_main(). 这样的一个执行域,称作根域;必须定义根域,必须把入口点放在根域中,否则连接器报错。原创 2023-04-03 15:57:39 · 652 阅读 · 0 评论 -
分散加载(5)---函数放在指定内存位置
通过连接器,把一个函数放在指定存储器期望的位置,大体有两种方法。第二种,指定函数在某一个范围,使用name section,配合分散加载文件使用。我也不知道准确的翻译,大概意识就是定义一个段section,给这个段取一个name,合起来就是name section。2)方法二:使用name section把函数放在指定存储器位置,配合分散加载文件。1)方法一:使用放置符号__at把函数放在指定存储器位置,无需修改分散加载文件。这种方式可以指定函数在一个执行域的地址范围内,而不是指定在绝对物理地址。原创 2023-04-03 15:51:56 · 1050 阅读 · 0 评论 -
分散加载(4)---变量放在指定内存位置
第二种,指定全局变量在某一个范围,使用name section,配合分散加载文件使用。这种情况,一定要注意,在分散加载文件中,放置".ARM.__at_0x20004000"所在执行域的地址范围包含了0x20004000地址。感觉这种方法,没有必要,方法二不修改分散加载文件,也能实现目的,何必还使用方法三修改分散加载文件呢。3)方法三:使用name section把变量放在指定存储器位置,配合分散加载文件。2)方法二:使用放置符号__at把变量放在指定存储器位置,配合使用分散加载文件。原创 2023-04-03 15:49:45 · 1241 阅读 · 0 评论 -
分散加载(3)---sct文件说明
1)分散加载文件由加载域Load region和执行域Execution region组成,一个分散加载文件中可以定义多个加载域Load region,一个加载域Load region中可以定义多个执行域Execution region,一个执行域Execution region可以定义多个输入节input section。2)区域单位名称: 域region,节section。2.1)加载域的构成:定义一个加载域,由以下几个部分组成:加载域名称,基地址,属性,最大内存空间,至少一个执行域。原创 2023-04-03 15:45:24 · 1752 阅读 · 0 评论 -
分散加载(2)---分散加载文件执行机制
分散加载文件一般用于复杂的工程,比如一个MCU/SOC中有几块ROM/FLASH,几块RAM,我们需要指定,哪些代码存放在哪个位置,哪些数据存放在哪个位置。固件烧录到芯片,此时还没有运行,此时的代码(code)和数据(RO,RW,ZI)在芯片存储器(这里的存储器指flash/ROM/RAM等)中的分布,应该就是Load view。ARM连接器ArmLink通过分散加载文件,把目标文件*.o,库文件*.lib,数据,连接在一起,生成镜像文件---即编译后的elf,bin,hex文件,以及输出map文件。原创 2023-04-03 15:37:27 · 995 阅读 · 0 评论 -
分散加载(1)---初步介绍
使用MDK开发cortex m 系列内核,复杂的场合需要使用到分散文件scatter file,scatter file类似gcc编译器的连接脚本,就是分配存储器空间,代码和数据按自定义的设置,存放到自己想要存放的位置。打开keil的help---about uVsion ,可以看到使用的编译器,汇编器,连接器等信息,如下图,注意:这里的信息跟你选择的编译器类型有关。四、分散文件官网文件。原创 2023-03-30 17:12:20 · 773 阅读 · 0 评论