如何找回16F877A"消失"的RAM?
用16F877A开发程序(可以用ICD2 debug,好用啊),最后的产品用16F74。开始一切正常,随着程序的扩大,在编译时发现 用16F74编译通过,切换到16F877A后编译报错。*** Error 74 "E:main.c" Line 2695(0,1): Not enough RAM for all variables16F877A的GPR(General Purpose Register)字节,而16F74的GPR为192字节,GPR多的反而会报错?
后来发现要在16F877A的定义部分 加入以下语句
#DEVICE *=16
将指针切换到到16位后,编译通过。
分析如下:
16F74的GPR分在bank0和bank1,所以只需要使用默认的8位指针即可寻址所有的GPR,共192字节。
而如果在16F877A上采用默认的8位指针,只能寻址bank0和bank1中的GPR,共176字节。
当程序需要的GPR数目介于176和192之间时,用16F74编译能通过而用16F877A编译通不过。
页:
[1]