在CodeWarrior编译器中,生成的map文件中TARGET SECTION(编译目标)中有一项时Memory Model选项,这个的改变影响生成的s19文件,最明显的地方在于生成的s19文件中位于0xFFFE开头的地址中的数据会被改变。
对于地址模型的介绍,摘抄自https://blog.youkuaiyun.com/lin_strong/article/details/78127072
编译器和链接器的默认行为
当使用项目向导创建一个新的CodeWarrior项目时,用户被要求选择一个地址模型,选项有:Small、banked和large地址模型。选择的地址模型将决定CodeWarrior的链接器会默认地会把你的代码以及变量放在哪里,以及决定CodeWarrior的编译器会怎么产生访问你的对象的指令。
这里描述了每个地址模型:
- Small memory model:你的代码和变量都会默认放在non-banked位置。
- Banked memory model:你的代码默认会放在banked地址中,但是你的变量会默认放在non-banked地址中。
- Large memory model:你的代码和变量都会默认放在banked地址中。
.
选择地址模型将会影响你的项目中的三个元素:
- 编译器选项
- ANSI库
- 链接器参数文件