• 美国的本质和终极目的决定,和中国必定是始终不断战事硝烟。 2019-06-15
  • 端午将至,我们更加要严格自律,不能趁过节之际搞吃喝送礼、公车私用、公款旅游等,要严防不正之风反弹回潮。做好自己的分内之事,安分守己,加强自我管理和监督,严格遵守 2019-06-15
  • 熊猫启航计划即将启动 让世界聆听大熊猫声音 2019-06-03
  • 尽管管理层一任一任地换,但是以每年IPO数量的多少作为反映政绩的主要标志,而对于股市下跌、市值(包括国有股)损失、经济晴雨表失真、投资者利益巨亏等等,则不在考核 2019-05-31
  • 打倒控房抄者有理,去分房好! 2019-05-26
  • 90后女生抛下帝都生活 仅花了6万元建了一幢别墅! ——凤凰网房产 2019-05-26
  • 陈全国在新疆果业集团调研 2019-05-21
  • “神剧”不再横行,抗战剧回到正轨 2019-05-18
  • 【专题】打一场扶贫攻坚硬仗 河北在行动 2019-05-16
  • 河北千名贫困儿童脊椎健康救助公益活动正式启动 2019-04-23
  • “四好农村路”助力乡村振兴 城市道路增亮让回家路更明亮 2019-04-20
  • 中纪委:有干部不信马列信鬼神 触犯纪律信小圈子 2019-04-20
  • 鸟瞰“中国围屋之乡” 造型独特如城堡 2019-04-16
  • 先想好如何处理可能的危害,要有经济“卫国战争”的准备,要将困难多设想一点,想到了就不会很被动。 2019-04-16
  • 实现中华民族伟大复兴是近代以来中华民族最伟大的梦想(认真学习宣传贯彻党的十九大精神) 2019-04-13
  • 广东11选五历史开奖:社区导航

     

    广东十一选五开奖图

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

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

    [复制链接]

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

    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


    7492

    TA的帖子

    4948

    TA的资源

    版主

    Rank: 6Rank: 6

    资源大师勋章

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


    1343

    TA的帖子

    6

    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


    36

    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形,所以编译就也是不能通过的。

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


    36

    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};

    结果还是不通过


    36

    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);


    }

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


    36

    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);
        }
    }




    913

    TA的帖子

    0

    TA的资源

    纯净的硅(初级)

    Rank: 4

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

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


    2983

    TA的帖子

    260

    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-6-19 14:09 , Processed in 0.268904 second(s), 18 queries , Gzip On, MemCache On.

    快速回复 广东十一选五开奖图 返回列表
  • 美国的本质和终极目的决定,和中国必定是始终不断战事硝烟。 2019-06-15
  • 端午将至,我们更加要严格自律,不能趁过节之际搞吃喝送礼、公车私用、公款旅游等,要严防不正之风反弹回潮。做好自己的分内之事,安分守己,加强自我管理和监督,严格遵守 2019-06-15
  • 熊猫启航计划即将启动 让世界聆听大熊猫声音 2019-06-03
  • 尽管管理层一任一任地换,但是以每年IPO数量的多少作为反映政绩的主要标志,而对于股市下跌、市值(包括国有股)损失、经济晴雨表失真、投资者利益巨亏等等,则不在考核 2019-05-31
  • 打倒控房抄者有理,去分房好! 2019-05-26
  • 90后女生抛下帝都生活 仅花了6万元建了一幢别墅! ——凤凰网房产 2019-05-26
  • 陈全国在新疆果业集团调研 2019-05-21
  • “神剧”不再横行,抗战剧回到正轨 2019-05-18
  • 【专题】打一场扶贫攻坚硬仗 河北在行动 2019-05-16
  • 河北千名贫困儿童脊椎健康救助公益活动正式启动 2019-04-23
  • “四好农村路”助力乡村振兴 城市道路增亮让回家路更明亮 2019-04-20
  • 中纪委:有干部不信马列信鬼神 触犯纪律信小圈子 2019-04-20
  • 鸟瞰“中国围屋之乡” 造型独特如城堡 2019-04-16
  • 先想好如何处理可能的危害,要有经济“卫国战争”的准备,要将困难多设想一点,想到了就不会很被动。 2019-04-16
  • 实现中华民族伟大复兴是近代以来中华民族最伟大的梦想(认真学习宣传贯彻党的十九大精神) 2019-04-13
  • 好运十一选五走势图 切尔西纽卡斯尔 大乐透开奖结果查询63 湖南快乐十分最后50期 湖南彩票中奖新闻 剑侠情缘2新剑侠情缘华面 apex英雄启动慢 王牌战士预约了怎么下载 幸运农场数字版 湛蓝深海APP下载 那不勒斯皇后金色 堡垒之夜手机版测试 开拓者vs雄鹿 一分快三计划中心 nba魔术尼克斯初盘分析 cs真人游戏视频