请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430FR2033 工具/软件:Code Composer Studio
我在写入放置在FRAM自定义部分内的变量时遇到问题。 我可以读取每个位置的值(0xFF),但似乎无法更新该值。 似乎有一些我不知道的写保护发生了吗? 我相信MSP430FR2033没有MPU,所以我猜这不是问题所在。
在下面的简单测试程序中,我可以检查TestBuffer的内存位置(位于0xC400),并且值不会更改。 我还可以看到READ_TEST可以读取TestBuffer[1]的初始值0xFF,但第二个读取仍返回0xFF,尽管更新了TestBuffer[1]= 0x11的值。
我还提供了自定义.cmd链接器作为参考。 如有任何帮助,我们将不胜感激。
主要c
#include <MSP430-h>
#pragma data_section(TestBuffer,".log_buffer")
volatile unsigned char TestBuffer[10];
int main(void)
{
volatile unsigned char read_test = 0;
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
READ_TEST = TestBuffer[1];
TestBuffer[1]= 0x11;
READ_TEST = TestBuffer[1];
TestBuffer[0]= 0x22;
返回0;
}
lnk_msp430fr2033.cmd:
内存
{
SFR :原点= 0x0000,长度= 0x0010
外围设备_8位 :原点= 0x0010,长度= 0x00F0
外围设备_16BIT :原点= 0x0100,长度= 0x0100
RAM :原点= 0x2000,长度= 0x0800
信息A. :原点= 0x1800,长度= 0x0200
LOG_BUFFER : Origin = 0xC400,length = 0x0400
FRAM :原点= 0xC800,长度= 0x3780
JTAGSIGNATURE :原点= 0xFF80,长度= 0x0004,填充= 0xFFFF
BSLSIGNATURE :原点= 0xFF84,长度= 0x0004,填充= 0xFFFF
INT00 :原点= 0xFF88,长度= 0x0002
INT01 :原点= 0xFF8A,长度= 0x0002
INT02 :原点= 0xFF8C,长度= 0x0002
INT03 :原点= 0xFF8E,长度= 0x0002
INT04 :原点= 0xFF90,长度= 0x0002
INT05 :原点= 0xFF92,长度= 0x0002
INT06 :原点= 0xFF94,长度= 0x0002
INT07 :原点= 0xFF96,长度= 0x0002
INT08 :原点= 0xFF98,长度= 0x0002
INT09 :原点= 0xFF9A,长度= 0x0002
INT10 :原点= 0xFF9C,长度= 0x0002
INT11 :原始= 0xFF9E,长度= 0x0002
INT12. :原点= 0xFFA0,长度= 0x0002
INT13 :原点= 0xFFA2,长度= 0x0002
INT14 :原点= 0xFFA4,长度= 0x0002
INT15 :原点= 0xFFA6,长度= 0x0002
Int16 :原点= 0xFFA8,长度= 0x0002
INT17 :原点= 0xFAA,长度= 0x0002
INT18 :原点= 0xFFAC,长度= 0x0002
INT19 :原点= 0xFFAE,长度= 0x0002
INT20 :原点= 0xFFB0,长度= 0x0002
INT21 :原点= 0xFFB2,长度= 0x0002
INT22. :原点= 0xFFB4,长度= 0x0002
INT23 :原点= 0xFFB6,长度= 0x0002
INT24 :原点= 0xFFB8,长度= 0x0002
INT25 :原点= 0xFFBA,长度= 0x0002
INT26. :原点= 0xFFBC,长度= 0x0002
INT27 :原点= 0xFFBE,长度= 0x0002
INT28 :原点= 0xFFC0,长度= 0x0002
INT29 :原点= 0xFFC2,长度= 0x0002
INT30 :原点= 0xFFC4,长度= 0x0002
INT31. :原点= 0xFFC6,长度= 0x0002
Int32. :原点= 0xFFC8,长度= 0x0002
INT33 :原点= 0xFFCA,长度= 0x0002
INT34 :原点= 0xFFCC,长度= 0x0002
INT35 :原点= 0xFFCE,长度= 0x0002
INT36 :原点= 0xFFD0,长度= 0x0002
INT37 :原点= 0xFFD2,长度= 0x0002
INT38. :原点= 0xFFD4,长度= 0x0002
INT39 :原点= 0xFD6,长度= 0x0002
INT40 :原点= 0xFD8,长度= 0x0002
INT41 :原点= 0xFFDA,长度= 0x0002
INT42 :原点= 0xFFDC,长度= 0x0002
INT43 :原点= 0xFFDE,长度= 0x0002
INT44 :原点= 0xFFE0,长度= 0x0002
INT45 :原点= 0xFFE2,长度= 0x0002
INT46 :原点= 0xFFE4,长度= 0x0002
INT47 :原点= 0xFFE6,长度= 0x0002
INT48 :原点= 0xFFE8,长度= 0x0002
INT49 :原点= 0xFFEA,长度= 0x0002
INT50 :原点= 0xFFEC,长度= 0x0002
INT51 :原点= 0xFFEE,长度= 0x0002
INT52 :Origin = 0xFFF0,length = 0x0002
INT53. :原点= 0xFFF2,长度= 0x0002
INT54 :原点= 0xFFF4,长度= 0x0002
INT55 :原点= 0xFFF6,长度= 0x0002
INT56 :原点= 0xFFF8,长度= 0x0002
INT57 :原点= 0xFFFA,长度= 0x0002
INT58 :原点= 0xFFFC,长度= 0x0002
重置 :原点= 0xFFFE,长度= 0x0002
}/**********************************************************************************************
//*
指定分配到内存的部分 *
///................ /
部分
{
组(all_FRAM)
{
组(read_write_memory)
{
.ti.persistent:{} /*用于#pragma持久性 */
}
组(只读内存)
{
cinit :{} /*初始化表 */
。销钉 :{} /* C++构造函数表 */
二进制 :{} /*启动时初始化表*/
init_array :{} /* C++构造函数表 */
.mspabi.exidx:{} /* C++构造函数表 */
.mspabi.extab:{} /* C++构造函数表 */
。const :{} /*常量数据 */
}
组(可执行内存)
{
文本 :{} /*代码 */
}
}> FRAM
#ifdef __TI_Compiler_version__
#if __TI_Compiler_version__>= 1500.9万
#ifndef __larate_data_model__
.TI.ramfunc :{} load=fram, run=ram, table(BINIT)
#否则
.TI.ramfunc :{} load=fram | FRAM2, run=ram, table(BINIT)
#endif
#endif
#endif
.jtagsignature :{}> JTAGSIGNATURE /* JTAG Signature */
.bslsignature :{}> BSLSIGNATURE /* BSL签名 */
BSS :{}>内存 /*全局和静态虚拟 */
数据 :{}>内存 /*全局和静态虚拟 */
.TI.noinit :{}> RAM /*用于#pragma noinit */
首席信息官 :{}>内存 /* C I/O缓冲区 */
sysmem :{}>内存 /*动态内存分配区域*/
堆栈 :{}> RAM (高) /*软件系统堆栈 */
信息A (无加载):{}>信息A /* MSP430信息FRAM内存段*/
log_buffer :{}> log_buffer
/* MSP430中断矢量 */
int00 :{} > INT00
int01 :{} > INT01
int02 :{} > INT02
int03 :{} > INT03
int04 :{} > INT04
int05 :{} > INT05
int06 :{} > INT06
int07 :{} > INT07
int08 :{} > INT08
int09 :{} > INT09
.INT10. :{} > INT10
INT11. :{} > INT11
INT12. :{} > INT12
INT13. :{} > INT13
INT14. :{} > INT14
int15 :{} > INT15
内部16 :{} > Int16
int17 :{} > INT17
int18 :{} > INT18
int19 :{} > INT19
int20 :{} > INT20
int21 :{} > INT21
int22 :{} > INT22
int23 :{} > INT23
int24 :{} > INT24
int25 :{} > INT25
int26 :{} > INT26
int27 :{} > INT27
int28 :{} > INT28
int29 :{} > INT29
int30 :{} > INT30
int31 :{} > INT31
内部32. :{} > Int32.
int33 :{} > INT33
int34 :{} > INT34
int35 :{} > INT35
int36 :{} > INT36
int37 :{} > INT37
int38 :{} > INT38
int39 :{} > INT39
int40 :{} > INT40
int41 :{} > INT41
int42 :{} > INT42
int43 :{} > INT43
int44 :{} > INT44
int45 :{} > INT45
端口2 :{*(.int46)}> INT46类型= VECT_INIT
端口1 :{*(.int47)}> INT47类型= VECT_INIT
ADC :{*(.int48)}> INT48类型= VECT_INIT
USI_B0 :{*(.int49)}> INT49类型= VECT_INIT
USI_A0 :{*(.int50)}> INT50类型= VECT_INIT
WDT :{*(.int51)}> INT51 type = VECT_INIT
RTC :{*(.int52)}> INT52类型= VECT_INIT
Timer1_A1:{*(.int53)}> INT53 type = VECT_INIT
Timer1_A0 :{*(.int54)}> INT54类型= VECT_INIT
TIMER0_A1:{*(.int55)}> INT55类型= VECT_INIT
TIMER0_A0:{*(.int56)}> INT56类型= VECT_INIT
联米信息中心 :{*(.int57)}> INT57类型= VECT_INIT
SYSNMI :{*(.int58)}> INT58类型= VECT_INIT
重置 :{} >重置/* MSP430重置矢量 */}/********************************************************************************
//*
包括外设内存映射 *
///................ /
-l msp430fr2033.cmd