将DATA段放到FRAM中的方法
来源:互联网 发布:响巢看看软件 编辑:程序博客网 时间:2024/06/07 00:06
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中。
- 将DATA段放到FRAM中的方法
- 遍历方法将数组中的内容放到另外一个数组
- 点击button,将一个input的value放到另一个input中的三种方法
- FRAM
- 将rs中的值放到数组中
- Linux中的段管理,bss段,data段
- ;用串传送指令 将data段中的第一个字符串复制到它后面的空间
- Spring data 多字段排序方法
- 将SharpDevlop2.0中的日志放到文件中
- 将js/css脚本放到png图片中的实践。
- 如何将程序放到MAC中的Dock栏
- 将js/css脚本放到png图片中的实践。
- 将资产文件中的html纯文字放到TextView中
- 用AndroidStudio中的git将项目放到coding
- 将数据、代码、栈放到不同的段(感觉很好)
- 是否应该将.close()方法放到finally块中?
- 【记录】使用tomcat将资源放到服务器上的方法
- tomcat将项目放到其他位置配置方法
- iOS 纯代码适配iPhone6,6+
- 闲扯到底什么是“竞品”
- go中方法的接收者是值或者指针有什么区别吗?
- mysql导入数据load data infile用法
- 一写jquery插件
- 将DATA段放到FRAM中的方法
- 第八周项目-1.3
- Java重写的规则
- 如何 修改RAILS的默认错误提示 和 Rails validation error message 相关的合集
- 图片滑动加多点触控技术放大缩小图片
- apktool使用教程
- IE下的cursor的url不兼容
- 素数问题
- 不要让你的Rails Validate吓着了用户