基本概念
section与section属性
section是包含数据段或者代码段可放置在存储器内的最小逻辑单位,section即可放在RAM也可放在ROM内。在通常的嵌入式应用中,放置在RAM中的section没有任何内容,只是占有该存储空间。section具有如下属性:
编译器内部自定义section即属性
iar中关于block的概念
The block directive defines a named set of sections. By defining a block you can create
empty blocks of bytes that can be used。
通过系统icf文件模板对堆栈快的定义
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
可以看出,block定义的是一个地址快,对于大括号里可以放置不同的section。创建一个block的目的在于能够得到一个地址,大小等详细信息的存储空间。通常用来组织sections。也可以向STACK block一样,像内存要了这么一个空间,至于我要干什么编译器你就不要管了。
IAR链接过程
- 决定哪些模块需要包含到应用程序中。目标文件提供的模块通常包含进去。
- 选择链接目标文件用到的标准库文件。
- 决定目标文件哪些section需要包含进来,没有用到的自然不会包含进来。当然也可以通过特殊的编译器指令如__root来使section链接到目标文件(及时程序中没有用到)。
- 完成RAM中的代码和变量的初始化。初始化指令可以让链接器产生额外的代码能够copy ROM中的内容到RAM中。每个通过copy完成初始化的段被分成了两个段,一个在ROM,一个在RAM。如果没有人工初始化的话。链接器回自动产生启动代码来完成初始化。
- 通过 lcf