玩430FRAM看到例程中一句话,没用过,求教是什么意思

2019-03-24 08:40发布

__persistent unsigned long FRAM_write[WRITE_SIZE] = {0};
这句话是什么意思?__persistent是什么用法?求教大神解释
顺便附上整体程序:

#include "msp430.h"

void FRAMWrite(void);

unsigned char count = 0;
unsigned long data;
#define WRITE_SIZE 128

#if defined(__TI_COMPILER_VERSION__)
#pragma PERSISTENT(FRAM_write)
unsigned long FRAM_write[WRITE_SIZE] = {0};
#elif defined(__IAR_SYSTEMS_ICC__)
__persistent unsigned long FRAM_write[WRITE_SIZE] = {0};                                    //这句何解?
#else
#error Compiler not supported!
#endif

int main(void)
{
  WDTCTL = WDTPW | WDTHOLD;                 // Stop WDT

  // Configure GPIO
  P1OUT &= ~BIT0;                           // Clear P1.0 output latch for a defined power-on state
  P1DIR |= BIT0;                            // Set P1.0 to output direction

  // Disable the GPIO power-on default high-impedance mode to activate
  // previously configured port settings
  PM5CTL0 &= ~LOCKLPM5;

  // Initialize dummy data
  data = 0x00010001;

  while(1)
  {
    data += 0x00010001;
    FRAMWrite();                            // Endless loop
    count++;
    if (count > 100)
    {
      P1OUT ^= 0x01;                        // Toggle LED to show 512K bytes
      count = 0;                            // ..have been written
      data = 0x00010001;
    }
  }
}

void FRAMWrite(void)
{
  unsigned int i=0;

  for ( i= 0; i<WRITE_SIZE; i++)
  {
    FRAM_write = data;
  }
}


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
人民币的幻想
1楼-- · 2019-03-24 17:26
迈尔风随
2楼-- · 2019-03-24 19:19
 精彩回答 2  元偷偷看……
今夜雨夹雪
3楼-- · 2019-03-24 23:39
人民币的幻想 发表于 2016-11-14 18:10
IAR编译器专用,百度得到的http://processors.wiki.ti.com/index.php/IAR_Embedded_Workbench_Kickstart_fo ...

谢谢指导!注释上说这相当于定义了一个全局变量,而且还不会被起始文件初始化。在这句话中,将它放入预编译,有什么特殊意义吗?在这里如果只是换成普通的定义全局变量stactic,会有什么其他影响呢?。谢谢!
火火山
4楼-- · 2019-03-24 23:59
今夜雨夹雪 发表于 2016-11-15 10:02
谢谢指导!注释上说这相当于定义了一个全局变量,而且还不会被起始文件初始化。在这句话中,将它放入预编 ...

加了那个关键字,就会把你定义的数组强制放在FRAM的地址上去,如果不加,只是普通的全局变量,就会放在RAM的地址去,这样掉电的话,数据会被清掉
freebsder
5楼-- · 2019-03-25 00:55
 精彩回答 2  元偷偷看……
freebsder
6楼-- · 2019-03-25 06:15


不初始化就是说这段代码不需要依赖初始化默认行为比如全局变量初始化为0,或者没有其他初始化行为比如a[1]={0},启动时初始化没必要,因为你明确的知道初始数据内容的合法性你自己保障(否则你加这个keyword做什么?)。或者不能初始化,比如这段代码的地址指向器件寄存器地址,用这些地址加相应偏移来访问寄存器,你就不能初始化。

一周热门 更多>

相关问题

    相关文章