本帖最后由 东北小辉辉 于 2016-6-24 17:28 编辑
RT,小弟最近刚刚开始接触一些状态机和操作系统的书,有一个编程思路想来问一下大家。
我现在想实现一种时间触发的状态机调度模式,主函数打算用switch case来写,但是现在有一点想不通,就是如何处理一个运行时间比较长的任务?
举个例子,比如我现在的功能是用sim900发短信,这个应用,那么发短信之前,首先,发送AT指令,同步波特率,等待返回OK,然后发送ATE关闭回显,等待返回OK,之后还有设置文本模式等等,一直到最后把短信内容发送出去,这是一个完整的任务,假设运行时间为150ms,当然,程序语句的执行时间是很短的,主要时间浪费在了判断是否发送成功的那个OK上,假设这个接收到OK的时间是15ms,这里不能用while死等,因为我这里只有一个应用,我采用了休眠的方式,然后用一个时基定时器来唤醒。
这个任务我如何来进行状态划分?如果按照15ms的时间,分成case1到case10的话状态是不是太多了?如果某个任务需要运行1s的时候怎么办,难道要100个case,那样程序会很混乱,可读性也不好。
现在考虑的还是只有一个任务,不涉及和其他任务通信的功能,也不涉及外部到来的事件。
大致写一下程序的框架.
原本的顺序编程模式
void main( void )
{
while( 1 )
{
发送AT
等待接收OK
发送ATE
等待接收OK
...
等待接收OK
发送短信内容
}
}
现在我考虑的模式
void main( void )
{
while(1)
{
switch( state )
{
case 1:
{
发送AT
休眠
break;
}
case 2://时间到15ms
{
if( 接收到OK )
{
发送ATE
}
else
{
//发送失败
//异常处理
}
休眠
break;
}
...
case 10://时间到150ms
{
if( 接收到OK )
{
发送短信内容
}
else
{
//发送失败
//异常处理
}
休眠
break;
}
}
}
}
定时器中断
{
清中断
state++;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>