我在使用MSP430FR2000的时候,因为是内存小,价格便宜,引脚少。我们才选择了他,但是现在遇到了他的内存的问题。
我在写程序的时候,引入了ds1302的头文件,但是问题就随之而来了。因为这个单片机的fram只有0.5K.
FRAM : origin = 0xFE00, length = 0x180
ds1302里面有2个地址数组:
static uchar READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
static uchar WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
只要有这2个数组在程序里面,编译就是不通过。提示:profram will not fit into available memory,placement with alignment fails for section
"ALL_FRAM" size 0x376.
我百度过,网上的解决方法好像是手动修改CMD文件里面的FRAM的长度。但是我真不知道该怎么该,有点懵。
我还试过把这个全局变量放到要用的函数里面。也不行,解决不了。
求求大佬帮忙看一下 编译软件是CCSV8.3
此帖出自
小平头技术问答
而且还有个问题是,只要主函数使用了ds1302里面的函数,编译就会不通过。而且使用不同的函数还会带来不同的FRAM长度的不同,就是他的意思就是我不能全局变量 且 我不能使用过多的函数,我觉得不管这个芯片有多老,它也不应该连一个全局变量都不能放啊......
反正主函数里面不可以放ds1302的函数,因为ds1302里面的函数提到了TIME【3】,使用的函数次数越多,fram就越大。
以下是我的三个主函数需要用到的函数。
void Ds1302_Init(void)
{
uchar n;
Ds1302Write(0x8E,0X00); //禁止写保护,就是关闭写保护功能
if(Ds1302Read(0xc1) != 0xaa)
{
for (n=0; n<3; n++)//写入7个字节的时钟信号:分秒时日月周年
{
Ds1302Write(0x80 + n*2,TIME[n]);
}
Ds1302Write(0xc0,0xaa); //打开写保护功能
// Ds1302Write(0x8E,0x80); //打开写保护功能
}
}
void important_Init(void) //这是用于修改了时间后 对寄存器进行的重新赋值
{
uchar n;
Ds1302Write(0x8E,0X00); //禁止写保护,就是关闭写保护功能
for (n=0; n<3; n++)//写入7个字节的时钟信号:分秒时日月周年
{
Ds1302Write(0x80 +n*2,TIME[n]);
}
Ds1302Write(0x8E,0x80); //打开写保护功能
}
void Ds1302ReadTime(void)
{
uchar n;
for (n=0; n<3; n++)//读取7个字节的时钟信号:分秒时日月周年
{
TIME[n] = Ds1302Read(0x81 + n*2);
}
}
一周热门 更多>