打印

【C51奇怪BUG】

[复制链接]
1682|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tyfk|  楼主 | 2021-12-29 20:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#ifndef FunP
typedef void(*FunP)();   //无返回无参数函数指针宏定义
#endif


typedef enum
{
  InitState,
  Press,
  Doublt,
  WaitRelease,
  Release
}IoState;  //按键状态枚举




单片机是CH558,51内核的单片机。程序如图,如果加printf,不管加哪里,程序都不会出问题。不加This->state=WaitRelease数据会出错。This->state是枚举。求大神指点

使用特权

评论回复

相关帖子

沙发
tyfk|  楼主 | 2021-12-29 20:39 | 只看该作者

【C51奇怪BUG】

图片好像发不出来,出问题的程序段我重新发一下

case Press:                 //检测两次高电平,判断按键按下
            printf("key debug:T=%d",This->pressTimer);

            if(pin==PRESS)
            {
                if(This->pressTimer > 0) //双击检测
                {
                    This->pressTimer=0;
                    if(This->pDoublt!=NULL)
                        This->pDoublt();  //调用双击函数
                }                    
                else
                {
                    This->pressTimer=This->preTimeOut;  //设置检测双击间隔计时赋值
                    if(This->pPress!=NULL)
                        This->pPress();   //调用按键按下函数
                }
                This->state=WaitRelease;
            }
            else
                This->state=InitState;
            break;

使用特权

评论回复
评论
tyfk 2021-12-29 20:40 回复TA
错误数据是个很大的随机数字,不是枚举的0123等等 
板凳
tyfk|  楼主 | 2021-12-29 20:52 | 只看该作者

【C51奇怪BUG】

好吧  发现是函数指针问题

使用特权

评论回复
评论
地瓜patch 2022-1-4 15:21 回复TA
@tyfk :谢谢楼主分享 
tyfk 2022-1-3 22:20 回复TA
@地瓜patch :This->pDoublt()改为(*This->pDoublt)() 
dirtwillfly 2021-12-30 08:43 回复TA
@地瓜patch :估计指针传错了 
地瓜patch 2021-12-29 23:20 回复TA
楼主讲讲具体哪里的问题啊,谢谢 
地板
xch| | 2021-12-30 16:52 | 只看该作者
tyfk 发表于 2021-12-29 20:39
图片好像发不出来,出问题的程序段我重新发一下

case Press:                 //检测两次高电平,判断按键 ...

在中断服务函数之中调用这一段?

使用特权

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

本版积分规则

2

主题

7

帖子

0

粉丝