登录/注册

stm32程序分别存放

更多

STM32 程序的代码和数据在芯片存储器中的存放位置主要分为 Flash(闪存)RAM(内存) 两部分。以下是具体分布和运行机制:


一、Flash(闪存)

用于存储 程序代码只读数据,断电后数据不丢失。

  1. 代码段(.text)

    • 存放编译后的机器指令(如 main() 函数、中断服务程序等)。
    • 通常从 Flash 的起始地址(0x08000000)开始存储。
  2. 只读数据段(.rodata)

    • 存放全局常量(如 const 修饰的变量)、字符串常量等。
  3. 中断向量表(Vector Table)

    • 位于 Flash 起始位置(0x08000000),存储中断服务函数的入口地址。
    • 芯片上电后首先读取此表,初始化程序执行流程。
  4. 初始化数据段(.data 的初始值)

    • 全局变量或静态变量的初始值会预先存储在 Flash 中,程序启动时再拷贝到 RAM。

二、RAM(内存)

用于存储 运行时数据,断电后数据丢失。

  1. 已初始化数据段(.data)

    • 全局变量或静态变量的初始值从 Flash 拷贝到 RAM,程序运行时直接使用 RAM 中的值。
  2. 未初始化数据段(.bss)

    • 未初始化的全局变量或静态变量,程序启动时会自动清零(由启动代码完成)。
  3. 堆(Heap)

    • 用于动态内存分配(如 malloc()),由程序员管理。
  4. 栈(Stack)

    • 用于存储局部变量、函数调用时的上下文(如返回地址、参数等)。
    • 通常从 RAM 的末尾向低地址增长。

三、启动流程

  1. 上电后,CPU 从 Flash 的中断向量表获取复位向量,跳转到启动代码。
  2. 启动代码将 .data 段的初始值从 Flash 拷贝到 RAM,并清零 .bss 段。
  3. 初始化堆栈指针,跳转到 main() 函数开始执行用户代码。

四、关键点总结

存储位置 存放内容 生命周期
Flash 代码、中断向量表、常量 断电保留
RAM 变量、堆、栈 断电丢失

五、示例链接脚本(GCC)

MEMORY
{
  FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K
  RAM (rwx)  : ORIGIN = 0x20000000, LENGTH = 20K
}

SECTIONS
{
  .text : { *(.text*) } > FLASH    /* 代码段 */
  .rodata : { *(.rodata*) } > FLASH /* 只读数据 */
  .data : { *(.data*) } > RAM AT > FLASH  /* 初始值在Flash,运行时在RAM */
  .bss : { *(.bss*) } > RAM        /* 未初始化数据 */
}

通过合理配置链接脚本,可以控制程序各部分在存储器中的存放位置,确保正常运行。

线缆怎么存放更好

线缆存放的正确性对于线缆的保护和安全使用具有至关重要的影响。以下是线缆存放正确的重要性: 防止物理损伤:线缆在存放过程中可能会受到挤压、摩擦、撞

2023-11-14 11:16:06

gd32和stm32程序可以互用吗?

gd32和stm32程序可以互用吗? GD32和STM32是两种不同的芯片系列,相同点是都属于ARM Cortex-M系列芯片。虽然它们有相似的

2023-08-16 11:32:41

论线缆存放正确的重要性

线电缆产品种类众多,应用范围十分广泛,如果存放不当会影响线缆的寿命及使用安全,甚至造成不必要的灾害,论线缆存放正确的重要性看看以下clan通讯小编的整理吧。

2022-12-20 10:20:21

通过串口烧写STM32程序的教程方法

如何通过串口烧写STM32程序的教程方法! 用交叉串口线连接开发板和电脑, BOOT0 选择为 1,BOOT1 选择为 0,接上开发板电源,SW1 切换到 ON 打开电源开关。 从开始

资料下载 ah此生不换 2022-03-22 15:39:36

STM32 外部中断实验参考程序

STM32 外部中断实验程序,供STM32初学者参考。

资料下载 郑兵 2021-12-30 10:46:50

基于STM32上的5个ADC程序

基于STM32上的5个ADC程序(单兵电源技术需求)-基于STM32上的5个ADC程序

资料下载 王利祥 2021-09-27 12:37:41

STM32的ADC驱动程序

STM32的ADC驱动程序(电源技术被踢出核心)-  STM32的ADC驱动程序

资料下载 刘满贵 2021-09-23 13:43:22

基于STM32f103的FFT频率测试程序下载

基于STM32f103的FFT频率测试程序下载

资料下载 shyshyshy 2021-08-02 10:07:20

STM32开发板下载程序的两种方式分别是什么

STM32开发板下载程序的两种方式分别是什么?STM32开发板下载

2022-01-18 07:34:24

程序到底是存放在内存中吗

程序的存放地点——内存文章目录程序的存放地点——内存1、内存1.1

2022-01-12 08:05:03

stm32用什么软件写程序

stm32用什么软件写程序?STM32单片机在编程时可以使用库函数和使用配置寄存器的方式来进行

2021-09-21 16:00:00

使用QSPI FLASH来存放程序代码

使用QSPI FLASH来存放程序代码,可以把程序的部分或者整个程序都

2021-08-12 07:19:09

STM32程序无法进入main函数的解决方法

很多人在基于STM32单片机项目开发过程中,会遇到STM32程序无法进入main的现象,在这篇文将分享

2021-07-22 16:18:35

程序计数器的作用_程序计数器pc中存放的是什么

程序计数器是用于存放下一条指令所在单元的地址的地方。当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为

2020-12-01 16:06:18

STM32工作的自举程序 你了解多少?

STM32自举程序,你了解多少?

2020-03-03 11:07:34

7天热门专题 换一换
相关标签