我在使用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
此帖出自
小平头技术问答
我之前直接把全局变量的这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形,所以编译就也是不能通过的。
我再尝试看看宏定义法,改一下函数。
一周热门 更多>