关于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 09:56
懒猫爱飞 发表于 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形,所以编译就也是不能通过的。

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

一周热门 更多>

相关问题

    相关文章