搜索
bottom↓
回复: 10

求教 用keil编译51出现超出地址空间是怎么回事、

[复制链接]

出0入0汤圆

发表于 2014-6-22 10:34:32 | 显示全部楼层 |阅读模式
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  ?_STRNCPY?BYTE
    SEGMENT: ?DT?_STRNCPY?STRNCPY
Program Size: data=230.0 xdata=0 code=6665
出现这个错误,问题的关键是在主函数里面我只写了一个点亮LED灯的,
这就是我的所有.c和.h文件。
这到底是为什么啊?
求大神指导。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2014-6-22 11:59:38 | 显示全部楼层
但是如果在程序里面加入一大段代码的话,似乎就不会超出地址空间。。
就像:
void main(void)
{
        //uchar error_num = 0;       
          init_5110();
                GPS_Init();   //初始化GPS     
       
//        Uart_Init();  //初始化串口

//        rev_stop=0;
//        REV_NO;
/*        while(1)
        {
        /*        if (rev_stop)   //如果接收完一行         
                {
                        TR0 = 1;   //开启定时器         
                        REV_YES;
                        if (change_page % 2 == 1)  //换页     
                        {
                                if (GPS_GGA_Parse(rev_buf, &GPS))  //解析GPGGA      
                                {
                                        GGA_YES;
                                           //
                                        error_num = 0;
                                        gps_flag = 0;
                                        rev_stop  = 0;
                                        REV_NO;
                                }
                                else
                                {
                                        error_num++;
                                        if (error_num >= 20) //如果数据无效超过20次               
                                        {
                                                GGA_NO;
                                                error_num = 20;
                                                GPS_Init();     //返回初始化            
                                        }
                                        gps_flag = 0;
                                        rev_stop  = 0;
                                        REV_NO;
                                }

                        }
                        else
                        {
                                if (GPS_RMC_Parse(rev_buf, &GPS)) //解析GPRMC         
                                {
                                        RMC_YES;

                          //显示GPS第一页信息         
                                        error_num = 0;
                                        gps_flag = 0;
                                        rev_stop  = 0;
                                        led1 = 1;       
                                }
                                else
                                {
                                        error_num++;
                                        if (error_num >= 20) //如果数据无效超过20次               
                                        {
                                                RMC_NO;
                                                error_num = 20;
                                                GPS_Init();     //返回初始化         
                                        }
                                        gps_flag = 0;
                                        rev_stop  = 0;
                                        REV_NO;
                                }
                        }
                }*/
        //}
}


/*void timer0(void) interrupt 1
{
        static uchar count = 0;
        TH0 = 0x3c;
        TL0 = 0xb0;
        count++;
        if (count == 200)  //2*5秒钟   
        {
                count = 0;
                change_page++;  //换页
                if (change_page == 10)
                        change_page = 0;
        }       
}  */


/*void Uart_Receive(void) interrupt 4
{
        uchar ch;
        ES = 0;
        if (RI)
        {
                ch = SBUF;     
                if ((ch == '$') && (gps_flag == 0))  //如果收到字符'$',便开始接收           
                {
                        rev_start = 1;
                        rev_stop  = 0;
                }
       
                if (rev_start == 1)  //标志位为1,开始接收            
                {
                        rev_buf[num++] = ch;  //字符存到数组中           
                        if (ch == '\n')     //如果接收到换行           
                        {
                                rev_buf[num] = '\0';
                                rev_start = 0;
                                rev_stop  = 1;
                                gps_flag = 1;
                                num = 0;
                        }
                }
        }
        RI = 0;         //RI清0,重新接收            
        ES = 1;       
}
  */
这又是咋回事。。

出0入0汤圆

 楼主| 发表于 2014-6-22 12:05:27 | 显示全部楼层
这就是那个程序

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入42汤圆

发表于 2014-6-22 12:20:44 | 显示全部楼层
你用的LED太大了,用了太大太多的LED,就会占太多的内存,用0201贴片LED吧,会比原来少占90%的内存。

出0入0汤圆

 楼主| 发表于 2014-6-22 12:27:12 | 显示全部楼层
cocom 发表于 2014-6-22 12:20
你用的LED太大了,用了太大太多的LED,就会占太多的内存,用0201贴片LED吧,会比原来少占90%的内存。 ...

这位兄弟说的是极好!讲的是相当有道理啊!

出0入0汤圆

发表于 2014-6-22 13:39:47 | 显示全部楼层
.c .h文件也是要占空间的 可以考虑把芯片型号改为55 如果你芯片rom够大的话

出0入34汤圆

发表于 2014-6-22 15:01:46 | 显示全部楼层
小小工大 发表于 2014-6-22 12:27
这位兄弟说的是极好!讲的是相当有道理啊!

楼主用到了 XDATA 而 Memory Model 又设到小模式去了,改改配置就好了!...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-6-22 16:54:10 | 显示全部楼层
xyz543 发表于 2014-6-22 15:01
楼主用到了 XDATA 而 Memory Model 又设到小模式去了,改改配置就好了!...  

...

  
可是你看这个程序里面也只是选择small 模式,他也是定义了Xdata,我就是照这个程序改的,只是换了个显示的。然后就出现这个问题。。
求解答~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-6-22 16:56:47 | 显示全部楼层
xyz543 发表于 2014-6-22 15:01
楼主用到了 XDATA 而 Memory Model 又设到小模式去了,改改配置就好了!...  

...

额额,还有个问题麻烦你,为什么你编译出来没有警告?我编译之后就是这样

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入34汤圆

发表于 2014-6-22 21:04:10 | 显示全部楼层
小小工大 发表于 2014-6-22 16:54
可是你看这个程序里面也只是选择small 模式,他也是定义了Xdata,我就是照这个程序改的,只是换了个显 ...

很抱歉,我没有下载您的这程序来帮您 Check,因为目前是假期,我只想尽可能的先抛开这些东西。

而选到了那个大模式是我向来测试程序的一个习惯,选到后才知道您有调用到 XDATA,而为何 XDATA 才 233 个就发生问题这我不是很了解,尚请见谅。

出0入34汤圆

发表于 2014-6-22 21:16:33 | 显示全部楼层
小小工大 发表于 2014-6-22 16:56
额额,还有个问题麻烦你,为什么你编译出来没有警告?我编译之后就是这样 ...

嗯,这个嘛...一言难尽,说实在的我是使用了一些偏门的方法了。
首先我没有安装 C51 v9.xx 版,我目前使用的是 C51 v8.12 版。
而您的程序是还有些问题要处理,但我都先使用 Build All 后再使用 Build 就没有错误发生了,而仍有警告就先设置屏闭掉它即可 Build 成功。
您觉得如何呢?这应该算是偏方吧?!哈~   我认为坛内肯定有许多人有能力能帮您一步步的来解决您的问题及解答您的疑问了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 02:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表