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.
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的首地址到相应的地址再次编译即可。