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

相关文章

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

SpringBoot项目引入token设置方式

《SpringBoot项目引入token设置方式》本文详细介绍了JWT(JSONWebToken)的基本概念、结构、应用场景以及工作原理,通过动手实践,展示了如何在SpringBoot项目中实现JWT... 目录一. 先了解熟悉JWT(jsON Web Token)1. JSON Web Token是什么鬼

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

使用Spring Cache时设置缓存键的注意事项详解

《使用SpringCache时设置缓存键的注意事项详解》在现代的Web应用中,缓存是提高系统性能和响应速度的重要手段之一,Spring框架提供了强大的缓存支持,通过​​@Cacheable​​、​​... 目录引言1. 缓存键的基本概念2. 默认缓存键生成器3. 自定义缓存键3.1 使用​​@Cacheab

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO