打印

关于时间片轮转法的疑问

[复制链接]
5675|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
happystar|  楼主 | 2007-2-28 18:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好啊,我的单片机有好几个任务,想实现他们之间实时问题。考虑用时间片轮转法来调度他们。因为我不考虑移植别的OS了,所以只好自己写调度程序了。但是问题是:要想实时,选用的时间片不能保证每个任务都能执行完毕。比如:任务1和任务2在这个时间片内都没有完成,那么怎么来保护它们的上下文呢?在网上看大家写的一些51小调度系统也没有怎么明白。
希望各位前辈指导,谢谢拉。

相关帖子

沙发
谈的元| | 2007-2-28 19:30 | 只看该作者

将任务撤成更小的呀

使用特权

评论回复
板凳
happystar|  楼主 | 2007-2-28 20:51 | 只看该作者

to 谈的元

这样不好啊,失去了时间片调度的意义了。在我这个程序里也不好实现呢。

使用特权

评论回复
地板
sharpxcb| | 2007-2-28 21:59 | 只看该作者

不妨试试

  把你的整个程序做成几个MS内一个周期的实时循环,各任务的时间片以累加计数器的方式判断时间到否,那样更短时间内的实时循环运行!

使用特权

评论回复
5
happystar|  楼主 | 2007-2-28 22:37 | 只看该作者

to sharpxcb

哦,有点明白了。比如我目前本来有2个任务。
task1:键盘扫描,完成时间大概需要30ms。
task2:采集处理数据,完成时间大概需要100ms。
那么我把时间片定为35ms,则task1能在一个时间片完成任务。而把task2分成3个任务(task2,task3,task4),time=0是全局变量,taskn_flag为任务执行的标志
在定时器T0中断里中,每35ms中断一次
void time0_isr()interrupt1{
......
++time;
if(time==1)task1_flag=1;
else if(time==2)task2_flag=1;
else if(time==3)task3_flag=1;
else if(time==4)task4_flag=1;
else time=0;
.......

void main(){
  if(task1_flag){
  ....
  }
  if(task1_flag2).....

但是如果先前的task2执行时间是500ms呢?这样是不是要分成好多任务呀?而且这样键盘扫描频率也太低了。
但是可以在这些分成的小任务里加上扫描任务如if(time==20)task1_flag=1; 
我想这样行不通呀/

使用特权

评论回复
6
forthlab| | 2007-3-1 10:16 | 只看该作者

采用状态机的原理,状态细分一下

用状态机,键盘扫描只要很CPU短的时间。

使用特权

评论回复
7
fsaok| | 2007-3-2 05:50 | 只看该作者

.

键盘扫描根本就用不着一个时间片去处理它

使用特权

评论回复
8
xwj| | 2007-3-2 08:21 | 只看该作者

是的,应该采用状态机

以尽量释放CPU时间

键盘扫描都要30mS???
感觉LZ还没掌握方法哦

使用特权

评论回复
9
eagle758| | 2007-3-2 08:30 | 只看该作者

状态机的原理

大虾们:
   解释下什么是状态机的原理?

使用特权

评论回复
10
工控秀才| | 2007-3-2 08:48 | 只看该作者

会用就行了,管它什么机

我用过非抢占式和抢占式的操作系统,现在写小程序一般也用分时调用,感觉处理起来方便多了!

使用特权

评论回复
11
computer00| | 2007-3-2 09:27 | 只看该作者

任务切换保护上下文会需要很多内存开销的

键盘扫描可以使用定时器中断去处理。

使用特权

评论回复
12
IC1008| | 2007-3-2 09:52 | 只看该作者

按键扫描30MS 你不是把等待也做进去吧

那么时间片还有什么意义 呵呵

使用特权

评论回复
13
1dqmoon| | 2007-3-2 22:27 | 只看该作者

键盘扫描不算一个单独的进程

用其他方法实现键盘功能吧,没必要使用时间片来轮转

使用特权

评论回复
14
happystar|  楼主 | 2007-3-2 22:45 | 只看该作者

谢谢楼上各位指教

我是拿键盘扫描打个比方的,意思是一个30MS的任务。我里边的键盘和数码管扫描都是放在T0中断里的,键盘消陡的20MS延时也是用于扫描那些数码管,而数码管的延时用于主程序执行时间片的。还有一些别的中断,置位了一些标志。在主程序里我参照了一些状态机的概念。但是老树写的那片**实在是难以理解啊。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

409

帖子

1

粉丝