STM32中不同类型所存放区域大全

STM32微控制器中,不同类型的变量根据其生命周期和作用域存放在不同的内存区域。

1. 全局变量(Global Variables)

  • 存放区域.data.bss
  • 详细说明
    • 初始化的全局变量存放在**.data段**,即程序在启动时被初始化的数据段。这些变量在程序加载时由启动代码将初始值从Flash(ROM)复制到SRAM(RAM)。
    • 未初始化的全局变量存放在**.bss段**。在程序启动时,这个段会被初始化为零。
    • 全局变量的生命周期从程序启动到程序结束,作用域通常为整个程序。

2. 静态变量(Static Variables)

  • 存放区域.data.bss
  • 详细说明
    • 和全局变量类似,初始化的静态变量存放在**.data段**,未初始化的静态变量存放在**.bss段**。
    • 静态变量的生命周期从定义开始直到程序结束,即它们在第一次初始化后保持其值。
    • 静态局部变量(函数内部定义的静态变量)只在定义它们的函数或代码块中可见,但它们的值在多次函数调用之间保持不变。

3. 局部变量(Local Variables)

  • 存放区域栈(Stack)
  • 详细说明
    • 局部变量是函数内定义的变量,它们在函数调用时分配内存,并在函数返回时释放内存。
    • 这些变量存放在中。栈的大小通常由程序的启动文件或操作系统决定,并且会根据函数调用的深度动态增长和缩小。
    • 局部变量的生命周期仅限于函数执行期间,函数返回后这些变量的存储空间会被释放。

4. 动态分配的变量(Dynamic Variables)

  • 存放区域堆(Heap)
  • 详细说明
    • 动态分配的变量使用C库函数如malloc()calloc()realloc()进行分配,并使用free()函数释放。
    • 这些变量存放在中,堆空间是从SRAM中分配的,大小由链接器配置文件(通常在启动文件中配置)或运行时配置。
    • 动态分配的变量的生命周期由程序控制,可以在函数间共享,直到显式释放它们。

5. 常量(Constants)

  • 存放区域Flash(ROM).rodata
  • 详细说明
    • 常量(const修饰的变量或字符串常量等)通常存放在Flash的**.rodata段**(只读数据段)。
    • 常量数据在程序运行期间不会被修改,通常存储在非易失性存储器中以节省SRAM。

6. 中断向量表

  • 存放区域Flash(ROM)ISR向量表
  • 详细说明
    • 中断向量表通常存储在Flash的固定地址中,系统启动后会被装载到相应的寄存器中。
    • 在STM32中,中断向量表的位置通常在启动文件中配置,并且保存在Flash的某个固定区域。

7. 寄存器变量(Register Variables)

  • 存放区域CPU寄存器
  • 详细说明
    • 寄存器变量由register关键字声明,提示编译器将这些变量尽可能存储在CPU寄存器中以提高访问速度。
    • 这些变量不一定实际存储在寄存器中,具体取决于编译器的优化策略和寄存器的可用性。

内存布局总结

  • Flash(ROM)
    • 存储程序代码(.text段)、常量(.rodata段)、中断向量表等。
  • SRAM(RAM)
    • .data:存放已初始化的全局变量和静态变量。
    • .bss:存放未初始化的全局变量和静态变量。
    • 栈(Stack):存放局部变量、函数参数、返回地址等。
    • 堆(Heap):用于动态内存分配。
  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值