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.

[参考译文] Starterware/MSP430FR6972:使用"__persistent&quot的问题;

Guru**** 2530710 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/578523/starterware-msp430fr6972-the-question-of-using-__persistent

部件号:MSP430FR6972

工具/软件:Starterware

您好,先生

我想使用“__persistent”将变量初始化为FRAM ,并在电源中断时停止为值Lose。代码如下

 

__persistent int xx =0;
__persistent unsigned char cc[10]={0x0A};
int main (void)
{
WDTCTL = WDTPW | WDTHOLD; //停止WDT

P7OUT &=~BIT0; //清除WFP 7.0 输出锁,用于定义的开机状态
P7DIR |= BIT0;
P7OUT &=~BIT1; //清除WFP 7.1 输出闩锁,用于定义的开机状态
P7DIR || BIT1;
for (unsigned char j= 0; j<10;j++)
{
如果(cc[j]== j ) 
// LED0闪烁 {P7OUT ^= BIT0;} __delay_cycles(10万); } IF (xx == 5){
//LED1 OPEN P7OUT |= BIT1; } xx =5; 对于(unsigned char I= 0;I<10;I++) { cc[i]= I; } }

在电源故障后,我发现 LED0没有闪烁 ,当 电源再次打开时LED1会变亮。 我认为当电源再次打开时LED0会闪烁。为什么?

lnkmsp430fr6972.xcl的内容是:

-Z (const) DATA16_P,DATA20_P=7000-FF7F
-Z (data) DATA16_Heap+_DATA16_Heap_Size
-Z (data) DATA20_Heap+_DATA20_Heap_Size 

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

    您是否确定针脚的闪烁速度不会超过识别速度? 您仅提供100 ms 10次的延迟,因此1秒LED0将快速切换10次。 这看起来更像是LED在半功率下打开,然后再关闭一秒钟。

    我对IAR持久性值没有太多的经验,但在CCS中,您必须在定义其长度之前将数组声明为持久性。 但是,IAR MSP430 C/C++编译器用户指南包含__NO_INIT的此类有效示例以及第312页上的#pragma示例:

    e2e.ti.com/.../174.5169万
    www.ti.com/.../slaa628.pdf
    ftp.iar.se/.../EW430_CompilerReference.pdf

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

    感谢您的帮助,我尝试了500ms的延迟, 它还没有闪烁。但是,当电源再次打开时,我发现存储在FRAM中的数组值是正确的。所以我认为当电源再次打开时,数组的指针会改变。它是否像malloc函数??

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

    如果FRAM阵列的值正确,则问题出在系统的其它部分。 检查LED针脚是否未对地短路。 我还注意到您缺少PM5CTL0 &=~LOCKLPPM5;它禁用GPIO通电默认高阻抗模式以激活先前配置的端口设置,是正确驱动IOS所必需的。

    此致,
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你Ryan,
    我也发现了问题。 缺少PM5CTL0 &=~LOCKLPPM5导致了问题。 我把它归结为新秀的错误。 。 。
    非常感谢您的帮助!

    此致
    Jent