怎么在D-Flash/EEPROM中加载初始化的变量

控制/MCU

1813人已加入

描述

 

由于在暑假匆忙接收的嵌入式项目中需要使用特别大的数组,非分页RAM的内存不够用了,没办法,硬着头皮尝试使用分页RAM,但是完全没有单片机的基础,导致极其的困难。之前写程序都是按照纯软件的思维,主要考虑架构,不会考虑到每个变量具体存在哪个物理地址这么底层的问题,结果被飞思卡尔这分页地址、prm文件什么的搞得一头雾水,而网上的资料又少,讲的又大同小异的笼统,最后写出来的程序因为这分页地址的原因存在各种问题(还以为把变量放到分页RAM了,结果现在稍微懂了点回去看,发现其实很多根本还是分配在非分页区。晕倒~。但是居然还能相对正常运行也是很神奇)。这些天各种找相关的资料,结果发现在CodeWarrior的官方文档资料里其实把我想知道的都讲的很清楚了(还是官方文档给力,以后学什么东西直接找官方文档,不去到处找网上一堆零零散散的资源来学了)。本着学习的态度,将逐步把官方文档翻译一遍,供大家一起交流学习进步。

S12P、S12XEx、S12XS版本的HI-WAVE中的D-Flash编程支持。

这个文档描述了怎么在D-Flash/EEPROM中加载初始化的变量。这个特性只用于large地址模型。
用于下列设备的Flash编程算法包含对这些区域的编程支持。为了有效率的使用它,需要调整项目。
这篇文档解释了怎么调整项目以使能编程D-Flash。

支持的设备

这个特性用于以下设备:
S12XEP100
S12XEP768
S12XEQ512
S12XEQ384
S12XEG384
S12XES384
S12XET256
S12XEA256
S12XEG128
S12XEA128

S12XS256
S12XS128
S12XS64

S12P128
S12P96
S12P64
S12P32

调整项目

可能需要调整项目配置以使能编程支持,这与在链接器配置文件和(当如果需要加载S-record格式数据时)烧写器命令文件中的内存区域定义有关。

PRM文件

PRM文件需要在满足以下前提下定义D-Flash区域:
D-Flash segments应该使用24位逻辑地址定义。
比如,应该在S12XEP100的PRM文件SEGMENT列表中包含D-flash定义:

EEPROM_00 = READ_ONLY0x000800TO0x000BFF; EEPROM_01 = READ_ONLY0x010800TO0x010BFF; EEPROM_02 = READ_ONLY0x020800TO0x020BFF;...EEPROM_1F = READ_ONLY0x1F0800TO0x1F0BFF;

应该在PLACEMENT列表中把常量放到D-flash中,比如:

/* constant variables */ROM_VARINTOEEPROM_00, EEPROM_01, EEPROM_1F; myseg0INTOEEPROM_02; S-record生成

取决于你的应用要干什么,可能你需要加载S-record文件,在这种情况下,你可能需要调整烧写器脚本文件(burner.bbl)以包含需要的区域到生成的S19镜像中。下面是S12XEP100 .bbl文件的片段:

.../* logical banked D-flash to logical */ len =0x000400origin =0x000800destination =0x000800SENDBYTE1"%ABS_FILE%"origin =0x010800destination =0x010800SENDBYTE1"%ABS_FILE%"origin =0x020800destination =0x020800SENDBYTE1"%ABS_FILE%"...origin =0x1F0800destination =0x1F0800SENDBYTE1"%ABS_FILE%"...调试

在调试时,可以在Connection菜单的Flash菜单项中找到擦除D-Flash区域的选项(Connection的名字是和当前使用的链接一致的)。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分