另一个指针所指向的变量发生了改变

[复制链接]
1931|38
 楼主| supernan 发表于 2022-1-5 23:24 | 显示全部楼层 |阅读模式
我定义了两个指针变量 其中一个指针所指向的变量改变后我作了一次无关指针的循环函数,但是我发现另一个指针所指向的变量发生了改变。
chenjunt 发表于 2022-1-5 23:26 | 显示全部楼层
循环体是否会真的影响指针所指向的变量
renyaq 发表于 2022-1-5 23:30 | 显示全部楼层

我也说一句fc改成fd试试
 楼主| supernan 发表于 2022-1-5 23:32 | 显示全部楼层
如果是 那如何避免
dengdc 发表于 2022-1-5 23:36 | 显示全部楼层
循环函数看看
 楼主| supernan 发表于 2022-1-5 23:38 | 显示全部楼层
void bun()
{
   
    unsigned int w;
    RC6=1;
    PORTD=0X87;
    RC6=0;
    RC7=1;
    PORTD=0X8f;
    RC7=0;
    for(w=6272;w>0;w--)
    {
        PORTF=0XA0;
        delayus();
        PORTF=0XAA;
        delayus();
    }
}
 楼主| supernan 发表于 2022-1-5 23:41 | 显示全部楼层
不是这里引起的
huangchui 发表于 2022-1-5 23:43 | 显示全部楼层
很抱歉, 我可能学的是假的指针...
zwll 发表于 2022-1-5 23:46 | 显示全部楼层
unsigned int *p, 这样的才是指针吧?
 楼主| supernan 发表于 2022-1-5 23:47 | 显示全部楼层

unsigned char fx;
                TXREG2=0x0f;
                while(!TRMT2);
                sum_re=0;
                xor_re=0;
                add=ss[2];
                ref=3;
                bef=*p;
                def=*r;
                bbef=*pp;
                ddef=*rr;
                cef=*q;
                if(ss[0]==4)
                {
                    LPD();
                }
                for(fx=ss[0];fx>0;fx--)
                {
                    i=(unsigned char*)add;
                    *i=ss[ref];
                    ref++;
                    add++;
                }
                return;
 楼主| supernan 发表于 2022-1-5 23:50 | 显示全部楼层
这是主要部分 其实是串口接收到多个数据 以校验码结尾的通讯协议 我这里是成功接收后所进行处理的代码 可能比较乱所以开头没有放出来
 楼主| supernan 发表于 2022-1-5 23:52 | 显示全部楼层
void LPD()//远近
{
    if(ss[2]==0x28)
    {
        if(cef==0x20&&ss[3]==0x00)
        {
            sideinit();
        }
        if(cef==0x00&&ss[3]==0x20)
        {
            bun();
        }
    }
}
wuhany 发表于 2022-1-5 23:53 | 显示全部楼层
你有什么打算呢?或者你想知道什么?
 楼主| supernan 发表于 2022-1-5 23:55 | 显示全部楼层

我是验证*q 然后发送6000多个脉冲(用for循环) 发送结束发现*p和*r发生了改变
 楼主| supernan 发表于 2022-1-5 23:57 | 显示全部楼层
所以想问下大家如何避免循环函数对指针的改变
juventus9554 发表于 2022-1-6 23:01 | 显示全部楼层
你这是高级程序员的做法啊..
llljh 发表于 2022-1-6 23:03 | 显示全部楼层
对单片机的开发而言, 资源非常有限, 只有1~2个间接寻址寄存器,指针用得过多, 反而可能不效率..
 楼主| supernan 发表于 2022-1-6 23:06 | 显示全部楼层
如果你用的芯片和调试器支持的话,你可以使用高级断点来在对特定ram有改变的时候停下来
huangchui 发表于 2022-1-6 23:10 | 显示全部楼层
嗯,这样可以帮你发现是谁干了坏事
jlyuan 发表于 2022-1-6 23:12 | 显示全部楼层
有可能是数组越界了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

730

主题

10412

帖子

6

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