winnie 发表于 2009-3-28 16:08:11

如何找回16F877A"消失"的RAM?

用16F877A开发程序(可以用ICD2 debug,好用啊),最后的产品用16F74。开始一切正常,随着程序的扩大,在编译时发现 用16F74编译通过,切换到16F877A后编译报错。*** Error 74 "E:main.c" Line 2695(0,1): Not enough RAM for all variables
      16F877A的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]
查看完整版本: 如何找回16F877A"消失"的RAM?