单片机工控通常有延时,电机状态,传感器状态等通用耗时操作,业务程序查询这些状态,就会产生大量的冗余代码,不简洁.使用事件则是把这些通用操作丢给系统去处理,系统操作完成后,则运行业务程序的下一个Step.
** 延时不使用事件**
switch(step)
{
case STEP1:
baseTime = systemTime;
step= STEP2;
break;
case STEP2:
if(systemTime>(baseTime+500))
{
..
}
break;
}
延时使用事件:
switch(step)
{
case STEP1:
WaitTime(500,STEP2); //向系统请求延时500ms,让出程序运行权限,500ms后运行到STEP2
break;
case STEP2:
break;
}
不使用事件查询传感器状态
switch(step)
{
case STEP1:
if(IsSensorOn(X01))
{
StopSM(SM101);
}
break;
}
使用事件的查询传感器状态
switch(step)
{
case STEP1:
//向系统请求查询传感器X101,传感器感应后跳到STEP2
WaitSensorOn(X101,STEP2);
break;
}
不使用事件的电机运动
switch(step)
{
case STEP1:
RunSM(SM101,2000); //SM101运行2000步
step = STEP2;
break;
case STEP2:
if(IsSMStop(SM101))
{
}
}
使用事件的电机运动
switch(step)
{
case STEP1:
RunSM(SM101,2000);
//请求系统查询电机状态
WaitSM(SM101,STEP2);
break;
}
没有使用事件的找传感器的电机运动
switch(step)
{
case STEP1:
RunSM(SM101,2000);
step = STEP2;
break;
case STEP2:
if(IsSensorOn(X101))
{
StopSM(SM101);
return 1;
}
else if(IsSMStop(SM101))
{
return -1;
}
}
使用事件的找传感器电机运动
switch(step)
{
case STEP1:
//电机运动2000步,请求传感器状态 电机事件
FindSensor(SM101,2000,X101,STEP2,STEP_ERROR);
break;
case STEP2:
SetActionOk();
break;
case STEP_ERROR:
SetError("SM101电机丢步-SM101/X101");
break;
}
从上面的案例可以看出使用事件的程序几乎没有if else 程序更加口语化.事件实现的基本原理为:
- 把事件的参数(事件类型,延时时间,电机编号,电机步数,传感器编号)压入任务栈,下一步骤也就是PC指针也压入任务栈。
- 让出业务程序的运行权限到系统的通用事件运行,实现方式运行的函数指针指向事件处理的函数
- 事件处理程序查询相应的状态变化
- 运行权限重新切回业务程序,运行函数指针指向业务函数指针,Step出栈.
//切换到事件处理函数
CurrentAction->ActionCallback = CurrentAction->EventCallback;
//系统循环
while(CurrentAction!=NULL)
{
CurrentAction->ActionCallback();
DelFinishAction();
CurrentAction = CurrentAction->NextAction;
}
//切回业务App
ThisAction->nStep = nStep;
ThisAction->ActionCallback = ThisAction->AppCallBack
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
传感器
+关注
关注
2550文章
51035浏览量
753074 -
单片机
+关注
关注
6035文章
44554浏览量
634635 -
代码
+关注
关注
30文章
4779浏览量
68521 -
step
+关注
关注
0文章
42浏览量
20461
发布评论请先 登录
相关推荐
单片机工控板
,指示灯,计数器,拨码开关)如果用PLC成本太高,即使时最入门的也不是太合算,而且还需要自备24V开关电源,对配线也是个难题,就有这个一个想法,可对单片机了解甚少,还望对如上所列给予指点1.能否实现2.开发这个通用的班子费用和周期3.有意向合作开发的mail至:leon51717@163.com
发表于 03-18 14:31
实用单片机工具应用程序合集免费下载
本文档的主要内容详细介绍的是超级单片机工具软件应用程序合集免费下载包括了:51波特率计算应用程序,超级单片机工具软件,单片机小精灵。
发表于 04-28 16:24
•33次下载
单片机工控实现任务执行管理
前面写了switch case做任务调度的应用,这边写一下如何实现.像一般的RTOS一样都有一个任务控制块(TCB)列表来管理所有的任务,所以这里也需要一个结构体来管理动作任务,这里叫做ACB吧.
51单片机工程模板创建方法
本教程将向大家介绍如何使用KEIL C51 软件以及如何创建51 单片机工程。通过本教程的学习,让大家创建属于自己的51 单片机工程模板,为后面学习51 单片机编程做好铺垫。
发表于 07-15 15:27
•4858次阅读
评论