IAR目标代码4字节对齐

向工程添加文件

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.mzph.cn/news/30103.shtml

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

相关文章

分布式 - 消息队列Kafka:Kafka生产者发送消息的分区策略

文章目录 1. PartitionInfo 分区源码2. Partitioner 分区器接口源码3. 自定义分区策略4. 轮询策略 RoundRobinPartitioner5. 黏性分区策略 UniformStickyPartitioner6. hash分区策略7. 默认分区策略 DefaultPartitioner 分区的作用就是提供负载均衡的能力,或者说对数…

ArcGIS Pro实践技术应用暨基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合、案例应用

GIS是利用电子计算机及其外部设备,采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲,它是在一定的地域内,将地理空间信息和 一些与该地域地理信息相关的属性信息结合起来,达到对地理和属性信息的综合管理。GIS的…

数字化时代,如何做好用户体验与应用性能管理

引言 随着数字化时代的到来,各个行业的应用系统从传统私有化部署逐渐转向公有云、行业云、微服务,这种变迁给运维部门和应用部门均带来了较大的挑战。基于当前企业 IT 运维均为多部门负责,且使用多种运维工具,因此,当…

hacksudo3 通关详解

环境配置 一开始桥接错网卡了 搞了半天 改回来就行了 信息收集 漏洞发现 扫个目录 大概看了一眼没什么有用的信息 然后对着login.php跑了一下弱口令 sqlmap 都没跑出来 那么利用点应该不在这 考虑到之前有过dirsearch字典太小扫不到东西的经历 换个gobuster扫一下 先看看g…

Android界面设计与用户体验

Android界面设计与用户体验 1. 引言 在如今竞争激烈的移动应用市场,提供优秀的用户体验成为了应用开发的关键要素。无论应用功能多么强大,如果用户界面设计不合理,用户体验不佳,很可能会导致用户流失。因此,在Androi…

Flink源码之JobManager启动流程

从启动命令flink-daemon.sh中可以看出StandaloneSession入口类为org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint, 从该类的main方法会进入ClusterEntrypoint::runCluster中, 该方法中会创建出主要服务和组件。 StandaloneSessionClusterEntrypoint:…

博客项目(Spring Boot)

1.需求分析 注册功能(添加用户操纵)登录功能(查询操作)我的文章列表页(查询我的文章|文章修改|文章详情|文章删除)博客编辑页(添加文章操作)所有人博客列表(带分页功能)…

FPGA外部触发信号毛刺产生及滤波

1、背景 最近在某个项目中,遇到输入给FPGA管脚的外部触发信号因为有毛刺产生,导致FPGA接收到的外部触发信号数量多于实际值。比如:用某个信号源产生1000个外部触发信号(上升沿触发方式)给到FPGA输入IO,实际…

冠达管理:股票注册制通俗理解?

目前我国A股商场正在进行股票注册制变革,相较之前的发行准则,股票注册制在理念上更为商场化,这意味着公司发行股票的门槛将下降,公司数量将添加,而股票流通的方式也将有所改变。那么股票注册制指的是什么,它…

使用vscode远程登录以及本地使用的配置(插件推荐)

1、远程登陆ssh 1.1打开vscode插件商店,安装remote-ssh插件 远程ssh添加第三方插件:vscode下链接远程服务器安装插件失败、速度慢等解决方法_vscode远程安装不上扩展_Emphatic的博客-CSDN博客 转到定义,选中代码->鼠标右键->转到定义…

2023/08/05【网络课程总结】

1. 查看git拉取记录 git reflog --dateiso|grep pull2. TCP/IP和OSI七层参考模型 3. DNS域名解析 4. 预检请求OPTIONS 5. 渲染进程的回流(reflow)和重绘(repaint) 6. V8解析JavaScript 7. CDN负载均衡的简单理解 8. 重学Ajax 重学Ajax满神 9. 对于XML的理解 大白话叙述XML是…

JavaScript中的几种常用循环方式对比

JavaScript中的几种循环方式 1. for 循环1.1 使用方式1.2 不支持遍历对象(但不会报错) 2. for-of 循环2.1 使用方式2.2 for-of 和 for 循环比较(不允许修改原数组元素)2.2.1 相同点2.2.1.2 都可以遍历数组,但不允许遍历…

灰度非线性变换之c++实现(qt + 不调包)

本章介绍灰度非线性变换,具体内容包括:对数变换、幂次变换、指数变换。他们的共同特点是使用非线性变换关系式进行图像变换。 1.灰度对数变换 变换公式:y a log(1x) / b,其中,a控制曲线的垂直移量;b为正…

快速解决IDEA中类的图标变成J,不是C的情况

有时候导入新的项目后,会出现如下情况,类的图标变成J,如图: 直接上解决方法: 找到项目的pom.xml,右键,在靠近最下方的位置找到Add as Maven Project,点击即可。 此时,一般类的图标就…

Wlan——射频和天线基础知识

目录 射频的介绍 射频和Wifi 射频的相关基础概念 射频的传输 信号功率的单位 射频信号传输行为 天线的介绍 天线的分类 天线的基本原理 天线的参数 射频的介绍 射频和Wifi 什么是射频 从射频发射器产生一个变化的电流(交流电),通过…

【信号生成器】从 Excel 数据文件创建 Simulink 信号生成器块研究(Simulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Linux 文件基本属性

Linux 文件基本属性 Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。 为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。 在 Linux 中我…

【项目学习1】如何将java对象转化为XML字符串

如何将java对象转化为XML字符串 将java对象转化为XML字符串,可以使用Java的XML操作库JAXB,具体操作步骤如下: 主要分为以下几步: 1、创建JAXBContext对象,用于映射Java类和XML。 JAXBContext jaxbContext JAXBConte…

8.10CPI决战日来临,黄金会意外走高吗?

近期有哪些消息面影响黄金走势?黄金多空该如何研判? ​黄金消息面解析:周四(8月10日)亚市早盘,美元指数在102.50维持多头走势,黄金避险情绪消散,金价跌至1916美元,下破1900美元前景深化。周三黄…

分布式 - 服务器Nginx:一小时入门系列之静态网页配置

文章目录 1. 静态文件配置2. nginx listen 命令解析3. nginx server_name 命令解析4. nginx server 端口重复5. nginx location 命令 1. 静态文件配置 在 /home 文件下配置一个静态的AdminLTE后台管理系统: [rootnginx-dev conf.d]# cd /home [rootnginx-dev home…