CodeWarrior编译器中编译目标的设置

2024-09-06 03:58

本文主要是介绍CodeWarrior编译器中编译目标的设置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在CodeWarrior编译器中,生成的map文件中TARGET SECTION(编译目标)中有一项时Memory Model选项,这个的改变影响生成的s19文件,最明显的地方在于生成的s19文件中位于0xFFFE开头的地址中的数据会被改变。

对于地址模型的介绍,摘抄自https://blog.csdn.net/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地址中。 
    .

选择地址模型将会影响你的项目中的三个元素:

  1. 编译器选项
  2. ANSI库
  3. 链接器参数文件

项目的编译器选项

编译器的行为受到选择的地址模型影响。CodeWarrior项目向导在你项目的编译器选项中插入一个 -M 选项。有三种参数,取决于模型:-Ms、-Mb或-Ml。这个选项指示编译器根据模型的假定来编译。

Small地址模型对应选项 -Ms。编译器不会插入任何指令来处理任何分页寄存器。变量将会被直接访问non-banked地址,并且你的代码会使用JSR/RTS指令来执行。

Banked地址模型对应选项 -Mb。当访问你的代码的时候,编译器会使用处理PPAGE寄存器的指令。在调用一个函数的时候会使用CALL指令。CALL指令会负责在运行你的函数前把它的分页号写到PPAGE寄存器中。变量则会默认的按照non-banked地址的方式访问。

Large地址模型对应选项 -Ml。编译器将使用CALL指令来访问你的代码,并且在访问RAM和EEPROM变量前也会插入分页处理指令,它们被默认放在分页地址。因此这个地址模型对代码大小和执行时间非常不友好,在大部分情况下不推荐。

如果你需要访问分页区变量,大部分情况下用这个方法就够了:选择banked地址模型,然后每次变量要放到分页区的时候都用特别标识符来告知编译器。文档的后面部分会讨论怎么访问分页区变量。这使得你可以只在需要访问分页区变量时才进行分页访问,而不是默认对所有变量都这么访问。

修改方式如下图:

按照前面的描述可以修改。

 

 

这篇关于CodeWarrior编译器中编译目标的设置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140938

相关文章

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

mtu设置多少网速最快? 路由器MTU设置最佳网速的技巧

《mtu设置多少网速最快?路由器MTU设置最佳网速的技巧》mtu设置多少网速最快?想要通过设置路由器mtu获得最佳网速,该怎么设置呢?下面我们就来看看路由器MTU设置最佳网速的技巧... 答:1500 MTU值指的是在网络传输中数据包的最大值,合理的设置MTU 值可以让网络更快!mtu设置可以优化不同的网

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

VSCode设置python SDK路径的实现步骤

《VSCode设置pythonSDK路径的实现步骤》本文主要介绍了VSCode设置pythonSDK路径的实现步骤,包括命令面板切换、settings.json配置、环境变量及虚拟环境处理,具有一定... 目录一、通过命令面板快速切换(推荐方法)二、通过 settings.json 配置(项目级/全局)三、

如何Python使用设置word的页边距

《如何Python使用设置word的页边距》在编写或处理Word文档的过程中,页边距是一个不可忽视的排版要素,本文将介绍如何使用Python设置Word文档中各个节的页边距,需要的可以参考下... 目录操作步骤代码示例页边距单位说明应用场景与高级用China编程途小结在编写或处理Word文档的过程中,页边距是一个

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四