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

275df0c5c580a305f954bb58c84addd9.png

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

目录:

1. ECU启动流程

2. 存储空间解析

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

1. ECU启动流程

图总比文字直观:

ab2913d071cfa97e978dee198be6faab.png

如上图所示,上电以后其实就三步: "运行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]

03656a716bef7873512aff6787a92794.png


2.3 链接文件(Linker File)

总的来说linker file用来定义数据和代码具体存放在哪一块。比如它会规定存储在Flash的启动函数_START()的存储地址和BootROM里面reset vector内预设的地址匹配,这样复位以后就总会从启动函数_START()开始执行
  • 即reg.h 里面将寄存器的地址重命名,所以向寄存器写其实就等于向该地址赋值
  • 而link file里面则是将函数变量存在哪个地址做了规定

具体定义见下图:

87e2ce04c7d09876e137a763a9681794.png

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

526f02129f894fb5601c059a2099324e.png

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

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

41ad317f13808e6874576ec9861e7bac.png

可以看到:

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

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

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

相关文章

[WCF安全系列]认证与凭证:用户名/密码认证与Windows认证

如果要给认证下一个定义,我个人的倾向这样的定义:认证是确定被认证方的真实身份和他或她申明(Claim)的身份是否相符的行为。认证方需要被认证方提供相应的身份证明材料,以鉴定本身的身份是否与声称的身份相符。在计算机…

培养有见识的孩子,这6部适合孩子的纪录片,在家也能涨知识!

全世界只有3.14 % 的人关注了爆炸吧知识对孩子来说,好的纪录片就像打开了一扇新世界的大门,让他们了解更多世界的奇妙之处。BBC(英国广播公司)的纪录片题材广泛、制作精良。看这些经典的纪录片,既可以追溯上下数千年的…

Beta版本发布报告

项目名称学霸系统写手机客户端项目版本Beta版本负责人北京航空航天大学计算机学院 hots团队联系方式http://www.cnblogs.com/hotsbuaa/要求发布日期2014-12-28第一阶段基本功能已经完成,因此第二阶段的任务是:美化UI,修复接口,修复…

mysql连接主备_mysql主备配置方法

1. 选择两台机器(这里选的centos6.5 final),安装相同版本的mysqlyum installmysql ;yum install mysql-server;2. 启动mysqlservice mysqld start3. 登录两个mysql,执行如下命令GRANT REPLICATION SLAVE,REPLICATION CLIENT on *.* to replmysql机器IP i…

linux下tar解压特定的目录

今天碰到一个客户的网站出问题,需要恢复;可我备份都是用打包的,如果要恢复某个目录,就需要全部解压,才能恢复;这样很费事。所以我请教了很多牛人,有没有解压压缩包里面特定的目录,可…

Dapr牵手.NET学习笔记:开篇

dapr,一个为分布式应用程序的运行时,为开发者在对接分布式组件时,提供了便利。使用dapr带来的好处可扩展性,因为它是通过sidecar的理概念来集成其他运行时的。同时dapr还提供了多种语言的SDK。关于dapr更多介绍,官方文…

vue 一个页面有点请求需要同时发送_前端性能优化,这些你都需要知道

来源: 海洋里的魔鬼鱼前言最近花了一些时间在项目的性能优化上,背后做了很多工作,但是最后依然没有达到自己想要的结果,有些失望,但是还是记录下自己的执着。性能优化总结:减少请求次数、减小资源大小、提高响应和加载…

男人能有什么错呢?

1 这上菜方式厉害了!2 谁上学的时候还没转过笔了!3 和朋友的塑料友情 图自别叫我P图仔4 非洲最致命的猫!传说能撂倒长颈鹿!大家估量一下!5 狗子:你放开我好吗??6 这位小姐姐真的很酷…

LDAP启动cacao提示Invalid file permission

问题处理步骤: 1、LDAP实例停止 2、DSCC控制台启动,提示cacao已停止…… 3、启动caocaorootrusky bin]# ./cacaoadm startInvalid file permission: [/home/ldap/dsee6/cacao_2/etc/opt/sun/cacao/instances/default/security] [rwxrwxr-x]. Problem val…

[019] C#基础:理解装箱与拆箱

.NET大牛之路 • 王亮精致码农 • 2021.08.27前面我们讲到 .NET 平台支持的两大数据类型:值类型和引用类型。值类型比引用类型更高效,因为它没有指针引用,不用分配在托管堆中,也不用被 GC 回收。但有时候你可能偶尔需要将一种类型…

H3C 5510 交换机DHCP设置

DHCP不能发现网络上非DHCP客户机已经在使用的IP地址;当网络上存在多个DHCP服务器时,一个DHCP服务器不能查出已被其它服务器租出去的IP地址;DHCP服务器不能跨路由器与客户机通信,除非路由器允许BOOTP转发。PC发出的广播包&#xff…

opentrace在mysql中使用_采用OpenReplicator解析MySQL binlog

Open Replicator是一个用Java编写的MySQL binlog分析程序。Open Replicator 首先连接到MySQL(就像一个普通的MySQL Slave一样),然后接收和分析binlog,最终将分析得出的binlog events以回调的方式通知应用。Open Replicator可以被应用到MySQL数据变化的实…

雷军:有人说我写的代码像诗一样优雅~

全世界只有3.14 % 的人关注了爆炸吧知识整合整理:程序员的那些事(id:iProgrammer)雷军的代码像诗一样优雅↓↓↓有些网友在评论中质疑,说雷军代码不会是「屎」一样优雅吧。说这话的网友,也许是开玩笑的&…

国外网站评出对程序员最具影响的书籍清单

国外知名网站 stackoverflow 上有一个问题调查: 哪本书是对程序员最有影响、每个程序员都该阅读的书?这个调查已历时两年,目前为止吸引了153,432 人访问,读者共推荐出了 478 本书(还在增加),其中最火的一本书《Code Co…

python大于小于_在Python中大于/小于Pandas DataFrames / Series之间的比较

如何在DataFrame和Series之间进行比较?我想掩盖DataFrame / Series中比其他DataFrame / Series中的元素更大/更小的元素. 例如,以下内容不会替换大于均值的元素 与nans虽然我期待它: >>> x pd.DataFrame(data{a: [1, 2], b: [3, 4]}) >>…

NodeJS学习笔记

通过js创建个简单的web服务器 var httprequire(http); http.createServer(function(req,res){ res.writeHead(200,{Content-Type:text/html}); res.end("server is up!"); }).listen(8000); console.log(listened on 8000); 推荐学习:Node入门 转载于:https://www.cn…

mysql分析日志_MYSQL 索引(三)--- SQL日志分析

慢查询日志Mysql 的慢查询日志是 Myql 提供的一种日志记录,用来记录在 Myql 中响应时间查过阈值的语句,具体指运行时间超过 long_query_time 值的 SQL,则会被记录在日志中。long_query_time 默认为 10,单位为秒。默认情况下&#…

【转】SMIL基础教程(1)

最近公司项目需要使用到smil相关知识,因而专门学习了一下。在网上找到了几篇基础教程,转载以方便查看。一、 简介随着流技术的成熟和广泛的应用,其优点我们有了深深的体会。但是,其不足之处也逐渐体现出来。问题的出现&#xff0c…

C#多线程开发-任务并行库

你好,我是阿辉。正文共2090字,预计阅读时间:6min。之前学习了线程池,知道了它有很多好处。使用线程池可以使我们在减少并行度花销时节省操作系统资源。可认为线程池是一个抽象层,其向程序员隐藏了使用线程的细节&#…

.cue 文件格式

cue文件格式(基础版) PERFORMER "陈小春" TITLE "抱一抱" FILE "陈小春.-.[抱一抱].专辑.(ape).ape" WAVE TRACK 01 AUDIO TITLE "抱一抱" INDEX 01 00:00:00 TRACK 02 AUDIO TITLE "我爱的人…