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

相关文章

MySQL8.0设置redo缓存大小的实现

《MySQL8.0设置redo缓存大小的实现》本文主要在MySQL8.0.30及之后版本中使用innodb_redo_log_capacity参数在线更改redo缓存文件大小,下面就来介绍一下,具有一... mysql 8.0.30及之后版本可以使用innodb_redo_log_capacity参数来更改

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

Linux编译器--gcc/g++使用方式

《Linux编译器--gcc/g++使用方式》文章主要介绍了C/C++程序的编译过程,包括预编译、编译、汇编和链接四个阶段,并详细解释了每个阶段的作用和具体操作,同时,还介绍了调试和发布版本的概念... 目录一、预编译指令1.1预处理功能1.2指令1.3问题扩展二、编译(生成汇编)三、汇编(生成二进制机器语

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

电脑密码怎么设置? 一文读懂电脑密码的详细指南

《电脑密码怎么设置?一文读懂电脑密码的详细指南》为了保护个人隐私和数据安全,设置电脑密码显得尤为重要,那么,如何在电脑上设置密码呢?详细请看下文介绍... 设置电脑密码是保护个人隐私、数据安全以及系统安全的重要措施,下面以Windows 11系统为例,跟大家分享一下设置电脑密码的具体办php法。Windo

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时