IAR目标代码4字节对齐

news2024/11/29 0:40:43

向工程添加文件

eof.c :

// 文件头
#if defined(__CC_ARM)
// MDK
//    uint32_t g_update_flag[2] __attribute__((zero_init, at(0x1000FFF0)));

    const unsigned long gc_eof __attribute__((used)) = 0xFFFFFFFFul;
#elif defined(__ICCARM__)
// IAR
    __root const unsigned long gc_eof = 0xFFFFFFFFul;
#endif

__root 是IAR的扩展关键字,强制编译,保证没有使用的函数或者变量也能够包含在目标代码中
文件名可以任取,但到和后面自定义的段对应起来。

修改IAR的链接脚本icf文件

/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x08020400;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__     = 0x08020000;
define symbol __ICFEDIT_region_ROM_end__       = 0x080FFFFF;
define symbol __ICFEDIT_region_RAM0_start__    = 0x20000000;
define symbol __ICFEDIT_region_RAM0_end__      = 0x2001BFFF;
define symbol __ICFEDIT_region_RAM1_start__    = 0x2001C000;
define symbol __ICFEDIT_region_RAM1_end__      = 0x2001FFFF;
define symbol __ICFEDIT_region_RAM2_start__    = 0x20020000;
define symbol __ICFEDIT_region_RAM2_end__      = 0x2002FFFF;
define symbol __ICFEDIT_region_TCMSRAM_start__ = 0x10000000;
define symbol __ICFEDIT_region_TCMSRAM_end__   = 0x1000FFFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x8000;
define symbol __ICFEDIT_size_heap__   = 0x8000;
/**** End of ICF editor section. ###ICF###*/
define symbol __ICFEDIT_region_RAM_start__     = __ICFEDIT_region_RAM0_start__;
define symbol __ICFEDIT_region_RAM_end__       = __ICFEDIT_region_RAM2_end__;
export symbol __ICFEDIT_region_RAM_end__;

define memory mem with size = 4G;
define region ROM_region        = mem:[from __ICFEDIT_region_ROM_start__      to __ICFEDIT_region_ROM_end__];
define region RAM_region        = mem:[from __ICFEDIT_region_RAM0_start__     to __ICFEDIT_region_RAM0_end__]
                                | mem:[from __ICFEDIT_region_RAM2_start__     to __ICFEDIT_region_RAM2_end__];
define region NETRAM_region     = mem:[from __ICFEDIT_region_RAM1_start__     to __ICFEDIT_region_RAM1_end__];
define region TCMSRAM_region    = mem:[from __ICFEDIT_region_TCMSRAM_start__  to __ICFEDIT_region_TCMSRAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };
define block EOF       with alignment = 4, size = 4 {readonly object eof.o };

initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

//place in ROM_region     { readonly };
place in RAM_region     { readwrite,
                          block CSTACK, block HEAP }; 
place in ROM_region   { readonly, last block EOF};
/*place in ROM_region   { readonly, last object eof.o};*/
place in NETRAM_region  { section .netram };						
place in TCMSRAM_region { section .ccsram };

加入如下自定义段:

  • define block EOF with alignment = 4, size = 4 {readonly object eof.o }; 定义段,eof.o就是文件名
  • place in ROM_region { readonly, last block EOF}; 将定义的段放到目标代码的末尾

原理

利用编译器一般定义数据变量都是4字节对齐的原理,当生成的目标代码是奇数字节,这时候就不是4字节对齐,当给目标代码最后加入一个4字节对齐的变量时,按照4字节对齐原理,最后的奇数字节后面的位置就被空出来达到4字节对齐的目的
在这里插入图片描述
如上图所示,在最后强加4字节后,n+1这个字节就会空出来将前面的本来的奇数字节补齐成4字节。
无论最后是奇数是1个字节、2个字节、3个字节都是一样的,这里画演示图用3个字节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/857981.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ur3机械臂配置夹爪Robotiq2F-85】

【ur3机械臂配置夹爪Robotiq2F-85】 1. 前言2. 按照官网要求清点安装设备3. 在示教器上配置夹爪3.1 另一头连接好夹爪和缆线3.2 下载官网驱动 5. 总结 1. 前言 欢迎大家阅读2345VOR的博客【ur3机械臂配置夹爪Robotiq2F-85】🥳🥳🥳2345VOR鹏鹏…

【100天精通python】Day31:使用python操作数据库_数据库编程接口,连接对象和游标对象,数据库连接配置

专栏导读 专栏订阅地址:https://blog.csdn.net/qq_35831906/category_12375510.html 数据库编程接口是用于连接、操作和管理数据库的一组函数、类和方法。不同类型的数据库可能有不同的编程接口。以下是一些常见的数据库编程接口: 一、数据库编程接口 …

Android AOSP源码编译——AOSP下载(一)

一、电脑配置 Ubuntu16.04 16G,硬盘的大小最好大于300G (我这边是找了个win电脑装了双系统 没有使用虚拟机的方式) 二、基础环境配置 1、安装git sudo apt install git配置git email和name git config --global user.email "youexample.com" git conf…

大环境下,企业如何找到大数据传输解决方案

随着网络技术的进步和智能设备的普及,大数据成为了当下社会的热点话题。但是,大数据的传输和处理仍然存在着很多的困难和挑战。在大数据传输中,如何解决数据量巨大、网络带宽不足、传输时间过长和数据安全等问题,是当前亟待破解的…

zmibra ssl证书替换

一、阿里云上申请证书 选择其他证书 二、证书上传及制作 首先当然要去阿里云申请的ssl证书下载其他类型证书,解压缩后有两个文件上传到相应目录, 文件名类似18131-mail.xxx.comkey和181111-mail.xxx.com.pem 创建目录 /opt/zimbra/ssl/aliyunssl/ 上传这两个文件 以上是…

JVM 查看配置 jinfo 及使用 jstat,查看堆栈jstack及GC

1. Jinfo 查看正在运行的Java应用程序的扩展参数: 包含 JVM 参数与 java 系统参数 命令: jinfo pid 2 jstat 查看堆内存使用情况及 GC 回收频率等: jstat [-命令选项] [vmid] [间隔时间(毫秒)] [查询次数] 2.1 jstat -gc pid 最常用,可…

多区域平台lazada,虾皮电商商品详情API接口返回值说明

Lazada和虾皮(Shopee)都是知名的电商平台,主要在东南亚地区运营。以下是关于它们的一些信息: Lazada(来赞达): Lazada成立于2012年,起初是一个全球性的电子商务平台,后来…

如何使用Mac终端给树莓派pico构建C/C++程序进行开发,以及遇到各种问题该怎么处理,不使用任何IDE或编辑器(例如VS Code)

写本文的原因是官方的教程已经过时了,如果你现在按照官方教程来在 Mac 上进行配置,那么会遇到一堆问题,比如我几乎把能踩的“雷”都踩了。所以这里记录了完整过程,以及各种错误的原因和处理方法,不然以后换 Mac 了或者…

CH-87——矿井水除氟的技术汇总

矿井水除氟的要求一般是处理后水中的含氟量≤1.0mg/L。氟化物含量高的原水往往呈偏碱性,pH值常大于7.5。利用阴离子交换树脂上的可交换阴离子,去交换水中的氟离子,达到除氟目的。氟离子的选择交换性较大,树脂上的SO42-、Cl-等阴离…

回收站删除的文件怎么恢复?文件恢复方法就看这3个!

回收站是什么呢?一般来说,在我们使用电脑时,如果在电脑上进行删除操作,被删除的文件会被系统自动放入回收站中。这实际上也是在给电脑用户一个思考的时间,如果是误操作,可以通过回收站对文件进行还原&#…

在矩池云安装使用 PaddleHub 和 PaddlePaddle

在安装 PaddleHub 导入的时候我们常常会遇到各种错误,不是这个包没这个模块,就是哪个包没这个属性,每次遇到都会很头痛,网上也没有 PaddleHub 和 PaddlePaddle 对应的版本,只能自己慢慢尝试,通过不断查错误…

Nacos Server 安装

Nacos Server 安装 版本说明 查看方式 进入Spring Cloud Alibaba wiki查看版本对应关系,下载相应的版本。 组件版本关系 Spring Cloud Alibaba VersionSentinel VersionNacos VersionRocketMQ VersionDubbo VersionSeata Version2.2.6.RELEASE1.8.11.4.24.4.02…

论文讲解——TPU-MLIR: A Compiler For TPU Using MLIR

论文讲解——TPU-MLIR: A Compiler For TPU Using MLIR https://arxiv.org/pdf/2210.15016.pdf概览模型转换TranslationCanonicalizeLoweringLayerGroup BufferizationCalibration QuantizationCorrectness Check相关资料 https://arxiv.org/pdf/2210.15016.pdf 本文将对TPU…

Canal+Kafka实现Mysql数据同步

Canal介绍 canal [kənl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据。 canal是应阿里巴巴存在杭…

什么是NVME

1. 概念 NVM Express(NVMe),或称非易失性内存主机控制器接口规范(Non-Volatile Memory express),,是一个逻辑设备接口规范。他是与AHCI类似的、基于设备逻辑接口的总线传输协议规范(相当于通讯协议中的应用层&#xf…

全开源跨境电商一键铺货货源平台--后台数据采集功能

数据库设计在设计数据库时,需要考虑到以下信息: 货源信息:包括货源标题、价格、描述、图片等信息。 用户信息:包括用户名、密码、邮箱、电话等信息。 订单信息:包括订单号、用户信息、货源信息、支付信息等。 支付信息…

磁盘的管理

一、磁盘的分区 查看磁盘 lsblk fdisk -l 2、分区 没有e扩展,则都是主分区,已经有三个主分区了,剩下的全设置为扩展 查看分区结果: 二、格式化 三、挂载

Nginx1.24源码安装与部署

环境依赖包 zlib zlib-devel pcre pcre-devel 下载nginx安装包 1、下载nginx [rootnode01 ~]# wget http://nginx.org/download/nginx-1.24.0.tar.gz --2023-07-18 16:49:00-- http://nginx.org/download/nginx-1.24.0.tar.gz Resolving nginx.org (nginx.org)... 3.125.19…

Games101学习笔记1

2023-08-10开始接触图形学 Lecture 01--Overview of Computer Graphics Lecture 02 Review of Linear Algebra

UBIFS文件系统

https://blog.csdn.net/shichaog/article/details/45932339 引言 什么是UBIFS文件系统 UBIFS是UBI file system的简称,用于裸的flash设备,作为jffs2的后继文件系统之一。UBIFS通过UBI子系统处理与MTD设备之间动作。UBIFS文件系统更适合MLCNAND FLASH。…