单片机启动流程

news/2025/3/23 12:05:19/

存储器

​ 一个单片机中存在rom和ram,Soc也有rom和ram(ddrx),部分Soc还包含MMU(Memory Manage Unit 内存管理单元)— (用于系统内存管理,比如说虚拟内存空间,内存区间的分页分块)。其rom和ram的设计需要根据所采用的芯片架构来定。不同的芯片架构具有不同的内存映射,而且如果芯片架构中支持IMU那么内存映射也变得更加复杂。依最简单的情况来分析,Cortex-M3和Cortex-M4 代码和数据共用一块内存,且不支持MMU的情况。查询Cortex-M4架构手册,可得:

image-20231103201402866

​ 可见其内存映射情况,不同的芯片架构有不同的内存映射。但实际制作芯片的厂商制作出来的芯片,还要根据需求来设计实际的ram和rom以及外设等等内存。比如STM32F4ZGT6 虽然是Cortex-M4架构但是其Ram只有256k,Rom只有1024k。而不是如其架构所示的512Mb,或者说同为Cortex-M4架构的STM32中F4系列的芯片,不同型号也有不同大小的RAM和ROM。

​ 那么RAM和ROM在实际编程中是用来干什么的呢?在编写C/C++程序时,将程序分为了不同的段比如keil中的MDK-ARM编译器将程序分为四个部分code,ro-date,rw-date,zi-data等等。而不同的段又分别存储于RAM和ROM之中。具体情况如下所示:

image-20231103213913633

​ 值得注意的是堆栈段中的变量是随着程序运行不断变化的,所以堆栈段在刚刚编译出来是没有已使用的大小的,所以需要事先定义一个最大的堆栈空间,通常在启动文件中指定其大小。

image-20231103195626627


http://www.ppmy.cn/news/1218408.html

相关文章

Python【奇偶数组】

要求: 给定一个非负整数数组A,将该数组中的所有偶数都放在奇数元素之前 代码如下: def sort_array_by_parity(arr):i 0for j in range(len(arr)):if arr[j] % 2 0: # 判断是否为偶数arr[i], arr[j] arr[j], arr[i] # 交换偶数和奇数的…

使用Badboy录制生成 JMeter 脚本

JMeter是一款在国外非常流行和受欢迎的开源性能测试工具,像LoadRunner 一样,它也提供了一个利用本地Proxy Server(代理服务器)来录制生成测试脚本的功能,但是这个功能并不好用。所以在本文中介绍一个更为常用的方法——…

并发线程的三大特性-原子性

1.1 什么是并发编程的原子性 JMM(Java Memory Model)。不同的硬件和不同的操作系统在内存上的操作有一定差异的。Java为了解决相同代码在不同操作 系统上出现的各种问题,用JMM屏蔽掉各种硬件和操作系统带来的差异。 让Java的并发编程可以做到…

首发!动手学大模型应用开发教程来了

大模型正逐步成为信息世界的新革命力量,其通过强大的自然语言理解、自然语言生成能力,为开发者提供了新的、更强大的应用开发选择。随着国内外井喷式的大模型 API 服务开放,如何基于大模型 API 快速、便捷地开发具备更强能力、集成大模型的应…

Linux:系统调用 和 Strace

1. 写在前面 本文主要介绍:Linux 下系统调用和 strace 工具概述; 公众号: 滑翔的纸飞机 2. 系统调用 和 Strace 当 Linux 上运行的应用程序/进程要使用 Linux 内核管理的资源时,如读取文件、创建进程等。应用程序进程向 Linux 内…

【NodeJS】Nodejs安装及环境配置

下载安装包 网址:https://nodejs.org/en 安装程序 1.下载完成后,双击安装包,进行安装,一路默认配置 nxet 即可,安装路劲给默认在C盘,或者选择其他位置,当前教程默认C盘 2.下图根据本身的…

dubbo服务超时导致的异常

今天服务器启动项目时,页面刷新报错: 查看日志时报错信息为: 解决: 在对应服务的配置文件中配置dubbo超时时间: 随后问题得到解决,特此记录

【C#学习】保存对话框 saveDialog

private void Export(int type) {System.Windows.Forms.SaveFileDialog sfd new SaveFileDialog();sfd.FilterIndex type;sfd.Filter "Excel文件(*.xlsx)|*.xlsx|STK文件(*.plc,*.plc3)|*.plc";if (sfd.ShowDialog() DialogResult.OK){//FilterIndex represent w…