当前位置:网站首页 > 编程语言 > 正文

单片机程序一般存放在什么中(单片机程序一般存放在哪里)



STM32的程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个4GB的线性地址空间内, 地址范围为0x0000 0000至0xFFFF FFFF。其中FLASH为ROM类型,储存的数据掉电不易失;RAM中存储的数据掉电易失。以STM32F103系列为例,最多有512KB的FLASH空间以及最多64KB的RAM空间,另外还包含一个512字节的用于标准USB和CAN通信的SRAM。如下图所示:

FLASH主要是存放代码和只读数据的,细分图如下:

如上图所示,Flash又可以细分为文本段、只读数据段、数据复制段。其中文本段包含代码和代码中的常量部分,只读数据区通常存放程序中以const关键字修饰的数据,数据复制段存放的则是程序中初始化不为0的全局变量的数据,在每次单片机复位后要对这些变量重新赋值。

RAM主要用来存储数据,如下是STM32的RAM分区:

data段:存放初始化非0的全局变量;

bss段:存放未初始化或初始化为0的全局变量;

Heap(堆)段:由程序员通过malloc/free申请和释放;

Stack(栈)段:存放局部变量和函数的入口地址;

其中栈的方向是由栈顶自上而下的,堆的方向则是自下而上的,如果RAM空间有限而且一个程序中局部变量较多或申请的堆空间过大,便会造成堆和栈冲突,并造成系统崩溃(自己暂时写的程序较小,暂时没有遇到过类似问题)。

栈,也叫堆栈,是一种先进后出,插入和删除操作都在栈顶操作的线性表。栈的作用通常是保存函数返回地址及保存局部变量。每个函数在运行时都有自己的栈空间,局部变量越多,占空间占用越大,函数间调用越深,栈空间也越大。CPU将打断前的程序运行到的地址、寄存器的值保存到栈中,即保护现场;当打断执行完以后,又从栈中读取之前保存的值,即恢复现场。

如下是STM32启动文件(.s)中对栈和堆的定义,其中栈大小为0x400即1KB,堆大小为0x200即512Byte。

 
  

如图在keil中编写如下程序代码,验证各变量的存储位置:

到此这篇单片机程序一般存放在什么中(单片机程序一般存放在哪里)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就! 
  

                            

版权声明


相关文章:

  • 回环地址是什么(回环地址为多少)2025-09-02 14:09:04
  • 二级域名解析记录值(域名怎么解析二级域名)2025-09-02 14:09:04
  • 打印机共享失败11b(打印机共享失败0x0000011b)2025-09-02 14:09:04
  • 一级团团带你学 | 备考四六级作文指南请查收二级团团带你学 | 备考四六级作文指南请查收三级团团带你学 | 备考四六级作文指南请查收是什么意思英语(英文一级团团带你学 | 备考四六级作文指南请查收和二级团团带你学 | 备考四六级作文指南请查收)2025-09-02 14:09:04
  • nat类型检测地址(nat检测app)2025-09-02 14:09:04
  • dos2unix安装(dos安装iso)2025-09-02 14:09:04
  • 颜色代码编号叫什么名字(颜色代码编号叫什么名字来着)2025-09-02 14:09:04
  • 单播是什么意思主播(主播和单播啥意思)2025-09-02 14:09:04
  • 圈1到圈10符号(圈1到圈10符号复制)2025-09-02 14:09:04
  • 单播地址包括(单播地址包括哪三类)2025-09-02 14:09:04
  • 全屏图片