21ic问答首页 - 【C51奇怪BUG】
【C51奇怪BUG】
tyfk2021-12-29
#ifndef FunP
typedef void(*FunP)(); //无返回无参数函数指针宏定义
#endif
typedef enum
{
InitState,
Press,
Doublt,
WaitRelease,
Release
}IoState; //按键状态枚举
单片机是CH558,51内核的单片机。程序如图,如果加printf,不管加哪里,程序都不会出问题。不加This->state=WaitRelease数据会出错。This->state是枚举。求大神指点
typedef void(*FunP)(); //无返回无参数函数指针宏定义
#endif
typedef enum
{
InitState,
Press,
Doublt,
WaitRelease,
Release
}IoState; //按键状态枚举
单片机是CH558,51内核的单片机。程序如图,如果加printf,不管加哪里,程序都不会出问题。不加This->state=WaitRelease数据会出错。This->state是枚举。求大神指点
赞0
在中断服务函数之中调用这一段?
评论
2021-12-30
赞0
评论
2021-12-29
@tyfk :谢谢楼主分享
@地瓜patch :This->pDoublt()改为(*This->pDoublt)()
@地瓜patch :估计指针传错了
楼主讲讲具体哪里的问题啊,谢谢
赞0
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;
评论
2021-12-29
错误数据是个很大的随机数字,不是枚举的0123等等
您需要登录后才可以回复 登录 | 注册