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.

CCS 编译时声明变量在RAM中的地址?

Other Parts Discussed in Thread: MSP430G2453

include  "msp430g2453.h"

 unsigned int mperatureValue=0,invalid1=0,invalid2=0,ADvalue7=0;

unsigned char strT[9];

unsigned char strR[4];

char  value=0;  // 记录P1.3 (按键) IO口电平变化次数的变量

char flash=0;  //读取的Flash值

char i=0, j=0;

char add_No=0x2B;    //机器指令与RS识别码,不同机器需要修改此处。

以上是程序的变量声明,第一行是AD转换结果的变量,所以希望第一行的变量的首地址为 0x200,这样ADC10的DTC起始地址就可设为0x200,就能获得正确的ADC结果。开始确实如此。当将上述变量声明拷到另一个项目后,编译的结果就不同。地址0x200给了第二行的变量。第一行的变量地址改到了后面。如果修改程序时改变了变量的数目和性质,第一行的地址还会变化。这样就不会有一个正确的ADC结果。

请问是否可以在声明变量时指定变量在RAM中地址?

  • Songlin Qin,

    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就可以放在固定的地址了。

    这些内容在文档“MSP430 Optimizing C or C++ Compiler v 4.0 User's Guide”中均有详细讲解。

    希望对你有帮助!O(∩_∩)O~

  • 谢谢,Lina Lan。

    有时间还是会试一试的。我的解决办法是两次编译。第一次编译后检查相关变量的地址。然后修改DTC的首地址到相应的地址再次编译即可。