This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR5969:#pragma SET_DATA_SECTION (".fram_vars")变量无法修改

Guru**** 2455560 points
Other Parts Discussed in Thread: MSP430FR5969

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1457545/msp430fr5969-pragma-set_data_section-fram_vars-variables-cannot-be-modified

器件型号:MSP430FR5969

工具与软件:

我将使用 #pragma SET_DATA_SECTION (".fram_vars")在 FRAM 中声明变量。 但是、我无法实时修改此类变量。 我添加一个愚蠢的代码来演示。 数组"w2"获取一些初始值、但随后我需要修改这些值。

#pragma SET_DATA_SECTION (".fram_vars")
volatile unsigned char w2[10][2]={0};

#pragma SET_DATA_SECTION ()

// Función para inicializar el arreglo con valores específicos
void init_array()

unsigned char w2_init[10][2]={
{15,103}、

{137,154}、

{146,152}、

{217、70}、

{114,251}、

{6、6}、

{71、27}、

{122,109}、

{41,220}、

{237,232};

for (int i=0;i<10;i++)

for (int j=0;j<2;j++)

w2[i][j]= w2_init[i][j];
}
}
}
void GPIO_init (void)

//配置 GPIO
P1OUT = 0;
P1DIR = 0xFF;

P2OUT = 0;
P2DIR = 0xFF;

P3OUT = 0;
P3DIR = 0xFF;

P4OUT = 0;
P4DIR = 0xFF;

PJOUT = 0;
PJDIR=0xFFFF;

// PM5CTL0 |= LOCKLPM5;//禁用 GPIO 上电默认高阻抗模式
PM5CTL0 &=~μ A LOCKLPM5;//激活之前配置的端口设置
CSCTL0_H = CSKEY >> 8;//解锁 CS 寄存器
CSCTL1 |= DCORSEL;
CSCTL1 |= DCOFSEL_4;//如果 DCORSEL=1、将 DCO 设置为16MHz
// CSCTL1 |= DCOFSEL_6;//如果 DCORSEL=0、将 DCO 设置为8MHz、
/*CSCTL2 = SELA__VLOCLK | SELS__DCOCLK | SELM__DCOCLK;//设置 SMCLK = MCLK = DCO
// ACLK = VLOCLK
CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1;//设置所有分频器
CSCTL0_H = 0;*///锁定 CS 寄存器
FRCTL0 = FRCTLPW | NACCESS_1;// Cambia el valor NACCESS_x para agregar la custidad correcta de Estados de espera

}
int main (void)

WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
GPIO_init ();
init_array();
volatile unsigned char dummie=0;
volatile unsigned char d=0;
dummie = w2[3][1];
for (int i=0;i<10;i++)

for (int j=0;j<2;j++)

dummie=w2[i][j];
W2[i][j]=92;
d=w2[i][j];
}

}
返回0;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您没有提到更改链接器(msp430fr5969.cmd)文件。 除非您这样做、否则它不知道您的.fram_vars 段的任何信息、并且可能会向您发出警告。 我刚尝试时、链接器为该段分配了地址0x0010、该段位于 SFR 的保留区域、因此不能(可靠地)写入。

    如果您希望将 w2放入 FRAM 的可写区域中、我建议使用以下之类的内容将其设置为持久:

    >#pragma persistent ("w2") // FRAM 可写

    这会将 w2放入名为".TI.persistent"的段中、链接器.cmd 文件会将 w2放置在低 FRAM 中的可写区域。 (您可以在.cmd 文件中查看这是如何实现的。)

    [编辑:更正了拼写错误。]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    感谢您的回答。 我更改了链接器。 但是、当我尝试重写变量时、它没有更改它的值。 不管怎样、您的建议似乎可以解决这个问题。 非常感谢。