注意其中的OSTimeTick()函数即时钟节拍服务函数
定时器每一ms进入一次ISR中断,在中断中调用OSTimeTick()函数
OSTimeTickTick()完成了两件事情:1,给任务计数器OSTime加一,2,遍历任务控制块链表中的所有任务控制块,把各个任务控制块中用来存放任务延时时限的OSTCBDly变量减一,并使该项为0,同时又不使被挂起的任务进入就绪状态。
简单地说,函数OSTimeTick()的任务就是在每个时钟节拍了解每个任务的延时状态,是其中已经到延时时限的非挂起任务进入就绪状态
观察到OSTimeTick()函数中调用了OSTimeTickHook()函数
即每1ms进入一次硬件中断都调用一次OSTimeTickHook()函数
为了方便应用程序设计人员能在系统调用函数中插入一些自己的工作,ucos在OS_CPU.C中提供了时钟节拍服务函数的钩子函数OSTimeTickHook()等一共10个钩子函数。
OSTimeTickHook()可以记录一共进入时钟节拍中断的次数,类似于一个中断处理程序,设置一个全局变量Hook函数中累加(每1ms加一),加到一定量时,FLAG置位,然后用户任务查询FLAG执行操作
书中关于这方面的例子即是这个意思 |