打印
[STC单片机]

求助,单片机问题

[复制链接]
1114|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 | 只看该作者
帮顶,这种问题确实奇怪,也遇到过类似的。

使用特权

评论回复
5
yixiao2000|  楼主 | 2015-1-30 21:03 | 只看该作者
我的软件里面并没有汇编混合编程,也没有使用绝对地址,现在正在查内存地址侵略,但程序量比较大,查起来很头疼。

使用特权

评论回复
6
ningling_21| | 2015-1-31 09:09 | 只看该作者
还是程序本身有问题造成的

使用特权

评论回复
7
haishun66ni| | 2015-1-31 17:18 | 只看该作者
unsigned char pdata c;
unsigned char  c;
这个pdata 你为什么这样写,去掉不行么?

使用特权

评论回复
8
ayb_ice| | 2015-2-2 15:09 | 只看该作者
充分说明程序本身有问题,拿掉没用的代码后现象发生了变化而已,或者凑巧没有引起致使的问题

未调用的代码会影响数据覆盖分析(也就是说好多变量的地址都可能发生了变化),所以会影响功能

使用特权

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

本版积分规则

14

主题

58

帖子

0

粉丝