[STC单片机] 求助,单片机问题

[复制链接]
1356|7
 楼主| yixiao2000 发表于 2015-1-29 22:46 | 显示全部楼层 |阅读模式
本人编写的51单片机软件过程中,有如下一个函数:
unsigned char UART2_GetReceived(void)//报告已接收
{
        unsigned char pdata c;
       
        if(ReceiveLength2>0)       
        {
                c=ReceiveLength2;
                ReceiveLength2=0;
                return c;               
        }
    else
                return 0;
}
后来这个函数不再被主程序调用,我就把它删了,但删了后软件就不能正常运行,所以这感到很奇怪,为什么一个未调用的函数不能删掉呢?
我保留这个函数,但修改至如下,软件仍能正常运行:
unsigned char UART2_GetReceived(void)//报告已接收
{
        unsigned char pdata c;
        return 0;
}
我再把它改为如下所示,软件又不能正常运行了:
unsigned char UART2_GetReceived(void)//报告已接收
{
        return 0;
}
看来是unsigned char pdata c若的祸,可这个变量是函数内部变量,它被去掉后为什么会影响到软件的运行呢?
在下十分不解,请各们大侠相助!
cuya 发表于 2015-1-30 13:04 | 显示全部楼层
还是你的软件本身有问题, 估计有野指针,溢出等等之类的问题。
NE5532 发表于 2015-1-30 15:24 | 显示全部楼层
估计是内存地址侵略,就是上面说的溢出和野指针问题,如果有汇编混合编程的文件,也有可能造成这种内存地址冲突。你可以仿真看一下这个变量的值是多少,地址是多少,看有没有启发。
jinzhan0132 发表于 2015-1-30 15:28 | 显示全部楼层
帮顶,这种问题确实奇怪,也遇到过类似的。
 楼主| yixiao2000 发表于 2015-1-30 21:03 | 显示全部楼层
我的软件里面并没有汇编混合编程,也没有使用绝对地址,现在正在查内存地址侵略,但程序量比较大,查起来很头疼。
ningling_21 发表于 2015-1-31 09:09 | 显示全部楼层
还是程序本身有问题造成的
haishun66ni 发表于 2015-1-31 17:18 | 显示全部楼层
unsigned char pdata c;
unsigned char  c;
这个pdata 你为什么这样写,去掉不行么?
ayb_ice 发表于 2015-2-2 15:09 | 显示全部楼层
充分说明程序本身有问题,拿掉没用的代码后现象发生了变化而已,或者凑巧没有引起致使的问题

未调用的代码会影响数据覆盖分析(也就是说好多变量的地址都可能发生了变化),所以会影响功能
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

58

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部