【deven】对uCOS-II中定时器的改进
作者:deven
deven.yculblog.com
硬件环境:LPC2220;键盘采用ZLG7290,中断信号接EINT3,用IIC读取按键数据;编码器采用1000个信号的,Z相接EINT0,A相接CAP1.2,B相接CAP1.3。
一。发生了什么问题
不知道为何,在按键中断中POST一个信号量,虽然在任务中得到了响应,但是跟踪发现,切换到任务之后并没有执行,而是不停地进入timer0中断。键盘响应有延迟是可以忍受的,但是在其他中断处理中就可能影响到系统性能。例如我用光电编码器的时候信号触发比较频繁,从中断到任务中得到实际响应会变慢。
为了能及时响应任务,并且减少中断触发频率,必须对系统的定时器进行改进。
二。时钟中断的作用
起初看到这个时钟中断就想当然的任务是操作系统调度所必须的,然后进一步思考后发现错了。在一般的分时系统中,为了实现时间片的轮转,在一定时间后必须将处理器切换到下一个任务,因此必须有定时器定时地切换任务。而在uCOS-II这样的优先级调度的系统中,是在高优先级任务放弃cpu之后才进行调度进入低优先级任务的。
在uCOS-II系统中时钟中断又起到了一个什么样的作用呢?先来看看任务在什么样的情况下放弃cpu,在什么样的情况下得到cpu。
放弃cpu可以由OSSemPend、OSMutexPend、OSFlagPend、OSMboxPend、OSQPend、OSTimeDly、OSTimeDlyHMSM几个函数触发。这里最后两个函数是跟时间相关,其他函数都是跟事件相关。所以一个cpu要再次得到执行&#x