• 鸟瞰“中国围屋之乡” 造型独特如城堡 2019-04-16
  • 先想好如何处理可能的危害,要有经济“卫国战争”的准备,要将困难多设想一点,想到了就不会很被动。 2019-04-16
  • 实现中华民族伟大复兴是近代以来中华民族最伟大的梦想(认真学习宣传贯彻党的十九大精神) 2019-04-13
  • 报道新闻记录历史 70载人民日报见证中国发展大事 2019-04-13
  • 新华网评:凝聚打赢脱贫攻坚战的强大合力 2019-04-02
  • 打造历史文化名城 “安宁记忆”项目启幕 2019-04-02
  • 打开设计图纸的说明。 2019-03-30
  • 一语惊坛(5月15日):川航备降,是临危不惧的中国智慧的中国奇迹。 2019-03-25
  • 社长手记造车奇人尹同跃并非只为奇瑞而来 2019-03-17
  • 三代航天人做客人民网 共话中国航天创建60年 2019-03-01
  • 回复@寻找失落的真理:跟你的铁环玩去!咱真的没兴趣碾压你也。 2019-03-01
  • 有人踢球踢进了手术室 有人看球看到脖子扳牢了 2019-02-23
  • 朋友圈买过这些东西吗?原来都是不靠谱的! 2019-02-05
  • 为宣传奇绝秀美旅游风光 鹰潭市委书记自拍上央视(图) 2019-02-05
  • 统一监管缺位容易出现监管套利 2018-11-22
  • 广东11选五5开奖结果:社区导航

     

    广东十一选五开奖图

    搜索
    查看: 950|回复: 8
    打印 上一主题 下一主题

    [求助] 关于msp430fr2000的内存FRAM的问题??!

    [复制链接]

    广东十一选五开奖图 www.guu6.com 17

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    跳转到指定楼层
    楼主
    发表于 2019-3-1 22:06 | 只看该作者 |只看大图 |倒序浏览 |阅读模式
    我在使用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


    R]J4%`CUFR62)8WX7UY~14H.png (32.96 KB, 下载次数: 0)

    R]J4%`CUFR62)8WX7UY~14H.png


    7488

    TA的帖子

    4951

    TA的资源

    博客管理员

    Rank: 6Rank: 6

    资源大师勋章

    沙发
    发表于 2019-3-2 07:22 | 只看该作者
    这两个数组是常量吗,如果是,定义成常量,就不占RAM空间了


    1328

    TA的帖子

    7

    TA的资源

    版主

    Rank: 6Rank: 6

    板凳
    发表于 2019-3-2 08:44 | 只看该作者
    1) 如楼上所说,如果RAM太小,程序空间还有空间,可以定义成常量数组或宏定义(宏定义也是常量的一种形式)
    2) 另外就是直接在程序中定,当然这样移植可能不太灵活

    点评

    我现在都已经这样了 void Ds1302ReadTime(void) { uchar n; // for (n=0; n  详情 回复 发表于 2019-3-2 17:22
    专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void


    17

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    4
     楼主| 发表于 2019-3-2 17:09 | 只看该作者
    懒猫爱飞 发表于 2019-3-2 08:44
    1) 如楼上所说,如果RAM太小,程序空间还有空间,可以定义成常量数组或宏定义(宏定义也是常量的一种形式) ...

    我之前直接把全局变量的这2个数组拿到函数里面去过,还是不通过。

    方法二。定义为常量数组,
    我改成了
    const uchar  READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
    const uchar  WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};

    因为这是2个地址数组,只读就行。我就想让他不占那么多空间。结果还是编译报错。

    方法三,宏定义法。
    我像这样宏定义了一下
    //#define READ_RTC_ADDR[0] 0x81
    //#define READ_RTC_ADDR[1] 0x83
    //#define READ_RTC_ADDR[2] 0x85
    //#define READ_RTC_ADDR[3] 0x87
    //#define READ_RTC_ADDR[4] 0x89
    //#define READ_RTC_ADDR[5] 0x8b
    //#define READ_RTC_ADDR[6] 0x8d

    但是不能直接用,因为使用这2个数组的函数的形参是uchar形,所以编译就也是不能通过的。

    我再尝试看看宏定义法,改一下函数。


    17

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    5
     楼主| 发表于 2019-3-2 17:09 | 只看该作者
    tiankai001 发表于 2019-3-2 07:22
    这两个数组是常量吗,如果是,定义成常量,就不占RAM空间了

    改成了
    const uchar  READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
    const uchar  WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};

    结果还是不通过


    17

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    6
     楼主| 发表于 2019-3-2 17:22 | 只看该作者
    懒猫爱飞 发表于 2019-3-2 08:44
    1) 如楼上所说,如果RAM太小,程序空间还有空间,可以定义成常量数组或宏定义(宏定义也是常量的一种形式) ...

    我现在都已经这样了

    void Ds1302ReadTime(void)
    {

        uchar n;
    //    for (n=0; n<3; n++)
    //    {
    //        TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
    //    }

        TIME[0] = Ds1302Read(0x81);
        TIME[1] = Ds1302Read(0x83);
        TIME[2] = Ds1302Read(0x85);


    }

    数组也不要了,直接写地址,它还是不通过。。。。


    17

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    7
     楼主| 发表于 2019-3-2 18:31 | 只看该作者
    这个msp430fr2000的内存实在是太小了,我现在已经删掉了这2个数组。只保留了一个必须用的TIME【3】的全局变量。它的FRAM还是超过了它预先在CMD里面的0x180长度,我现在优化到极致只能保持0x2d7的长度,但是还是超过了。

    而且还有个问题是,只要主函数使用了ds1302里面的函数,编译就会不通过。而且使用不同的函数还会带来不同的FRAM长度的不同,就是他的意思就是我不能全局变量 且 我不能使用过多的函数,我觉得不管这个芯片有多老,它也不应该连一个全局变量都不能放啊......

    反正主函数里面不可以放ds1302的函数,因为ds1302里面的函数提到了TIME【3】,使用的函数次数越多,fram就越大。

    以下是我的三个主函数需要用到的函数。

    void Ds1302_Init(void)
    {
        uchar n;
        Ds1302Write(0x8E,0X00);      //禁止写?;?,就是关闭写?;すδ?br />     if(Ds1302Read(0xc1) != 0xaa)
        {
        for (n=0; n<3; n++)//写入7个字节的时钟信号:分秒时日月周年
        {
            Ds1302Write(0x80 + n*2,TIME[n]);
        }


        Ds1302Write(0xc0,0xaa);      //打开写?;すδ?br /> //  Ds1302Write(0x8E,0x80);      //打开写?;すδ?br /> }
    }



    void important_Init(void)                //这是用于修改了时间后 对寄存器进行的重新赋值
    {
        uchar n;
        Ds1302Write(0x8E,0X00);      //禁止写?;?,就是关闭写?;すδ?br />     for (n=0; n<3; n++)//写入7个字节的时钟信号:分秒时日月周年
        {
            Ds1302Write(0x80 +n*2,TIME[n]);
        }




        Ds1302Write(0x8E,0x80);      //打开写?;すδ?br /> }



    void Ds1302ReadTime(void)
    {

        uchar n;
        for (n=0; n<3; n++)//读取7个字节的时钟信号:分秒时日月周年
        {
            TIME[n] = Ds1302Read(0x81 + n*2);
        }
    }




    893

    TA的帖子

    0

    TA的资源

    纯净的硅(初级)

    Rank: 4

    8
    发表于 2019-3-3 09:02 来自手机 | 只看该作者
    本帖最后由 大秦正声 于 2019-3-3 09:06 编辑

    通过指针直接把数据放在备份存储器里边,可以保存32个字节!估计可以解决了的。


    2981

    TA的帖子

    262

    TA的资源

    五彩晶圆(高级)

    Rank: 9Rank: 9Rank: 9

    荣誉会员勋章测评达人

    9
    发表于 2019-3-5 22:18 | 只看该作者
    debug文件夹里面有个MAP文件,里面是你编译后各种资源的分配情况(如变量、常量等)。在里面可以查到资源的使用起始地址及占用情况。你首要看一下那个资源超出范围了??梢园袽AP文件备份一份,然后把数组深度减小或者减少几个变量重新编译,新生成的MAP文件和之前的比较就能很快定位问题。然后需要查看datasheet,看芯片的地址分配图是否还有多余资源可用,适当修改即可。


    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    • 论坛活动 E手掌握

      扫码关注
      EEWORLD 官方微信

    • EE福利  唾手可得

      扫码关注
      EE福利 唾手可得

    Archiver|手机版|小黑屋|广东十一选五开奖图 ( 京ICP证 060456 )

    GMT+8, 2019-4-19 01:23 , Processed in 0.251909 second(s), 18 queries , Gzip On, MemCache On.

    快速回复 广东十一选五开奖图 返回列表
  • 鸟瞰“中国围屋之乡” 造型独特如城堡 2019-04-16
  • 先想好如何处理可能的危害,要有经济“卫国战争”的准备,要将困难多设想一点,想到了就不会很被动。 2019-04-16
  • 实现中华民族伟大复兴是近代以来中华民族最伟大的梦想(认真学习宣传贯彻党的十九大精神) 2019-04-13
  • 报道新闻记录历史 70载人民日报见证中国发展大事 2019-04-13
  • 新华网评:凝聚打赢脱贫攻坚战的强大合力 2019-04-02
  • 打造历史文化名城 “安宁记忆”项目启幕 2019-04-02
  • 打开设计图纸的说明。 2019-03-30
  • 一语惊坛(5月15日):川航备降,是临危不惧的中国智慧的中国奇迹。 2019-03-25
  • 社长手记造车奇人尹同跃并非只为奇瑞而来 2019-03-17
  • 三代航天人做客人民网 共话中国航天创建60年 2019-03-01
  • 回复@寻找失落的真理:跟你的铁环玩去!咱真的没兴趣碾压你也。 2019-03-01
  • 有人踢球踢进了手术室 有人看球看到脖子扳牢了 2019-02-23
  • 朋友圈买过这些东西吗?原来都是不靠谱的! 2019-02-05
  • 为宣传奇绝秀美旅游风光 鹰潭市委书记自拍上央视(图) 2019-02-05
  • 统一监管缺位容易出现监管套利 2018-11-22