打印
[PIC®/AVR®/dsPIC®产品]

请教怎么节省RAM空间?

[复制链接]
1613|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
现在使用PIC16F1503,奇怪的是原来定义了一个
typedef  struct
     {
          U8 mode1 ;
         U8 value1 ;
        U8 value2 ;
       U8 value3;
      U8 mode2 ;
     } RXARRAY ;

RXARRAY TempRxArray[COUNT_ARRAY ];  定义了一个这样的全局结构体数组,COUNT_ARRAY = 7
但是这样编译之后出现以下错误提示:

好像提示没有足够空间提供给
RXARRAY TempRxArray[COUNT_ARRAY ];

后来把数组个数
COUNT_ARRAY = 6    改小之后,编译成功,提示如下:但是里面显示的程序空间和RAM空间还有很多空余,为什么上面数组数量就不够用呢


其中程序空间 Program space        used   4D4h (  1236) of   800h words   ( 60.4%)
RAM空间   Data space           used    5Dh (    93) of    80h bytes   ( 72.7%)

为什么最开始的数组空间不够?


沙发
yklstudent| | 2014-3-25 21:56 | 只看该作者
很明显跟你的处理数组部分的程序有关 导致的RAM爆了 要不楼主发出来看看 导致怎么使用的导致爆了

使用特权

评论回复
板凳
zwxhehe2012|  楼主 | 2014-3-26 10:44 | 只看该作者
本帖最后由 zwxhehe2012 于 2014-3-26 10:46 编辑

用到数组部分程序如下:
#define   COUNT_DATA        5
#define    COUNT_ARRAY      7

typedef  struct
     {
          U8 mode1 ;
    U8 value1 ;
    U8 value2 ;
    U8 value3 ;
    U8 mode2 ;
     } RXARRAY ;


U8 RxArray[COUNT_DATA];
  RXARRAY TempRxArray[COUNT_ARRAY ];


void Decode_Handle (void)
{
   TempRxArray[rx_num].mode1 = RxArray[0];
  TempRxArray[rx_num].value1= RxArray[1];
  TempRxArray[rx_num].value2= RxArray[2];
  TempRxArray[rx_num].value3= RxArray[3];
  TempRxArray[rx_num].mode2= RxArray[4];
  
  rx_num++;
  if( rx_num>=COUNT_ARRAY)
  rx_num = 0;
}

   U16 ad_value1 = 0 ;
   U8   ad_value2 = 0;
  
  void Handle_Packet (void)
{
    U8 value1= 0;
    U8 value2 = 0;
    U8 value3 = 0;
  
  if (done_num!=rx_num)
  {
    value1 =  TempRxArray[done_num].value1;
   value2 = TempRxArray[done_num].value2;
   value3 = TempRxArray[done_num].value3;
     done_num++;
  if(done_num>=COUNT_ARRAY)
  done_num= 0;
  
  }

    ad_value1 =  (20+value1 )*value2 ;
   ad_value1 = (U8)(value2/100);
   
   (ad_value2>=247) ? (ad_value2 =ad_value2 -247) :  (ad_value2 = 247-ad_value2 );
}




void main (void)
{
  ..............
  while (1)
  {
     if (RX_Packet (RxArray))    //  RX_Packet (RxArray)接收函数会把接收到的5个数据放到RxArray[COUNT_DATA]数组中
     Decode_Handle ();  //

     Handle_Packet();
   }

}


上面是关系到数组部分的程序,没有看出那里有问题,麻烦找一下导致RAM不足的问题?

使用特权

评论回复
地板
yewuyi| | 2014-3-26 17:18 | 只看该作者
1、使用了老的C编译器,出现超BANK现象。
2、有大量的共用局部变量等占用了内存空间
3、代码错误。
。。。。。。

使用特权

评论回复
5
nickyamw| | 2014-3-26 17:27 | 只看该作者
你可以把数组设定在某个BANK里,以前我也试过不设定的话,就放在了公共区域,导致超范围

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

48

帖子

1

粉丝