打印

程序编译后占用一头一尾地址;数组初始化出现Resricted Memory

[复制链接]
1996|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
febspring|  楼主 | 2007-3-8 13:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序编译后地址空间占用一头一尾;数组初始化不完整,出现Resricted Memory

我用的是MPLAB V7.50和HI-TECH 的PICC18 V9.50,芯片是18F6527。当在Project的PICC-18 Linker中不设置Specify offset for ROM时,编译后的地址空间如图1所示,程序占用了地址空间的一头一尾;而如果给Specify offset for ROM设置一便宜量时(例如0x40)编译后占用的地址空间如图2所示,这是为什么呢?我的所有程序都会出现这样的问题。而在MPLAB V7.30和HI-TECH 的PICC18 V8.35中却不出现这样的问题。因为我的FLASH要存多套程序,所以要求各程序占用的地址空间连续。

    另一问题是,当在Project 的Global中设置 Complie for MPLAB ICD时,数组data[64]和data1[1500]、data1[512]都能初始化;而不设置Complie for MPLAB ICD时,数组data1[1500]只能初始化到data[1456];而将data1[1500]长度设置为512时,只能只能初始化到data[469];设置长度为64时,只能初始化到data[20],等等;并且data1最后能初始化成功的地址都是EF3。
    最后是我的一各小程序,也出现了上述问题。请高手指教啊!
图1:
Psect Usage Map:   Psect    | Contents                           | Memory Range  | Size ----------|------------------------------------|---------------|--------------  init     | Initialization code                | 0000h - 003Bh |   60 bytes    end_init | Initialization code                | 003Ch - 003Fh |    4 bytes    text     | Program and library code           | B6AAh - B7A3h |  250 bytes    ibigdata | Large initialized RAM variables (R | B7A4h - BD7Fh | 1500 bytes   ----------|------------------------------------|---------------|--------------  param    | Parameter auto blocks              | 00FDh - 00FFh |    3 bytes             |                                    |               |                bigdata  | Large initialized RAM variables    | 08D7h - 0EB2h | 1500 bytes    bigbss   | Large RAM variables                | 0EB3h - 0EF3h |   65 bytes             |                                    |               |                temp     | Temporary RAM data                 | 0000h - 0001h |    2 bytes   ----------|------------------------------------|---------------|--------------

图2:
Psect Usage Map:   Psect    | Contents                           | Memory Range  | Size ----------|------------------------------------|---------------|--------------  init     | Initialization code                | 0040h - 0079h |   58 bytes    end_init | Initialization code                | 007Ah - 007Dh |    4 bytes    ibigdata | Large initialized RAM variables (R | 007Eh - 0659h | 1500 bytes    text     | Program and library code           | 065Ah - 0753h |  250 bytes   ----------|------------------------------------|---------------|--------------  param    | Parameter auto blocks              | 00FDh - 00FFh |    3 bytes             |                                    |               |                bigdata  | Large initialized RAM variables    | 08D7h - 0EB2h | 1500 bytes    bigbss   | Large RAM variables                | 0EB3h - 0EF3h |   65 bytes             |                                    |               |                temp     | Temporary RAM data                 | 0000h - 0001h |    2 bytes   ----------|------------------------------------|---------------|--------------   
#include <pic18.h>
#include <pic18fxx22.h>

void Init_SP2539(void);
void delay(unsigned int i);
void sciint(void);
void Send_Char(unsigned char data);
volatile unsigned char data[64];
unsigned   char data1[1500]={0};
unsigned char temp;
void main ()
{  
   unsigned char i=0;
   unsigned char j=0; 
   sciint();//SCI部件初始化子程序
   delay(1400);
   Init_SP2539();
   delay(1000);
      while(1)
  {
     while(RC1IF==0);  //接收数据
        data=temp=RCREG1;
        while(TRMT==0);  //将接收的数据发送出去
     TXREG1=data;
      if(i==64) break;i++;
      delay(100);
   } 
}
void Init_SP2539()
{   
    RC5=1;
    RC4=0;
    RC3=1;
        delay(40);
          TXREG1=0X04;  //禁止看门狗
          delay(40);
          TXREG1=0X15;  //子串口2波特率加倍,并禁止子串口3收发数据
          delay(40);
          TXREG1=0x23;  //置子串口2波特率分频系数为1
          delay(40);
    //发送地址为010B,选择子串口2
    RC5=0;
    RC4=1;
    RC3=0;
    RC2=0;
    RC1=1;
    RC0=0;
}
void delay(unsigned int i)
{
    while(i--);
}
void   sciint(void)
{    
     //TRISC6=0;  //RC6 为TX
     //TRISC7=1;  //RC7 为RX
     TRISC=TRISC|0X47;              //RC0,RC1,RC2,RC7置1,设置为输入
     TRISC=TRISC&0X47;             //RC3,RC4,RC5,RC6置0,设置为输出
     SPBRG1=16;  //波特率为9600
     TXSTA=0x24;//0010 0100 异步高速方式传输8bit数据
     RCSTA=0x80;//1000 0000 SPEN=1;允许串行口工作
     TXEN=1;  //允许发送
     CREN=1; //允许数据接受
     PIR1=0X00;
     PIE1=PIE1|0X20;
     RC1IP=1;
     //INTCON=0;//清中断
}
void Send_Char(unsigned char data)
{
    while(!TX1IF);
    TXREG1=data;
    delay(250);        
}
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

0

粉丝