关于msp430fr2000的内存FRAM的问题!!

2019-03-23 22:16发布

我在使用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


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
yg776
2019-03-24 16:57
这个msp430fr2000的内存实在是太小了,我现在已经删掉了这2个数组。只保留了一个必须用的TIME【3】的全局变量。它的FRAM还是超过了它预先在CMD里面的0x180长度,我现在优化到极致只能保持0x2d7的长度,但是还是超过了。

而且还有个问题是,只要主函数使用了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);
    }
}


一周热门 更多>

相关问题

    相关文章