STM32堆栈方面知识点

这篇具有很好参考价值的文章主要介绍了STM32堆栈方面知识点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近弄json,发现经常的堆溢出,然后找问题。因为对STM32堆栈问题没有深刻认识,就花时间好好研究下了堆栈并且做了验证

1.栈地址区间确定

首先找到启动文件,我的启动文件在startup_stm32f40xx.s,一般的启动文件也都在startup_stm32fxxxx.s文件里

stm32堆栈,c语言,单片机,stm32

__initial_sp      这个参数是栈顶地址,因为栈的增长是向下增长,所以这个参数我们可以理解为栈的起始地址,我设置的栈尺寸是0x400,所以栈的地址范围是 __initial_sp  ~ (__initial_sp  - 0x400),__initial_sp 这个参数是keil编译代码之后计算出来的,有多种方法确定。

2.确定__initial_sp数值

(1)方法:1:编译代码,编译完成之后,在代码所在文件夹里找到一个.map的文件,放入keil

stm32堆栈,c语言,单片机,stm32

(2)方法2:Debug执行代码,然后查看0x08000000这个地址的数据,前四个字节就是

stm32堆栈,c语言,单片机,stm32

 (3)方法3:直接根据RW-data + ZI-data

stm32堆栈,c语言,单片机,stm32

因为SRAM的基地址是0x20000000,所以上面的地址应该加上基址,也就跟上面吻合了

2.栈的功能

(1)函数中的局部变量是保存在栈里的,确认方法如下

stm32堆栈,c语言,单片机,stm32

stm32堆栈,c语言,单片机,stm32

 

地址为 0x200007a8  在 0x200007b0  ~  0x200003B0范围里,所以在栈里。

3.堆相关

(1)网上有网友说,全局变量、静态变量是放在堆里的,这个是错误的。堆的知识点,回头有时间我再研究一下。

(2)函数名是存放在flash中的!

4.总结

(1)函数内部局部变量是放在栈里面的

(2)函数名是存放在flash中的

(3)如果运行freertos时,在任务里调用函数时,此时这个函数中内部的变量是存放在freertos分配的内存中,而不是栈里

(4)堆只有调用malloc时,分配的空间才在堆中

(5)实际使用过程中,函数局部变量占空空间大于栈分配空间时,会自动占用堆空间,而不会导致程序挂掉

(6)栈的起始点是栈顶,从顶部向下增长

(7)堆是从底部向上增长,堆栈是连接在一起的文章来源地址https://www.toymoban.com/news/detail-690230.html

到了这里,关于STM32堆栈方面知识点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 本文将从云原生的概念、背景知识、Kubernetes架构及核心组件、应用场景、案例研究等方面深入剖析云原生课程的相关知识点

    作者:禅与计算机程序设计艺术 2020年,技术快速发展,云计算火爆。云原生领域也随之蓬勃发展。云原生已经成为大势所趋,大量企业都在逐渐转型云原生应用架构。国内外云服务厂商也纷纷推出基于Kubernetes的服务平台,而Kubernetes又是云原生开源技术体系的一部分。为了帮

    2024年02月07日
    浏览(46)
  • 【STM32】基础知识 第一课 单片机简介

    单片机 (Single-Chip Microcomputer) 单品微型计算机, 是一种集成电路芯片. 电脑 vs 单片机: 电脑 单片机 CPU CPU 内存 SRAM 硬盘 Flash 主板 外设 SRAM 静态随机读取器 (Static Random-Access Memory): SRAM 是随机存储器的一种, 属于静态数据, 这类存储器要是维持电源, 里面存储的信息就可以恒常维持

    2024年02月11日
    浏览(55)
  • 蓝桥杯单片机知识点整合——临时抱佛脚

    目录 复习使用,代码根据网上资料修改,仅供参考 ds1302 原理图  手册 ds1302.c main.c onewire 原理图 手册 onewire.c main.c IIC PCF8591 原理图 手册 iic.c main.c AT2402 原理图 手册 main.c 串口UART uart.c main.c 发送数据 中断接收数据 超声波 ult.c main.c N555频率输出 main.c PWM控制LED ———————

    2023年04月24日
    浏览(46)
  • 单片机原理及接口技术期末复习知识点

    什么是单片机:单片机是由 CPU 、 存储器 、I/O接口及 总线 集成在一个芯片上。 简单了解AT89S51单片机简介。 相当于MCS-51系列中的87C51,AT89S51芯片内4KB的Flash存储取代了87C51片内的4K的EPROM。 MCS-51单片机具有几个并口,其中哪个口具有外部中断、串行通信等第二功能。 有4个并

    2024年02月01日
    浏览(35)
  • 单片机 STM32启动文件详解(汇编语言解析)

    以前讲了固件库,从ST官网下载的固件库里面,有许多的启动文件(汇编语言写的.s文件) 启动文件 说明 startup_stm32f10x_ld.s Low Density 小容量 startup_stm32f10x_md.s Medium Density 中容量 startup_stm32f10x_hd.s High Density 高容量 startup_stm32f10x_xl.s Extra Large Density 超大容量 startup_stm32f10x_cl.s Con

    2023年04月25日
    浏览(42)
  • AUTOSAR知识点 之 多核启动 (一):英飞凌单片机的多核启动详细解析

    目录 1、概述 2、英飞凌单片机多核启动步骤 2.1、第一步:链接文件定义入口BMI 2.2、第二步:定义入口ENTRY(symbol) 2.3、第三步:CSTART函数 2.3.

    2024年01月21日
    浏览(32)
  • stm32以及freertos 堆栈解析

    以前在mcu编程的时候没有太注意堆栈的情况,只知道需要将堆栈设置的大一点。现在逐步使用freertos,在freertos中也有关于堆栈的设置,freertos的堆栈和启动文件中的堆栈关系是什么?为了以后使用的无误,本次一次性把这些弄清楚。 堆栈是一个特定的存储区或者寄存器。一般

    2023年04月08日
    浏览(36)
  • STM32+FREERTOS任务堆栈大小

    在FREERTOS任务开发过程中,由于不知道具体需要分配多大的任务堆栈大小,就需要在开始开发阶段尽可能的多分配一些,不然在调试过程中会出现程序卡死或者数据通信异常的现象。 如何评估任务堆栈的分配大小问题,可以根据任务的规模以及所任务所需的数据空间大概进行

    2024年02月16日
    浏览(33)
  • C语言-单片机:STM32程序烧录的几种方法

    STM32微控制器提供了多种程序烧录(也称为编程或固件更新)方式,这些方法允许用户将编译后的程序代码(通常为HEX或BIN格式)下载到MCU的闪存中。以下是几种常见的STM32程序烧录方式: ST-LINK : ST-LINK/V2 : 这是最常用的官方开发工具之一,可以直接通过USB接口与PC连接。S

    2024年04月26日
    浏览(33)
  • C语言知识点汇总

    C语言知识点保姆级总结,这不得进你的收藏夹吃灰?! 拖了很久的C语言所学知识的简单小结,内容有点多,第一次总结也可能有错误或者不全面,欢迎随时补充说明! ​ 用不同数据类型所定义的变量所占空间大小不一样,定义的变量不是保存于数据类型中,而是因为只有

    2024年01月23日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包