STM32与i.MX6ULL内存与存储机制全解析:从微控制器到应用处理器的设计差异

最近做FreeRTos,以及前面设计的RVOS,这种RTOS级别的系统内存上的分布与CortexA系列里面的分布有相当大的区别,给我搞糊涂了。

目录

  1. STM32(Cortex-M系列)的内存与存储机制

    • Flash存储内容
    • RAM存储内容
    • 启动与运行时流程
    • 示例代码解析
  2. i.MX6ULL(Cortex-A系列)的内存与存储机制

    • 物理内存布局
    • 程序存储与加载流程
    • 多级启动过程
    • 裸机程序处理
  3. STM32与i.MX6ULL的关键差异对比

    • 架构设计差异
    • 存储与启动流程对比
    • 内存管理机制
  4. 总结与适用场景


1. STM32(Cortex-M系列)的内存与存储机制

Flash存储内容

  • 程序代码:所有编译后的机器指令。
  • 常量数据const修饰的全局变量、字符串常量。
  • 初始化数据:全局/静态变量的初始值(运行时复制到RAM)。

RAM存储内容

  • 堆栈(Stack):局部变量、函数调用上下文。
  • 堆(Heap):动态分配的内存(malloc/new)。
  • 全局/静态变量:运行时实际存储位置(含.data.bss段)。

启动与运行时流程

  1. 上电启动

    • CPU从Flash固定地址(0x08000000)读取复位向量,执行启动代码(Reset_Handler)。
    • 启动代码将.data段(初始化数据)从Flash复制到RAM,并清零.bss段。
  2. 指令执行

    • CPU通过指令总线直接从Flash读取指令。
    • 通过ART加速器或预取队列优化访问延迟。

示例代码

const int FLASH_CONST = 100;    // 存储在Flash
int ram_var = 42;               // 初始值在Flash,运行时在RAMvoid main() {int stack_var;              // 栈中分配(RAM)static int static_var;      // .bss段(RAM)
}

2. i.MX6ULL(Cortex-A系列)的内存与存储机制

物理内存布局(以1GB DDR为例)

地址范围用途
0x80000000 ~ ...Linux内核空间
0x90000000 ~ ...用户空间(应用程序、堆栈)
保留区域GPU/VPU内存、DMA缓冲区

程序存储与加载流程

  • 存储介质:eMMC、SD卡、NAND Flash等。
  • 多级启动过程
    1. Boot ROM:固化在芯片内部,加载第一级引导程序(如U-Boot)到片内OCRAM。
    2. Bootloader(U-Boot)
      • 初始化硬件(DDR、外设)。
      • 从存储设备加载内核镜像(zImage)、设备树(.dtb)、根文件系统到DDR。
    3. Linux内核:解压并初始化MMU、进程管理等,挂载根文件系统。
    4. 用户程序:从文件系统加载到DDR用户空间执行。

裸机程序处理

  • 链接脚本示例
    MEMORY {RAM (rwx) : ORIGIN = 0x80000000, LENGTH = 512M
    }
    SECTIONS {.text : { *(.text) } > RAM   /* 代码段 */.data : { *(.data) } > RAM   /* 初始化数据 */.bss : { *(.bss) } > RAM     /* 未初始化数据 */
    }
    

3. STM32与i.MX6ULL的关键差异对比

特性STM32(Cortex-M)i.MX6ULL(Cortex-A)
核心定位实时控制(微控制器)复杂应用(应用处理器)
指令执行位置直接在Flash中执行必须加载到RAM执行
内存管理无MMU,直接访问物理地址支持MMU和虚拟内存
启动流程单阶段启动(Flash → 运行)多阶段启动(Boot ROM → U-Boot → Kernel)
典型存储介质片内FlasheMMC、SD卡、NAND Flash
典型应用场景实时控制、传感器处理嵌入式Linux、GUI应用、多媒体处理

4. 总结与适用场景

STM32的适用场景

  • 实时性要求高(如电机控制、工业自动化)。
  • 资源受限(小内存、低功耗)。
  • 无需复杂操作系统支持。

i.MX6ULL的适用场景

  • 需要运行Linux/Android等操作系统。
  • 处理多媒体、网络通信等复杂任务。
  • 外设接口丰富(如GPU、摄像头接口)。

设计哲学差异

  • STM32:简单直接,强调实时性和确定性。
  • i.MX6ULL:通过多级抽象(MMU、虚拟内存)支持复杂应用,牺牲部分实时性换取灵活性。

相关技术点扩展

  • STM32启动文件(startup.s)详解
  • i.MX6ULL U-Boot移植实战
  • ARM Cortex-M与Cortex-A架构对比

关注作者,获取更多嵌入式开发干货!


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/78123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Eteam 0.3版本开发规划

Eteam 0.1系列经历了3个小版本,主要完成了团队资料库功能。 Eteam 0.2系列经历了22个小版本,主要完成了白板和AI交互的能力。 目前的问题 目前白板上的数据有两个来源,团队资料库和外部数据。外部数据和团队资料库数据边界不是很清晰。 0.3版…

HTML5好看的水果蔬菜在线商城网站源码系列模板5

文章目录 1.设计来源1.1 主界面1.2 关于我们1.3 商品服务1.4 果蔬展示1.5 联系我们1.6 商品具体信息1.7 登录注册 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址&#…

深入理解Java包装类:自动装箱拆箱与缓存池机制

深入理解Java包装类:自动装箱拆箱与缓存池机制 对象包装器 Java中的数据类型可以分为两类:基本类型和引用类型。作为一门面向对象编程语言, 一切皆对象是Java语言的设计理念之一。但基本类型不是对象,无法直接参与面向对象操作&…

uniapp自定义拖拽排列

uniapp自定义拖拽排列并改变下标 <!-- 页面模板 --> <template><view class"container"><view v-for"(item, index) in list" :key"item.id" class"drag-item" :style"{transform: translate(${activeInde…

基于SpringBoot的课程管理系统

前言 今天给大家分享一个基于SpringBoot的课程管理系统。 1 系统介绍 课程管理系统是一种专门为学校设计的软件系统&#xff0c;旨在帮助学校高效地管理和组织各类课程信息。 该系统通常包括学生、教师和管理员三大角色。 他们可以通过系统进行选课、查看课程表、考试、进…

max31865典型电路

PT100读取有很多种方案&#xff0c;常用的惠斯通电桥&#xff0c;和专用IC max31865 。 电阻温度检测器(RTD)是一种阻值随温度变化的电阻。铂是最常见、精度最高的测温金属丝材料。铂RTD称为PT-RTD&#xff0c;镍、铜和其它金属亦可用来制造RTD。RTD具有较宽的测温范围&#x…

飞算 JavaAI 与 Spring Boot:如何实现微服务开发效率翻倍?

微服务架构凭借其高内聚、低耦合的特性&#xff0c;成为企业构建复杂应用系统的首选方案。然而&#xff0c;传统微服务开发流程中&#xff0c;从服务拆分、接口设计到代码编写、调试部署&#xff0c;往往需要耗费大量时间与人力成本。Spring Boot 作为 Java 领域最受欢迎的微服…

(2)Docker 常用命令

文章目录 Docker 服务器Docker 镜像Docker 容器本地 RegistryRUN vs CMD vs ENTRYPOINTRUNCMDENTRYPOINT 限制容器对内存、CPU 和 IO 资源的使用内存CPUBlock IO设置权重bps 和 iops cgroup 和 namespacecgroupnamespacMount namespaceUTS namespaceIPC namespacePID namespace…

Django 实现电影推荐系统:从搭建到功能完善(附源码)

前言&#xff1a;本文将详细介绍如何使用 Django 构建一个电影推荐系统&#xff0c;涵盖项目的搭建、数据库设计、视图函数编写、模板渲染以及用户认证等多个方面。&#x1f517;软件安装、环境准备 ❤ 【作者主页—&#x1f4da;阅读更多优质文章、获取更多优质源码】 目录 一…

C#进阶学习(七)常见的泛型数据结构类(2)HashSet和SortedSet

目录 using System.Collections.Generic; // 核心命名空间 一、 HashSet 核心特性 常用方法 属性 二、SortedSet 核心特性 1、整型&#xff08;int、long 等&#xff09; 2、字符串型&#xff08;string&#xff09; 3、字符型&#xff08;char&#xff09; 4、自定义…

SQL之DML(查询语句:select、where)

&#x1f3af; 本文专栏&#xff1a;MySQL深入浅出 &#x1f680; 作者主页&#xff1a;小度爱学习 select查询语句 在开发中&#xff0c;查询语句是使用最多&#xff0c;也是CRUD中&#xff0c;复杂度最高的sql语句。 查询的语法结构 select *|字段1 [, 字段2 ……] from 表…

vue | 不同 vue 版本对复杂泛型的支持情况 · vue3.2 VS vue3.5

省流总结&#xff1a;defineProps 的泛型能力&#xff0c;来直接推导第三方组件的 props 类型 引入第三方库的类型&#xff0c;并直接在 <script setup> 中作为 props 使用。这种类型一般是复杂泛型&#xff08;包含联合类型、可选属性、交叉类型、条件类型等&#xff0…

Unity-无限滚动列表实现Timer时间管理实现

今天我们来做一个UI里经常做的东西&#xff1a;无限滚动列表。 首先我们得写清楚实现的基本思路&#xff1a; 所谓的无限滚动当然不是真的无限滚动&#xff0c;我们只要把离开列表的框再丢到列表的后面就行&#xff0c;核心理念和对象池是类似的。 我们来一点一点实现&#x…

Docker的基本概念和一些运用场景

Docker 是一种开源的容器化平台&#xff0c;可以帮助开发人员更加高效地打包、发布和运行应用程序。以下是 Docker 的基本概念和优势&#xff1a; 基本概念&#xff1a; 容器&#xff1a;Docker 使用容器来打包应用程序及其依赖项&#xff0c;容器是一个独立且可移植的运行环境…

Unity中基于第三方插件扩展的对于文件流处理的工具脚本

在Unity的项目中对应文件处理,在很多地方用到,常见的功能,就是保存文件,加载文件,判断文件或者文件夹是否存在,删除文件等。 在之前已经写过通过C#的IO实现的这些功能,可查看《Unity C# 使用IO流对文件的常用操作》,但是不能保证所有平台都可以使用 现在基于第三方跨…

Flink介绍——实时计算核心论文之MillWheel论文详解

引入 通过前面的文章&#xff0c;我们从S4到Storm&#xff0c;再到Storm结合Kafka成为当时的实时处理最佳实践&#xff1a; S4论文详解S4论文总结Storm论文详解Storm论文总结Kafka论文详解Kafka论文总结 然而KafkaStorm的第一代流式数据处理组合&#xff0c;还面临的三个核心…

python异步协程async调用过程图解

1.背景&#xff1a; 项目中有用到协程&#xff0c;但是对于协程&#xff0c;线程&#xff0c;进程的区别还不是特别了解&#xff0c;所以用图示的方式画了出来&#xff0c;用于理清三者的概念。 2.概念理解&#xff1a; 2.1协程&#xff0c;线程&#xff0c;进程包含关系 一…

【React】获取元素距离页面顶部的距离

文章目录 代码实现 代码实现 import { useEffect, useRef, useState } from react;const DynamicPositionTracker () > {const [distance, setDistance] useState(0);const divRef useRef(null);useEffect(() > {const targetDiv divRef.current;if (!targetDiv) re…

26.OpenCV形态学操作

OpenCV形态学操作 形态学操作&#xff08;Morphological Operations&#xff09;源自二值图像处理&#xff0c;主要用于分析和处理图像中的结构元素&#xff0c;对图像进行去噪、提取边缘、分割等预处理步骤。OpenCV库中提供了丰富的形态学函数&#xff0c;常见的包括&#xf…

逻辑回归:损失和正则化技术的深入研究

逻辑回归&#xff1a;损失和正则化技术的深入研究 引言 逻辑回归是一种广泛应用于分类问题的统计模型&#xff0c;尤其在机器学习领域中占据着重要的地位。尽管其名称中包含"回归"&#xff0c;但逻辑回归本质上是一种分类算法。它的核心思想是在线性回归的基础上添…