一. STM32程序构成

  1.1. STM32的存储空间

    1.1.1. RAM

      1.1.1.1 单片机的RAM是SRAM.

      1.1.1.2. SRAM特点

        a.优点,速度快,不必配合内存刷新电路,可提高整体的工作效率,软件上不需要初始化SRAM。
                     b. 缺点,集成度低,功耗较大,相同的容量体积较大,而且价格较高,少量用于关键性系统以提高效率。
        c. SRAM使用的系统:
          (1)CPU与主存之间的高速缓存。
          (2)CPU内部的L1/L2或外部的L2高速缓存。
          (3)CPU外部扩充用的COAST高速缓存。

          (4)单片机内存单元

    1.1.2. FLASH

      1.1.2.1. 单片机的flash是NorFlash

      1.1.2.1. NorFlash 特点

        a. NOR可以直接使用,并可在上面直接运行代码。不需要初始化

        b. NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节

    1.1.3. NOR FLASH 和 NAND FLASH对比

      

      a.NOR与NAND特性的差别,主要是由于其内部“地址/数据线”是否分开导致的。由于 NOR的地址线和数据线分开,它可以按“字节”读写数据,符合 CPU 的指令译码执行要求,所以假如 NOR上存储了代码指令, CPU 给 NOR一个地址, NOR 就能向CPU 返回一个数据让 CPU 执行,中间不需要额外的处理操作。

      b.由于 NAND 的数据和地址线共用,只能按“块”来读写数据,假如 NAND 上存储了代码指令, CPU 给 NAND 地址后,它无法直接返回该地址的数据,所以不符合指令译码要求。 即不支持立即执行的特性(eXecute In Place),若代码存储在NAND上,可以先把它加载到RAM存储器上,再由CPU执行。  

  1.2. 空间排布

    1.2.1. keil编译信息分析

      1.2.1.1. code: 表示程序代码部分

      1.2.1.2. RO-data: 表示程序中定义的常量(如:const ,字符串)

      1.2.1.3. RW-data: 表示已初始化的全局变量

      1.2.1.4. ZI-data: 表示未初始化或初始化为0的全局变量

      1.2.1.5. 大小计算

        a. RO Size = Code + RO Data     (程序占用FLASH空间)

        b. RW Size = RW Data + ZI Data  (运行时程序占用RAM空间)

        c. ROM Size = Code + RO Data + RW Data (烧录时程序占用FLASH 空间的大小,bin文件)

          PS: 为什么bin文件不包含ZI Data

            答:因为ZI 数据都是0,只要程序运行前将ZI数据所在的区域(RAM区域)一律清零即可,如此节省了flash储存空间

二. 程序是否需要加载到RAM中?

  2.1. 单片机是否需要?

    2.1.1. 把程序从flash加载到RAM需要bootloader,(其实程序也可以直接下载到RAM中运行,只不过重启程序就没有了。在flash刷新次数受限(一般flash可以刷新1000次左右)直接烧录程序到RAM调试程序。

    2.1.2. 单片机RAM较小程序太多无法加载全部程序

    2.1.3. 单片机执行分三个步骤:取指令,分析指令,执行指令。取指令任务是根据PC值从地址总线上读出指令。虽然从RAM取指令速度远大于ROM,但单片机自身运行速度不高,并不影响速度

     2.1.4. 总结:虽然单片机可以把程序加载到RAM, 但真的真的没必要这么干。

  2.2. 运行Linux系统为什么需要?

    2.2.1. linux程序比较大,很少用norflash储存程序,而是用nandFlash或sd储存,故这类储存 不符合CPU 的指令译码执行要求。

    2.2.2. 运行linux系统的cpu。其运行频率非常高,远大于ROM读写速度,从rom取指会严重影响速度。故系统会把程序拷贝到RAM执行。

    2.2.3. 总结:运行Linux系统时程序必须加载到RAM

      

    

为何单片机程序不用加载到RAM的更多相关文章

  1. [转] Linux下程序的加载、运行和终止流程

    TAG: linux, main, _start DATE: 2013-08-08 原文地址: http://blog.csdn.net/tigerscorpio/article/details/62 ...

  2. 动态符号链接的细节 与 linux程序的加载过程

    转: http://hi.baidu.com/clivestudio/item/4341015363058d3d32e0a952 值得玩味的一篇分析程序链接.装载.动态链接细节的好文档 导读: by ...

  3. 支付宝小程序室内地图导航开发-支付宝小程序JS加载esmap地图

    如果是微信小程序开发,请参考微信小程序室内地图导航开发-微信小程序JS加载esmap地图文章 一.在支付宝小程序里显示室内三维地图 需要满足的两个条件 调用ESMap室内地图需要用到小程序web-vi ...

  4. 使 IIS 6.0 可以在 64 位 Windows 上运行 32 位应用程序 试图加载格式不正确的程序。

    原文 使 IIS 6.0 可以在 64 位 Windows 上运行 32 位应用程序 试图加载格式不正确的程序. win7 64位操作系统上边运行IIS网站应用的时候,提示错误"试图加载格式 ...

  5. java程序的加载过程

    昨天笔试阿里有个求java程序加载过程的题目很是复杂,回来研究了好久才有点明白,整理一下.原题代码如下,判断输出: public class StaticTest { public static in ...

  6. 微信小程序分包加载实战

    "离线包"机制 微信小程序采用的是类似离线包加载方案,以转转小程序为例,当用户第一次打开时会先下载好所有代码,然后再加载页面:当用户再次进入转转小程序时,会直接使用已下载的代码,省 ...

  7. 微信小程序 - 分包加载

    小程序开发大家都知道,对主包的大小进行了限制,从最初的1M变成了现再的2M,一般情况下是够用了:但是偶尔可能会出现超出2M的可能,我们可以对小程序进行分包加载. 1.小程序分包加载 a. 某些情况下, ...

  8. 「小程序JAVA实战」 小程序默认加载的页面和生命周期(八)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-08/ 小程序如何加载的呢?生命周期!源码:https://github.com/limingios ...

  9. IOS 应用程序启动加载过程(从点击图标到界面显示)

    今天帮同事解决问题的时候发现,程序BUG是由加载过程引起的.所以当局部代码没有问题,但是程序一运行却总不是我们想要结果的时候,我们应该想想是不是因为我们忽略了试图加载过程的原因.下面我们用一个例子来简 ...

随机推荐

  1. chrome浏览器调试js,结果Sources里面找不到js文件解决办法

        页面出现问题,就debug,这是前端开发工程师最常见的做法,但是有时候,我们打开开发者工具,在sources查找js文件,却发现怎么也找不到,无法设置断点.但是文件在network选项卡里确实 ...

  2. 小样本学习Few-shot learning

    One-shot learning Zero-shot learning Multi-shot learning Sparse Fine-grained Fine-tune 背景:CVPR 2018收 ...

  3. 如何隐藏scroll-Y纵向滚动条,并不影响内容滚动的方法

    网上搜了很多关于隐藏滚动条的文章,发现很多都是只说了如何隐藏scroll-X横向滚动条,对scroll-Y纵向滚动条并没有明确的述说.本文章将介绍3种隐藏滚动条的方法,大家可以结合实际情况,参考文章内 ...

  4. Promethus

    https://blog.csdn.net/zl1zl2zl3/article/details/74332437

  5. [论文理解] LFFD: A Light and Fast Face Detector for Edge Devices

    LFFD: A Light and Fast Face Detector for Edge Devices 摘要 从微信推文中得知此人脸识别算法可以在跑2K图片90fps,仔细一看是在RTX2070下 ...

  6. Django学习之Cookie和Session

    一.Cookie 1.Cookie的由来 2.什么是Cookie 3.Cookie的原理 4.查看Cookie 二.Django中操作Cookie 1.获取Cookie 2.设置Cookie 3.删除 ...

  7. SpEL 实例

    SpEl 实例 基于 Spring 解析 @RestController @RequestMapping("/spel") @Slf4j public class SpELCont ...

  8. Putty - 免用户名密码登录

    打开 Putty 时携带 -pw your_password your_username@your_host 参数即可.

  9. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第3节 maven标准目录结构和常用命令_07maven常用命令

    以给的hellowordl的的代码为例. src/main/java下,这是主业务逻辑代码 里面的内容只有一个jsp的跳转 测试包下: 里面很简单的就输出了一句话 复制项目的目录 先cd进入复制的这个 ...

  10. 测开之路一百三十九:会话管理之cookie写入、读取、和更新

    机制:服务器端发送的小段文本信息存储在客户端硬盘 功能:记录用户偏好,请求.页面.站点间共享信息 特点:易丢失.安全隐患 添加cookie,需要用到make_respons.set_cookie @a ...