2019-10-15 17:38发布
lvkanger 发表于 2017-1-11 09:42 同问,裸奔不等着还能干吗!
vention 发表于 2017-1-11 11:39 不想阻塞
vention 发表于 2017-1-11 11:38 嗯,就是想不要阻塞。但是不知道如何入手
最多设置5个标签!
不想阻塞
那对于裸奔来讲,你那延时有什么意义呢?
我有这样一种比较笨的做法,你可以参考一下,比如,有这样一个任务。
void Task1( void )
{
XXX;
delayms(10);
YYY
}
用状态机的写法,就可以这样,假设现在的时钟节拍设为1ms,给Task1定义一个变量Task1Timer。
void Task1( void )
{
switch ( step )
case 0:
{
XXX;
step = 1;
break;
}
case 1:
{ if( 10 == Task1Timer )
{
YYY;
step = 0;
Task1Timer = 0;
{
break;
}
default:
...
}
void Timer_ISR( void )
{
Task1Timer++;
}
大概就是这么个意思,个人认为,裸奔与OS的本质区别还是在任务调度上,OS的每个任务有虚拟堆栈,可以实现自动调度。状态机是共享堆栈,所以要手动调度,编写程序要复杂一些,难懂一些,剩下的IPC机制其实是OS与状态机共有的。
极小资源单片机,无法使用OS,只能使用状态机方式来实现多任务。
第一: 你得有事做才能行.
第二:如果那件事在10MS内做完了还好,
如果做不完,你10MS后要做的事,MCU也要做, 这样就变成两个事情要做,如何决择?
这样的情况:用系统就好解决.如果自己写,写出来的也会类似系统的才能解决.
一周热门 更多>