先看一个没有做任务调度的XY轴复位的程序A:
//XY轴复位
unsigned int XYReset(unsigned char reset)
{
static unsigned char operation = STEP1;
static unsigned int baseTime;
if(reset == TRUE)
{
operation = STEP1;
}
switch(operation){
case STEP1:
sm_run(SM101,3200); //步进电机SM101运动3200步
operation = STEP2;
break;
case STEP2:
if(sm_state[SM101]==SM_STOP)
{ //3200步运动完成
baseTime = systemTime; //开始延时
operation = STEP3;
}
break;
case STEP3:
if(Timer(baseTime,500)==TRUE)
{ //延时500ms完成
sm_run(SM102,3200); //步进电机SM102运动3200步
operation = STEP4;
}
break;
case STEP4:
if(IsSensorOn(X101))
{
sm_stop(SM102);
return TRUE;
}
else if(sm_state[SM102] == SM_STOP)
{
return -2; //动作报错
}
break;
default:break;
}
return 0; //动作正在运行
}
下面增加任务调度的XY轴复位的程序B:
//XY轴复位
void XYReset()
{
switch(GetStep())
{
case STEP1:
sm_run(SM101,3200);
wait_sm_stop(SM101,STEP2);//任务切换,让出当前的运行权限,直到SM101电机停止后切换回来
break;
case STEP2:
wait_time(500,STEP3);//任务切换 500ms后切换回来
break;
STEP3:
find_sensor(SM102,3200,X101,STEP4,STEP_ERROR);//任务切换,传感器感应 电机停止后回来
break;
STEP4:
set_ation_ok(); //正确结束当前的动作任务,退出就绪队列
break;
STEP_ERROR:
set_error("SM102电机丢步");//错误结束当前动作任务,退出就绪队列
break;
}
}
程序A和程序B的共同点:
- 都有耗时操作:电机运动,等待传感器状态变化,延时等。
- 使用switch case做状态转换
- 都是非阻塞,没有死等卡在当前的函数,系统其它函数也可以运行.
程序A程序B的不同点:
- 程序A的局部变量多,程序B要简短,代码行数只有程序A的56%
- 程序B的电机状态 传感器状态 时间状态都是系统管理查询的,极大的提高了代码的复用,因为一个项目一般都有几十个动作动作函数.
- 程序B没有if else都是函数调用,逻辑清晰,更接近自然表达.
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
传感器
+关注
关注
2548文章
50652浏览量
751789 -
单片机
+关注
关注
6032文章
44513浏览量
632745 -
电机
+关注
关注
142文章
8928浏览量
145061 -
代码
+关注
关注
30文章
4741浏览量
68326
发布评论请先 登录
相关推荐
单片机工控板
,指示灯,计数器,拨码开关)如果用PLC成本太高,即使时最入门的也不是太合算,而且还需要自备24V开关电源,对配线也是个难题,就有这个一个想法,可对单片机了解甚少,还望对如上所列给予指点1.能否实现2.开发这个通用的班子费用和周期3.有意向合作开发的mail至:leon51717@163.com
发表于 03-18 14:31
实用单片机工具应用程序合集免费下载
本文档的主要内容详细介绍的是超级单片机工具软件应用程序合集免费下载包括了:51波特率计算应用程序,超级单片机工具软件,单片机小精灵。
发表于 04-28 16:24
•33次下载
单片机工控实现任务执行管理
前面写了switch case做任务调度的应用,这边写一下如何实现.像一般的RTOS一样都有一个任务控制块(TCB)列表来管理所有的任务,所以这里也需要一个结构体来管理动作任务,这里叫做ACB吧.
单片机工控事件
单片机工控通常有延时,电机状态,传感器状态等通用耗时操作,业务程序查询这些状态,就会产生大量的冗余代码,不简洁.使用事件则是把这些通用操作丢给系统去处理,系统操作完成后,则运行业务程序的下一个Step.
51单片机工程模板创建方法
本教程将向大家介绍如何使用KEIL C51 软件以及如何创建51 单片机工程。通过本教程的学习,让大家创建属于自己的51 单片机工程模板,为后面学习51 单片机编程做好铺垫。
发表于 07-15 15:27
•4754次阅读
评论