STM32/GD32_分散加载

2023-11-30 18:45
文章标签 加载 stm32 gd32 分散

本文主要是介绍STM32/GD32_分散加载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Q:如何将一个变量、某个源文件的函数在编译阶段就存储在用户指定的区域?

KEIL环境:.map后缀文件、.sct后缀文件

IAR环境:.map后缀文件、.icf后缀文件

【map文件】

对固件里面的变量、函数、常量等元素的存储空间进行分配的说明文件

下面看几个变量的不同状态在map的存储说明:

全局的

 》可以看到,全局变量是否占用数据空间取决于后续是否使用这个变量。

局部的

 

 

 》可以看到,对于局部变量,无论是否加static修饰,仅仅声明未被使用的变量不会占用数据空间

》被static修饰的局部变量且后续被使用才会占用空间,未被static修饰的局部变量就算后续被使用也不会占用数据空间

PS:keil对于未初始化的数组,元素个数<9时算RW-data,元素个数大于8的算ZI-data

 

程序最终生成的固件空间大小取决于code、RO(只读数据)、RW(可读写数据)

一个完整的程序由代码和数据组成;

1、只定义未使用的全局或局部变量不占用存储空间。

2、被static修饰为全生命周期的局部变量也要后续使用才会占用空间。

3、未进行初始化的数组变量被算做ZI-Data部分

【sct/icf文件】

设置RAM、FALSH存储空间的起始地址和偏移量

将函数或变量添加到用户自定义区域(配合__attribute__ 编译特性使用)

》Keil界面,默认分配状态

》IAR界面

【__attribute__ 】

__attribute__((__packed__))

__attribute__((at(addr)))

 

》可以看到,在指定的地址存储了用户需要提前存储的数据,加了packed关键字后存储空间明显缩小;对于结构体默认是以4字节对齐的方式调整

__attribute__((section("func_name")))

__attribute__((aligned(8))) 对齐方式

__attribute__((packed, aligned(8)))

这篇关于STM32/GD32_分散加载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/438130

相关文章

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C

springboot 加载本地jar到maven的实现方法

《springboot加载本地jar到maven的实现方法》如何在SpringBoot项目中加载本地jar到Maven本地仓库,使用Maven的install-file目标来实现,本文结合实例代码给... 在Spring Boothttp://www.chinasem.cn项目中,如果你想要加载一个本地的ja

最好用的WPF加载动画功能

《最好用的WPF加载动画功能》当开发应用程序时,提供良好的用户体验(UX)是至关重要的,加载动画作为一种有效的沟通工具,它不仅能告知用户系统正在工作,还能够通过视觉上的吸引力来增强整体用户体验,本文给... 目录前言需求分析高级用法综合案例总结最后前言当开发应用程序时,提供良好的用户体验(UX)是至关重要

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD