最近在给公司的ADAS DCU做内存分配(Memory Allocation),在这儿记录一下相关知识点,也算是给中文社区做贡献了。

目录:

1. ECU启动流程

2. 存储空间解析

3. TC397单片机的Memory Map和一些备注

1. ECU启动流程

图总比文字直观:

如上图所示,上电以后其实就三步: "运行ROM的启动函数 -- 跳转到FLASH里的Startup函数 -- 跳转到我们熟悉的main函数" 。 所以FLASH里的Startup函数其实才是最先执行,且用户可以修改的函数。只是它一般都被封装好了,所以才没有接触到。

如果你想写BootLoader,就在Startup函数的基础上改就ok了。

2. 存储空间解析

以下将对上面那张图的PFLASH,DFLASH等名词进行解释:

重要且有用的:

2.1 掉电后数据不会消失的FLASH,EEPROM

PFLASH: Program Flash用来存程序,价格便宜,配的容量也大,我用的这款足有16M

DFLASH: Data Flash用来存用户数据,虽然叫Flash其实它是EEPROM,成本比FLASH高,我这款才1M多

FLASH 和EEPROM的最大区别是FLASH按扇区(section)擦写,用来存储程序这种大但不太频繁更改的data,成本低。EEPROM则按字节(Byte)擦写,存储用户数据这种小的,零碎的,总是在变的data时,擦写速度快。

2.2 掉电后数据会消失的RAM

RAM:速度快,甚至会比Flash快50%以上。由于RAM空间有限,单片机运行的时候,程序存储在flash,但数据会存储在RAM,即CPU从flash中取指令,从RAM中抓数据。

重要但没啥用的:【直接转到第三章如果你赶时间】

扩展阅读:

a: 当然你也可以可以通过#pragma CODE_SECTION等将程序先从Flash拷到RAM里面,再在RAM里面运行,来提升运行速度。详见Running an Application from Internal Flash Memory 第四章“Copying Sections from Flash to RAM” [1]

b: 冯诺依曼,哈佛结构: [2]

2.3 链接文件(Linker File)

总的来说linker file用来定义数据和代码具体存放在哪一块。比如它会规定存储在Flash的启动函数_START()的存储地址和BootROM里面reset vector内预设的地址匹配,这样复位以后就总会从启动函数_START()开始执行

  • 即reg.h 里面将寄存器的地址重命名,所以向寄存器写其实就等于向该地址赋值
  • 而link file里面则是将函数变量存在哪个地址做了规定

具体定义见下图:

这张图进一步解释了linker file在存储中的作用[3] :

3. TC397单片机的Memory Map和一些备注

先来一张从用户手册里拿来的单片机Memory Map:

可以看到:

1. 对这款6核ECU,core0到5都有自己的专属FLASH,大小为3M(core5是1M),读取它有专属的接口FPIn,速度快

2. 每个core内部都有16k的program cache和16k的data cache。 PSPR和DSPR稍大,看起来是2级缓存

3. 这6个core没有太大的区别,唯一就是core0和core1的DSPR(data scrachpad RAM)大一些。240KB,其他的core是96KB

4. 可以用的RAM还有LMU,DAM和4M的EMEM。但根据datasheet,DAM不支持ASIL B及以上的软件【becasue of hardware safety mechanism】

5. 对于第一条里提到的FLASH,对于同一块物理存储空间。它们可以在地址0x8000,0000通过总线进行cache access,也可以在地址0xA000,0000通过总线进行non-cache access, 这是比较有意思的

6. 因为是TC397 -ADAS,所以有额外的EMES,SPU,RIF,CIF以及扩展的HSM

Reference:

1. http://www.ti.com/lit/an/spra958l/spra958l.pdf

2. https://blog.csdn.net/jj163zhuangzi/article/details/47088843

3. http://downloads.ti.com/docs/esd/SLAU131U/introduction-to-sections-stdz0691509.html

4. http://m.elecfans.com/article/582174.html

单片机断电后静态存储区里面还有数据吗_单片机启动流程和存储架构详解相关推荐

  1. 单片机断电后不保存程序_51单片机运行过程

    51单片机的简要图示 注: 1.ROM:只读存储器,单片机的只读存储区大多用于存储程序固又称程序存储器. 51单片机是EPROM,所谓的EPROM是可擦除的只读存储器.可以把原来的程序擦除了,再写一个 ...

  2. 单片机断电后不保存程序_为什么单片机语音芯片既有flash又有EEPROM

    为什么单片机语音芯片既有flash又有EEPROM 单片机语音芯片运行时的数据存在于RAM (随机存储器)中,停电后无法保留RAM的数据时,如何在停电后不丢失数据呢?这需要使用EEPROM和FLASH ...

  3. 一位读者小姐姐的阿里Java后台面经分享,快被问哭了!(附部分问题详解)

    我是 Guide 哥,一 Java 后端开发,半个全栈,自由的少年. 这篇文章是一位 女读者 (加粗!太难得)的面试阿里的经历分享,虽然第二面面完就失败了,但是这样的经历对自己帮助还是很大的. 下面的 ...

  4. MySQL最常用数据引擎(InnoDB、MylSAM、MEMORY)详解及如何选择合适的存储引擎

    前言 存储引擎其实就是如何存储数据,如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数据是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型).在O ...

  5. 去中心化云存储技术 | CESS 的多层网络架构详解

    区块链以其特有的分布式算法和技术底层,让链上数据也随着区块链的不同实现了分布式存储,CESS(Cumulus Encrypted Storage System)去中心化云储存网络基础设施,让我们看到了 ...

  6. 单片机断电后不保存程序_法兰购买到货后直接入库保存?不不不,还需要做一件事情...

    法兰在管道工程中是较为常见的零件.在管道工程中,法兰主要用于管道的连接,在需要连接的管道,各安装一片法兰盘,低压管道可以使用丝接法兰,4公斤以上压力的使用焊合法兰:低压小直径有丝接法兰,高压和低压大直 ...

  7. 自由存储区和堆的区别_区块链发展阶段:IPFS和Filecoin赋能分布式存储

    2008 年,中本聪发布了一篇<比特币:一种点对点的电子现金系统>的论文,该文章详细阐述了基于点对点网络.加密.时间戳.共识机制等多种技术集成构建电子现金系统的实现理念,并由此打开了区块链 ...

  8. linux编写驱动后write已杀死_《Linux4.0设备驱动开发详解》笔记--第九章:Linux设备驱动中的异步通知与同步I/O...

    在设备驱动中使用异步通知可以使得对设备的访问可进行时,由驱动主动通知应用程序进行访问.因此,使用无阻塞I/O的应用程序无需轮询设备是否可访问,而阻塞访问也可以被类似"中断"的异步通 ...

  9. vmware虚拟机重装后本机没虚拟网卡解决方案及虚拟机的三种网络连接方式详解

    vmware虚拟机重装后本机没虚拟网卡解决方案: 卸载虚拟机时,就算删除了安装路径,在设备管理器中删除了网卡,在注册列表项中删除了vmware列表项,重装后一般还是会出现本机网络连接中没有没有虚拟机默 ...

最新文章

  1. android界面数据存储,Android应用开发基础之数据存储和界面展现(二)
  2. 实验一 OpenGL初识
  3. 影子卫士和影子系统哪个好用_影子系统是什么?会损害电脑硬盘吗?
  4. php怎么去除内容,php怎么把html标签去除?
  5. 排列组合算法之三: 递归法
  6. C语言和设计模式(外观模式)
  7. 物流系统开发中,Dev倥件的使用
  8. 快速学习 rollup 打包
  9. ESFramework Demo -- 简单的网络硬盘Demo
  10. Java学习——HashMap
  11. 台式机设成仅计算机,如何把台式电脑设置成wifi热点
  12. 测试吃鸡游戏帧数软件,帧数暴涨10%+ RX 560D开核“吃鸡”测试
  13. 天正电气lisp是什么文件_天正电气——那些隐蔽却好用的功能
  14. 数字孪生中的人工智能——技术现状、挑战和未来研究课题
  15. Chrome浏览器常用快捷键总结
  16. java 数组 eqlue_Java源码浅析,Character(3)
  17. win10安装xshell免费版
  18. 整理的子模块设置清单
  19. 电信机顶盒ty1208-z刷linux(armbian)
  20. 电商横幅BANNER素材PSD分层模板|多品类,都能借鉴!

热门文章

  1. 使用Jenkins部署.Net Core遇到的几个坑
  2. KubeCon+CloudNativeCon首秀中国!
  3. .NET Core开发日志——HttpClientFactory
  4. 64位的Mac OS X也有Windows.Forms了
  5. 了解 C# foreach 内部语句和使用 yield 实现的自定义迭代器
  6. 基于mysql数据库的应用_MySQL数据库应用
  7. python求非线性优化问题_用python优化非线性函数
  8. 【遥感数字图像处理】基础知识:第二章 遥感知识回顾、遥感数字图像处理基础知识
  9. C语言试题八十五之狼追兔子问题
  10. C语言之如何输出uint32_t和uint64_t和16进制