我的 COSMIC-C 链接器为我的 STM8S 微控制器项目生成了一个映射文件,尽管有一些熟悉的部分,但有点缺乏表达力。
这是地图文件输出和一些模块:
--------
Segments
--------
start 00008080 end 00008084 length 4 segment .const
start 00008087 end 00008298 length 529 segment .text
start 00004000 end 00004000 length 0 segment .eeprom
start 00000000 end 00000000 length 0 segment .bsct
start 00000000 end 0000000a length 10 segment .ubsct
start 0000000a end 0000000a length 0 segment .bit
start 0000000a end 0000000a length 0 segment .share
start 00000100 end 00000100 length 0 segment .data
start 00000100 end 00000100 length 0 segment .bss
start 00000000 end 000003be length 958 segment .info.
start 00008000 end 00008080 length 128 segment .const
start 00008084 end 00008087 length 3 segment .init
-------
Modules
-------
D:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8\lib\crtsi0.sm8:
start 00008087 end 000080d7 length 80 section .text
start 00000100 end 00000100 length 0 section .bss
start 00000000 end 00000000 length 0 section .ubsct
start 00000000 end 00000034 length 52 section .info.
Release\clockcontrol.o:
start 000080d7 end 000080f7 length 32 section .text
start 00000034 end 000000c1 length 141 section .info.
Release\main.o:
start 000080f7 end 00008145 length 78 section .text
start 000000c1 end 00000146 length 133 section .info.
start 00008080 end 00008084 length 4 section .const
我知道.text和.data。我可以假设bsct和ubsct是data和bss(尽管已经有 .data 和 .bss );还有关于.eeprom和.const可能代表它们明显的内存部分。但 :
- .info、.bit、.share、.init 是什么?
- 我对 .bsct 和 .ubsct 的假设是否正确?如果不是,这些部分是什么,如果是,为什么我们同时拥有 .bsct/.ubsct 和 .data/.bss ?
- 为什么我们有两个.const?(它们是连续的)
- 尽管已定义,但问题 1 中提到的所有项目都没有出现在我的代码的任何模块中。它们只是标准吗?
- 这些部分是否遵循命名约定,或者它们只是 COSMIC 之外的东西?我的意思是它们是否是标准的。
有很多thanx。
更新:
COSMIC 链接器文档有很多关于如何制作链接器脚本的描述,但没有预定义的表格。似乎脚本是由 STVD(IDE)编辑的。尽管如此,有一个示例(与我的问题不太相关)可能会有所帮助: