7295|4

41

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

MSP430 FRAM系列自由划分ROM和RAM的大小 [复制链接]

MSP430 FRAM系列介绍中说到可以自由划分ROM和RAM的大小,但是我没找到如何划分的相关资料,有谁研究过没?,官方视频也有提到FRAM统一了ROM和RAM,可自由划分这两种存储类型的大小,不用为了选择大的RAM单片机而使用大的ROM单片机。可是视频也没介绍是如何划分的。

最新回复

这样啊,不是在程序中修改  详情 回复 发表于 2015-12-14 10:57
 
点赞 关注

回复
举报

5276

帖子

5

TA的资源

裸片初长成(中级)

推荐
 
发FR57XX时将DATA段放到FRAM中的方法

FRAM是TI最新半导体技术在MCU上的应用。

其FRAM与普通的FLASH与SRAM比主要有两个优势:

1、FRAM像FLASH一样数据掉电不易失;

2、FRAM像SRAM一样,可以直接在上面运行程序;

所以FRAM可以身兼FLASH与RAM两职。

在开发FR57XX MCU时可以发现,FR57XX既有FRAM,也有RAM。

细心的朋友会发现在CCS与IAR中,编译器均有默认的数据段代码段堆栈等地址分配,有些在FRAM中,有些在RAM中。

如果想尝试将所有的代码数据均放在FRAM中则需要对编译器的MCU配置文件进行修改。

1、CCS V5的修改方法

CCS的存储器地址映射表是放在.cmd文件中的

打开工程中的.cmd文件,系统默认将.bss(全局静态变量)与.stack(堆栈)放在RAM中

如下所示:

.bss       : {} > RAM                /* GLOBAL & STATIC VARS              */

.stack     : {} > RAM (HIGH)         /* SOFTWARE SYSTEM STACK             */

若需要将其放在FRAM中则可以如下修改配置文件:

.bss       : {} > FRAM                /* GLOBAL & STATIC VARS              */

.stack     : {} > FRAM (HIGH)         /* SOFTWARE SYSTEM STACK             */

2、IAR中的修改方法

IAR的存储器地址映射表是放在.xcl文件中的

打开该文件后,将放在RAM中的段均映射到FRAM中即可。

以FR5739为例:打开lnk430fr5739.xcl

看到RAM的地址区间为// Read/write memory (RAM):        1C00-1FFF

FRAM的地址区间为// Read-only memory (FRAM):        C200-FFFF

放在RAM区域内的是:动态数据

-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,TLS16_I,DATA16_HEAP+_DATA16_HEAP_SIZE=1C00-1FFF

-Z(DATA)CODE_I

-Z(DATA)CSTACK+_STACK_SIZE#

将其放到FRAM中去:

-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,TLS16_I,DATA16_HEAP+_DATA16_HEAP_SIZE=C200-FFFF

-Z(DATA)CODE_I

-Z(DATA)CSTACK+_STACK_SIZE#

编译连接后调试可以发现此时动态变量已经在FRAM中。

注意:.xcl在工程中不能修改

其文件位置为:\IAR Systems\Embedded Workbench 6.0 Evaluation\430\config

建议复制一个原始文件改名保存,将lnk430fr5739.xcl剪切到桌面打开-修改-保存,在剪切回config目录下。

IAR .xcl中DATA,CODE等段的定义与说明详见《MSP430 IAR C/C++ Compiler Reference Guide》与

《IAR Linker and Library Tools Reference Guide》

如果上面说的内容有错误或者问题,请大家直接指出,一起讨论并解决。



补充一点,

1. MSP430的整个FRAM存储区域都包含在C200-FF7F(16k)中,无论代码和常量以及全局变量都可以定义在这个范围.

2. 在定义常量时可以和代码区定义在一起,但是如果定义全局变量,最好是进行一个划分。

例如:

-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,TLS16_I,DATA16_HEAP+_DATA16_HEAP_SIZE=F000-FF7F

-Z(CONST)DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,CHECKSUM=C200-EFFF

-Z(CODE)CSTART,ISR_CODE,CODE_ID=C200- EFFF

-P(CODE)CODE= C200 - EFFF

注意: 红色部分可以根据实际应用进行调整。

这样就给FRAM划出了一个区域作为变量。但这样做也是有缺点的,就是定义了所有的变量到F000-FF7F,1K的SRAM区就用不了.

在实际定义中,可以这样进行个规划。

DATA16_Z : 在定义时初始化为0的变量定义到 FRAM

DATA16_I :  在定义时有初始化的变量定义到 FRAM

DATA16_N : 未在定义时初始化的变量定义到 SRAM

TLS16_I :   定义到SARM

DATA16_HEAP+_DATA16_HEAP_SIZE 定义到SRAM

具体更改如下 :

-Z(DATA)DATA16_I,DATA16_Z= F000-FF7F

-Z(DATA)DATA16_N,TLS16_I,DATA16_HEAP+_DATA16_HEAP_SIZE = 1C00-1FFF


在实际软件编程的时候注意一下几点:

1.       需要用作查找表的大数组定义时给出初始值

例如: unsigned char buf[100] = {0};

2.       全局变量和静态变量定义时赋值

    例如: int g_flag = 0;

3.       局部非静态边量定义时不赋值,这样编译器会自动分配RAM的空间使用.

例如: int m_dat;

用户可以根据实际应用情况合理地规划FRAM和RAM,尽量让需要频繁更改又需要掉电保存的变量定义到FRAM,

只是作为临时变量的定义到SRAM中。

点评

变量定义如何选择定义在FRAM,还是定义在RAM呢?  详情 回复 发表于 2014-7-3 20:25
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 

回复

420

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
没有板子,没弄过
 
 
 

回复

705

帖子

0

TA的资源

纯净的硅(中级)

4
 
wangfuchong 发表于 2014-6-28 15:19
发FR57XX时将DATA段放到FRAM中的方法

FRAM是TI最新半导体技术在MCU上的应用。

变量定义如何选择定义在FRAM,还是定义在RAM呢?
 
 
 

回复

25

帖子

1

TA的资源

一粒金砂(中级)

5
 
这样啊,不是在程序中修改
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表