Keil MDK下如何设置非零初始化变量 及变量指定位置- Arm CompilerV5 和 V6区别

目录

  • 一、Arm CompilerV5
    • 1.定义变量时,使用编译器扩展属性__attribute__((section("name"), zero_init))来将变量放入指定段中。其中section("name")选择一个指定的段,zero_init告诉编译器将变量放入ZI段。
  • 二、Arm CompilerV6
    • 1.定义变量时,使用编译器扩展属性__attribute__((section("name")))来将变量放入指定段中。其中section("name")选择一个指定的段。
    • 2.在分散加载文件中,定义名为.bss.NO_INIT的段,其中前缀.bss是必须的,并且只能为小写。这个前缀表明该数据段具有ZI属性。注意该段所在的可执行域要具有UNINIT属性
  • 3. Arm® Compiler 6 如何将数据放入指定位置

一、Arm CompilerV5

1.定义变量时,使用编译器扩展属性__attribute__((section(“name”), zero_init))来将变量放入指定段中。其中section(“name”)选择一个指定的段,zero_init告诉编译器将变量放入ZI段。

uint32_t phy_link_init_flag __attribute__((section("NO_INIT"), zero_init));

在分散加载文件中,定义名为NO_INIT的段。注意该段所在的可执行域要具有UNINIT属性。

LR_IROM1 0x00000000 0x00080000  {    ; load region size_region 从0扇区开始ER_IROM1 0x00000000 0x00080000  {  ; load address = execution address *.o (RESET, +First)*(InRoot$$Sections).ANY (+RO)}RW_IRAM1 0x10000000 0x0000F000  {  ; RW data.ANY (+RW +ZI)}RW_IRAM2 0x1000F000 UNINIT 0x00001000  {.ANY (NO_INIT)}
}

二、Arm CompilerV6

1.定义变量时,使用编译器扩展属性__attribute__((section(“name”)))来将变量放入指定段中。其中section(“name”)选择一个指定的段。

uint32_t phy_link_init_flag __attribute__((section(".bss.NO_INIT")));

2.在分散加载文件中,定义名为.bss.NO_INIT的段,其中前缀.bss是必须的,并且只能为小写。这个前缀表明该数据段具有ZI属性。注意该段所在的可执行域要具有UNINIT属性

LR_IROM1 0x00000000 0x00080000  {    ; load region size_region 从0扇区开始ER_IROM1 0x00000000 0x00080000  {  ; load address = execution address *.o (RESET, +First)*(InRoot$$Sections).ANY (+RO)}RW_IRAM1 0x10000000 0x0000F000  {  ; RW data.ANY (+RW +ZI)}RW_IRAM2 0x1000F000 UNINIT 0x00001000  {.ANY (.bss.NO_INIT)}
}

3. Arm® Compiler 6 如何将数据放入指定位置

Arm® Compiler 5 支持at(address)扩展指令,但是在Arm® Compiler 6 中是不支持的,第3节给出了解决方案,使用__attribute__((section(“.ARM.__at_address”)))来代替at(address)扩展指令,本节描述如何实施。

定义变量,使用编译器扩展属性使用:

int my_peripheral __attribute__((section(".ARM.__at_0x10000000"))) = 0;

在分散加载文件中,定义名为.ARM.__at_0x10000000的段:

LR_1 0x040000          ; load region starts at 0x40000   
{                      ; start of execution region descriptions      ER_RO 0x040000     ; load address = execution address{*(+RO +RW)     ; all RO sections (must include section with initial entry point)}
}LR_2 0x01000000
{ER_ZI +0 UNINIT{*(.bss)}
}LR_3 0x10000000
{ER_PERIPHERAL 0x10000000 UNINIT{*(.ARM.__at_0x10000000)}
}

参考链接:添加链接描述

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

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

相关文章

Mybatis-plus自定义分页工具

Mybatis-plus自定义分页工具 这里主要是介绍通过MyBatis-Plus使用自定义分页工具进行条件分页查询示例等,方便以后查阅!!! 分页工具类-PageUtils PageUtils package com.wl.cloud.core.utils;import com.baomidou.mybatisplus.cor…

Jmeter接口测试:使用教程(下)

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快 上一篇我给大家讲了jmeter的基本介绍跟参数化和jmeter脚…

【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现

前言 上文说到,Spring Security它是一个强大的和高度可定制的身份验证和访问控制框架。它提供了一套丰富的功能,用于保护基于Spring的应用程序。 上文又说到,在Spring Security中,过滤器(Filter)是一个重…

png静图转换gif动图如何操作?轻松一键快速转换gif动图

想要把多张Png格式图片转换成gif格式动图时要怎么操作?图片常见的有静图和动图,而jpg、png、gif等是最常见的图片格式。想要把png格式图片转换成gif动画还不想下载任何软件的时候就可以使用gif制作工具。不需要下载软件在线就能操作。能够轻轻松松就能快…

北斗卫星系统在海上测量中的创新应用

北斗卫星系统在海上测量中的创新应用 随着全球导航卫星系统技术的飞速发展,北斗卫星系统作为中国自主研发的全球卫星导航系统,在海上测量和导航领域展现出了无可比拟的优势和广阔的应用前景。 一、北斗卫星系统概述 北斗卫星系统是由中国自主研发的全球…

PostgreSQL开发与实战(8.3)锁的维护

作者:太阳 1 锁相关参数 deadlock_timeout(integer):默认1s,表示pg数据库仅对锁超时大于1s的情况进行死锁检测。 log_lock_waits : 默认关闭,若打开该参数则表示会将锁超时超过deadlock_timeout的信息记…

理解 HuggingFace 是什么

HuggingFace 是一个开源社区和公司,专注于提供自然语言处理(NLP)的工具和资源。它的主要特点包括: Transformers 库:HuggingFace 提供了一个名为 Transformers 的 Python 库,该库包含了大量的预训练模型和…

git远程仓库拉取超过1G报错解决办法

第一种 如果浅克隆最近一次提交不会超过1G那就浅克隆 //浅层clone代码 depth 1只会拉取最后一次log, depth(后面数字越大拉取的历史记录越多) 1.git clone --depth 1 远程地址 //拉取完整当前分支 2.git fetch --unshallow利用远程分支名称拉取 git branch -a git…

Unity WebGL 2020 Release-Notes

🌈WebGL 2020 Release-Notes 版本更新内容2020.3.48WebGL: Any recent desktop version of Firefox, Chrome, Edge or Safari.2020.3.47WebGL: Any recent desktop version of Firefox, Chrome, Edge or Safari.2020.3.46WebGL: Any recent desktop version of Fire…

idea中打印日志不会乱码,但是部署到外部tomcat中乱码了。

问题:如图Tomcat乱码,而且启动时的系统日志不会乱码,webapp中的打印日志才乱码。 idea中的情况如下:正常中文展示。 问题分析:网上分析的原因是Tomcat配置的字符集和web应用的字符集不匹配,网上集中的解决…

idea 打开文件一直loading

背景 用idea打开项目,发现项目目录一直在loading,怎么等也出不来,在网上查说是IDEA的索引出现问题或者是代码库文件过大造成的。 解决方法 在IDEA中,依次点击「File」->「Invalidate Caches/Restart」,然后勾选弹…

Unity类银河恶魔城学习记录12-11 P133 Merge Skill Tree with Parry skill源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Parry_Skill.cs using UnityEngine; using UnityEngine.UI;public class P…

MySQL进阶 ==> 引擎选择优化指南

数据库引擎的选择: InnoDB InnoDB存储引擎是Mysql的默认存储引擎。InnoDB存储引擎提供了具有提交、回滚、崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引。 存储方…

大模型应用实践闭门研讨会即将召开|爱分析活动

随着人工智能领域大模型技术的快速发展,政府出具很多指导性意见,在最新的《2024年政府工作报告》中,明确提出了开展“人工智能”行动,显示出政府对AI大模型发展的高度重视和支持。金融行业在AI大模型领域的政策支持和工作进展都呈…

力扣---LCR 095.最长公共子序列

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以…

AMD vs Intel处理器对比:性能、功耗、价格全方位分析

AMD处理器型号通常由一系列字母、数字和符号组成,这些元素共同构成了一个完整、具有特定含义的标识符。下面跟随道合顺一起来理解这些标识符背后的含义。 解读AMD处理器标识符 品牌系列标识 AMD处理器型号的开头通常会包含品牌系列标识,如“Ryzen”、“T…

管理能力学习笔记五:识别团队角色,因才施用

识别团队角色,因才施用,需要做到以下三点 扬长避短 管理者要学会问自己员工能把什么做好,而不是想方设法改造他们的短处 。 – 彼得德鲁克 人岗匹配 将合适的人放在合适的位置 人才多样化 团队需要各式各样的人才,才能高效配合…

Matlab之空间坐标系绘制平面图形

在空间直角坐标系中,绘制指定平面方程的图形 版本说明: 20240413_V1.01:更正代码错误,并修改输入参数类型(测试用例得修改) 20240413_V1.00:初始版本 一、平面方程 基本形式为:A…

读取pcd文件并在rviz中进行显示

参考&#xff1a;pcd文件在rviz中显示 功能包创建 cd Downloads/ROS mkdir -p pcdreadshow_ws/src cd src catkin_init_workspace catkin_create_pkg read_pcd pcl_conversions pcl_ros roscpp sensor_msgs读取点云文件并发布 #include<ros/ros.h> #include<pcl/po…

postgresql数据库pg_dirtyread插件闪回技术 —— 筑梦之路

闪回查询&#xff08;Flashback Query&#xff09;是一种在数据库中执行时间点查询的技术。它允许查询数据库中过去某个时间点的数据状态&#xff0c;并返回相应的查询结果。通常闪回查询分为表级以及行级的闪回查询。PostgreSQL数据库由于MVCC的机制&#xff0c;对于DML的操作…