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.

msp430 如何将变量的初始化值存储在指定memory 地址中

Other Parts Discussed in Thread: MSP430F5438A

Hi,

msp430f5438a,CCS7.4 环境,

参考

e2echina.ti.com/.../15799的说明,
代码中添加如下:
#pragma DATA_SECTION(temp, ".infoD")

int temp = 20;

编译成功后,在生成的TI-TXT中,没有看到类似@1800的字段。

程序下载到mcu中,读取0x1800地址的值,也显示为FF。

请问,还需要如何修改??

  • CCS中可以给变量分配固定地址,C语言对应语法为:

    #pragma DATA_SECTION ( symbol , " section name " );

    对应的使用例子为:

    #pragma DATA_SECTION(bufferB, "my_sect")
    char bufferA[512];
    char bufferB[512];

    而其中的 my_sect是在对应工程的cmd文件中进行指定的,你可以在cmd文件的


    MEMORY
    {
    RAM1: o = 200h, l = 10h

    ......
    }

    中专门指定出一块RAM用来存放你的变量,此段RAM的起始地址直接定成你想要给变量分配的固定地址,再给它自己起个名字RAM1,自己可以定。其中o后为起始地址,l为长度。

    而后在

    SECTIONS
    {
    ........
    my_sect > RAM1
    }

    中指定my_sect存在RAM1中即可。

    这样symbol就可以放在固定的地址了。

    您也可以看一下之前的分享帖:e2echina.ti.com/.../15799

    希望对您有所帮助!
  • Hi,Susan:
    多谢您的答复。
    我的变量不想放在RAM中,我想把变量放在info memory中,这样mcu运行过程中,如果改变了该变量的值,该变量的值会被再次写入到INFO memory中。这样mcu断电后再次启动,该变量的值就是上次mcu运行过程中更改的值。

    e2echina.ti.com/.../15799
    我按照这个分享帖操作,但是在编译生成的TI-TXT中,没有生成帖子中的@1800字段,程序下载到mcu中,读取0x1800地址的值,也显示为FF。
  • Hi,Seven:

    lnk_msp430f5438a.cmd 文件我没做修改。

    默认的lnk_msp430f5438a.cmd文件中,有如下内容:

    MEMORY
    {
    ......
    INFOD : origin = 0x1800, length = 0x0080
    ......
    }

    SECTIONS
    {
    ......
    .infoD : {} > INFOD
    ......
    }


    还需要做别的修改吗?
  • 经过研究,问题基本解决了,总结如下:

    CCS7.4 IDE 环境中:
    以下两种写法都可以:
    #pragma DATA_SECTION(config_info, ".infoD")
    const char config_info[4] = {0x00,0xab,0x00,0xcd};
    或者
    #pragma location=0x40000
    const char config_info[4] = {0x30,0xab,0x00,0xcd};


    注意,变量一定是const类型(非const类型的为何不可以,不清楚。。。。。。)。
    推荐第二种写法,操作较为简单。

    在编译生成的TI-TXT文件中,会有
    @1800
    00 AB 00 CD
    或者
    @40000
    00 AB 00 CD

    常变量不要存储在INFO memory中,因为烧录时会报 如下错误:“MSP430: File Loader: Verification failed: Values at address 0x01801 do not match Please verify target memory and memory map.
    MSP430: GEL: File: G:\msp430_workspace\sht20\Debug\sht20.out: a data verification error occurred, file load failed.” 可能JTAG不支持烧录INFO memory。(JTAG 可以直接烧录INFO memory 吗?)