ucos操作系统学习笔记(一)
1、关于在单核处理器中的死循环问题
如果在单核处理器操作系统的某个任务中加入这样一句话while(1){},那么此时的执行会是怎么样的呢,让我们分析下
首先,如果是单核处理器,碰到这样的情况处理器立即进入死循环状态,除非有中断,会跳入中断服务函数中执行,完了始终是死循环状态,那么这种情况下,操作系统会扮演什么样的角色?我觉得此时操作系统是无能为力的,因为操作系统无法获得处理器的使用权,因而也就不能执行任务的调度,比如在430这样的单片机中,如果出现while(1){}这样的语句,那么我们来分析下,在时间片轮转情形下处理器的执行情况。
在μC/OS中任务执行完后是要等待一个时钟滴答,然后在这一个时钟滴答中肯定会有时间片的轮转发生,那末,时间片中断发生程序进入时钟滴答中断服务函数中执行,调用OSTimeTick函数给任务控制块中的时间延时项减一,让时间延时项减到零的任务进入就绪态,等待执行
那么在目前的情形中,时间片轮转可以发生,同样也会调用OSTimeTick,但是就绪态任务无法执行,因为,操作系统无法得到处理器的使用权
2、关于诸如删除任务、改变任务优先级、任务延时等
事实上,在ucos中唯一能表征一个任务的特征的是任务的OS_TCB,即任务控制块,包含了任务的状态,优先级,延时等等信息,如果现在要挂起一个任务,那么首先应该是检查任务是否存在以及是不是空闲任务等等,在得到这些信息确认后,从就绪表中清除该任务,然后将此任务的任务状态置位OS_STAT_SUSPEND这样,当任务调度程序进行任务调度时,就会检查相应位来判断是否该被调度。这样就实现了任务的挂起,同样,在任务恢复时也是对相应位置位,从而使得能够被再次调度。