单片机的存储、堆栈与程序执行方式

一、单片机存储区域

如图所示位STM32F103ZET6的参数:
单片机的ROM(内部FLASH):512KB,用来存放程序代码的空间。
单片机的RAM:64KB,一般都被分配为堆、栈、变量等的空间。
在这里插入图片描述

二、堆和栈的概念

单片机中的堆和栈是用来存储程序运行时的数据的两个重要区域。堆和栈都存在于单片机的RAM(随机存储器)中。
堆是用来存储动态分配的内存空间的区域。在单片机中,堆的大小取决于程序的需求,但是总大小不能超过单片机硬件的实际RAM大小。堆的分配和释放是由程序员手动控制的,通常使用malloc()和free()等函数来进行操作。
栈是用来存储函数调用和局部变量的区域。每当一个函数被调用时,函数的参数、返回地址和局部变量等信息都会被压入栈中。当函数执行完毕后,这些信息会被弹出栈。栈的大小是由编译器在编译时确定的,通常是根据函数的嵌套深度和局部变量的大小来决定的。
堆和栈都是用来存储程序运行时的数据的区域,但是它们的分配和使用方式有所不同。

三、堆和栈的位置与分配方式

堆栈位置

在这里插入图片描述
栈:向低地址扩展,从上往下扩展;
堆:向高地址扩展,从下网上扩展;
设置堆栈的空间大小时要根据程序需求合理调整,如果堆或栈的空间分配不足,导致堆栈溢出,程序跑飞。

合理分配堆栈

可以通过编译后生成的后缀为.htm的文件查看所需的栈的大小:
在这里插入图片描述

如图所示为某程序的.htm文件的内容:
最大的栈空间=800bytes+未知
未知的空间去800的20%就足够了。
那么栈空间的大小可以设置为800+160=960byte

堆的分配和释放是由程序员手动控制的,通常使用malloc()和free()等函数来进行操作。栈空间的大小根据我们在程序中分配的最大的堆的大小来决定。当然,最好也预留一些预留,如果在程序中分配了100byte,那么,可以设置堆大小为110bytes。

四、案例分析

打开KEIL工程中的Map File文件后,在文件内容最下方可以看到如下统计。

在这里插入图片描述
图中,各代号含义如下,
Code:代码存储区。这部分是存放代码的。
RO-Data:只读数据区。这部分保存程序中用 const 定义的全局常量数据和字符串。
RW-Data:已初始化的读写数据。程序中定义的已经初始化的全局变量和静态变量。
ZI-Data:未初始化的读写数据。程序中定义的未初始化的全局变量和静态变量。这部分内容是在程序运行的时候保存在RAM中的。
在这里插入图片描述

五、STM32堆栈设置

在这里插入图片描述

六、PC指针与SR指针

SP(Stack Pointer,堆栈指针寄存器)
堆栈是一个用于存储临时数据和函数调用信息的数据结构。SP 指向堆栈的当前顶部,当数据被推入或弹出堆栈时,SP 会相应地递减或递增。

PC(Program Counter,程序计数器)
概念:程序计数器通常有32位或64位,能表示232或264个内存地址,程序计数器某一时刻只能存储一个地址,该地址指向下一条将要执行的指令。
功能:是控制指令执行流程的关键,确保指令按照正确的顺序执行。

单片机程序执行过程:
1、首先开辟堆栈:初始化堆栈指针 SP
2、初始化程序计数器指针:初始化 PC 指针
3、从FLASH启动,执行程序:
单片机上电复位后实际上是执行了

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

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

相关文章

Linux shell编程学习笔记38:history命令

目录 0 前言 1 history命令的功能、格式和退出状态1.1 history命令的功能1.2 history命令的格式1.3退出状态2 命令应用实例2.1 history:显示命令历史列表2.2 history -a:将当前会话的命令行历史追加到历史文件~/.bash_history中2.3 history -c&#xf…

Leetcode 2983. Palindrome Rearrangement Queries

Leetcode 2983. Palindrome Rearrangement Queries 1. 解题思路2. 代码实现 题目链接:2983. Palindrome Rearrangement Queries 1. 解题思路 这道题看了一下,截至我写的时候,只有103个大佬给出了这个题目的解答,而且这次的竞赛…

Go语言中的HTTP重定向

大家好,我是你们可爱的编程小助手,今天我们要一起探讨如何使用Go语言实现HTTP重定向,让我们开始吧! 大家都知道,网站开发中有时候需要将用户的请求从一个URL导向到另一个URL。比如说,你可能想将旧的URL结构…

Redis 数据结构和常用命令

* 代表多个,?代表一个 (不用全部敲出来,按住tab可以自动补全) -2是无效,-1是永久有效 ;贴心小提示:内存非常宝贵,对于一些数据,我们应当给他一些过期时间&a…

attempted relative import beyond top-level package

attempted relative import beyond top-level package 这个错误通常发生在 Python 中尝试使用超出顶层包范围的相对导入时。Python 的相对导入是基于模块之间的相对位置进行的,因此,如果相对导入超出了顶层包的范围,就会报这个错误。 解决方法…

计算机组成原理-总线概述

文章目录 总线简图总线的物理实现总览总线定义总线的特性总线的分类按数据格式分类串行总线并行总线 按总线功能分类注意系统总线的进一步分类 总线的结构单总线的机构双总线的结构三总线的结构四总线的结构 小结 总线简图 总线的物理实现 如果该为数据总线,那么当…

Hive详解、配置、数据结构、Hive CLI

一、Hive 认识 1. Hive 应用 问题:公司的经营状况? 主题一:财务现金流指标1.1:净现金流入/流出量指标1.2:现金转换周期预算执行状况指标2.1:预算内成本控制指标2.2:预算与实际支出的差异 主题…

图文证明 泰勒公式展开

泰勒公式 泰勒公式简单来说就是,可以用一个N次多项式来表示出一个连续可导的函数 f(x) 是一个用函数在某点的信息描述其附近取值的公式 第一步 思考 这是一个sin(x)的图像 用函数在原点的信息描述其附近取值 用一阶导数贴合: 直接用切线来贴合就好 画一个点(0,sin(0)除的切…

MySQL使用问题记录

在使用MybatisPlus做一个记录的查询,出现一个奇怪的错误,异常信息如下: line 1:136 mismatched input source expecting {!, ~, , -, ., (, {, ?, , TRUNCATE, POSITION, VIEW, VALUES, CASE, CAST, TRIM, SUBSTRING, LEFT, RIGHT, IF, NOT…

Nginx和OpenResty面试题及简单示例

简要解释Nginx的工作原理 Nginx的工作原理: Nginx采用事件驱动和异步非阻塞的架构。它通过一个主进程和多个工作进程处理客户端请求。当有新的请求到达时,主进程接受并分发请求给空闲的工作进程进行处理。Nginx使用高效的I/O多路复用机制,可…

[NISACTF 2022]babyupload

[NISACTF 2022]babyupload wp 信息搜集 进入页面: 尝试文件上传,但是各种后缀名我都试过了,过不去。 在源码中发现提示,存在 ./source 路径: 访问该路径得到源码: from flask import Flask, request, r…

《深入理解C++11:C++11新特性解析与应用》笔记六

第六章 提高性能及操作硬件的能力 6.1 常量表达式 6.1.1 运行时常量性与编译时常量性 大多数情况下,const描述的是运行时常量性,也即是运行时数据的不可更改性。但有时候我们需要的却是编译时的常量性,这是const关键字无法保证的。例如&am…

精品Nodejs实现的在线菜谱食谱美食学习系统的设计与实现

《[含文档PPT源码等]精品Nodejs实现的在线菜谱学习系统的设计与实现[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: 操作系统:Windows 10、Windows 7、Windows…

day5--java基础编程:异常,内部类

6 异常 6.1 异常概述 出现背景: 在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式&#xff0c…

逆变器在光伏发电系统中的作用是什么?安装时应注意哪些事项?

在光伏发电系统中,逆变器是一个至关重要的组件,主要作用是什么? 1.是将直流电转换为交流电的关键:太阳能电池板所产生的电能是直流电,逆变器可将直流电转换为交流电,是的太阳能电池板所产生的电能可以被家…

技术博客官网也是一个不错的学习平台(第411篇)

技术博客官网也是一个不错的学习平台(第411篇) 今天的主题是OSPF 大纲 技术成就梦想51CTO-中国知名的数字化人才学习平台和技术社区 OSPF 概念型问题_wx655f0abb3511b的技术博客_51CTO博客 OSPF协议介绍及配置 - airoot - 博客园 (cnblogs.com) 一、OSPF概述 回顾一下距离矢…

图片处理软件,批量缩放图片尺寸

无论是社交媒体上的分享,还是工作中的图片素材,往往大小不一、形状不同,这时如何批量高效地对这些图片进行缩放就显得尤为重要。传统的图片处理软件,不仅操作复杂,而且处理速度慢,更无法实现批量化处理。但…

《Spring Cloud学习笔记:微服务保护Sentinel + JMeter快速入门》

Review 解决了服务拆分之后的服务治理问题:Nacos解决了服务治理问题OpenFeign解决了服务之间的远程调用问题网关与前端进行交互,基于网关的过滤器解决了登录校验的问题 流量控制:避免因为突发流量而导致的服务宕机。 隔离和降级&#xff1a…

【LeetCode:17. 电话号码的字母组合 | 递归 + 回溯 + 组合】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

计算机网络【DNS】

DNS 基本概述 与 HTTP、FTP 和 SMTP 一样,DNS 协议也是应用层的协议,DNS 使用客户-服务器模式运行在通信的端系统之间,在通信的端系统之间通过下面的端到端运输协议来传送 DNS 报文。但是 DNS 不是一个直接和用户打交道的应用。DNS 是为因特…