STM32启动及内存模型
一般MCU包含的存储空间有FLASH和RAM,(RAM和flash又有片上和片外的区别,片上表示mcu自带的,已经封装在MCU内部的,片外表示外挂的,当项目中需要做一些复杂的应用,会存在资源不足的情况,这时候就需要使用外挂flash或者外挂ram),RAM相当于内存,Flash相当于硬盘,编译器会将一个程序分为好几个部分,分别存储在不同的区域,一般分为以下几个部分:
1 code:代码段,存放程序的代码部分。 . text
2 RO-data:只读数据段,存放程序中定义的常量。 .text
3 RW-data:读写数据段,存放初始化为非零的变量。 .data
4 ZI段:0 数据段,存放未初始化的变量和初始化为零的变量 .bss
因此,一个程序编译出来所占的Flash空间大小为
flash size = code + RO-data + RW-data
ram size = RW-data + ZI
如果用keil编译出来的程序文件会生成一个.map 文件,该文件说明了各个函数占用的空间大小和地址,要想优化程序的存储空间大小,可根据这个文件来逐个优化。这也是在MCU开发中一个重要的信息,直接看这个文件就能知道哪里占用了空间,占了多大的空间。
一般的MCU启动方式有三种,根据boot0引脚和boot1引脚的接法不同来区别,但是一般都会默认从FLASH启动,启动后将RW-data搬运到RAM中运行,但是不会搬运RO段,同时,cpu会根据编译器给出的ZI段的大小分配出ZI段,并将这块RAM区域清零。如下图:
这样就完成了MCU的启动,了解了这个,对于自己在开发过程中一些资源占用相关的内容会有更深的了解。
STM32启动及内存模型相关推荐
- flink启动命令参数_Flink调优之前,必须先看懂的TaskManager内存模型
Task Manager内存模型 Flink的程序运行在内存中.不管是我们在学习C语言.Java语言的时候,我们都很想知道程序到底是如何管理内存的.Flink程序也一样,当我们写完Flink程序,我们 ...
- java中实现具有传递性吗_Java中volatile关键字详解,jvm内存模型,原子性、可见性、有序性...
一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...
- 从底层吃透java内存模型(JMM)、volatile、CAS
前言 随着计算机的飞速发展,cpu从单核到四核,八核.在2020年中国网民数预计将达到11亿人.这些数据都意味着,作为一名java程序员,必须要掌握多线程开发,谈及多线程,绕不开的是对JMM(Java ...
- java并发编程实战:第十六章----Java内存模型
一.什么是内存模型,为什么要使用它 如果缺少同步,那么将会有许多因素使得线程无法立即甚至永远看到一个线程的操作结果 编译器把变量保存在本地寄存器而不是内存中 编译器中生成的指令顺序,可以与源代码中的顺 ...
- java线程的优先级是数字越大优先级越高_《深入理解Java虚拟机》5分钟速成:12章(Java内存模型与线程)...
第12章 Java内存模型与线程 前言: 1.物理机如何处理并发问题? 2.什么是Java内存模型? 3.原子性.可见性.有序性的具体含义和应用实现? 4.volatile 关键字特性? 5.基于vo ...
- Java内存模型与线程
一.一致性 高速缓存的存储交互很好的解决了处理器与内存的速度矛盾,但也存在缓存一致性(cache coherence)问题 二.java内存模型 内存模型:对特定的内存或高速缓存进行读写访问的过程抽象 ...
- Java8内存模型—永久代(PermGen)和元空间(Metaspace)
一.JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 1.虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建.栈里面存着的是一种叫&q ...
- Redis为什么这么快?一文深入了解Redis内存模型!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 " Redis 是目前最火爆的内存数据库之一,通过在内存 ...
- Java之内存模型的基础、重排序、顺序一致性、volatile、锁、final
为什么80%的码农都做不了架构师?>>> 深入理解Java内存模型(一)--基础 深入理解Java内存模型(二)--重排序 深入理解Java内存模型(三)--顺序一致性 深入理 ...
最新文章
- openwrt 系统日志配置_Openwrt 之 Samba配置
- [译] 制定良好的路线图:产品负责人的六个实施步骤
- Oracle中常用的命令,随着学习进度总结
- poj 2115 C Looooops(扩展欧几里德算法)
- java二叉树插入节点_[javaSE] 数据结构(二叉查找树-插入节点)
- html action不起作用,Html.ActionLink做为按钮或图像,而不是连接
- 利用梯度下降法求解一元线性回归和多元线性回归
- jfinal项目部署服务器,jfinal undertow项目再集成JDK,一键安装系统服务,让部署再快一点...
- java api 第一个类是_JAVA之Object常用API
- mysql 主从 启动顺序_MySQL生产环境下的主从复制启动项
- your system apperars to have shutdown uncleanly
- Confluence 6 恢复一个空间
- 【Android】OKHTTP使用
- 一个简单的PHP留言板
- Linux图形终端与字符终端
- 计算机中常用单位是什么意思,常用单位的换算(含温度、长度、计算机单位、面积以及数量级含义).doc...
- Excel 生成均匀分布、正态分布随机数
- 企业服务器搭建与维护论文,《企业服务器搭建的研究论文》-毕业论文设计(可用).doc...
- 005:列表、循环、分支练习题
- 穷人思维和富人思维的根本区别在于底层系统不一样