|  | 
 
| 本帖最后由 shendan 于 2013-10-3 14:58 编辑 
 uCOS-III可以为应用程序提供定时器的功能,对应的源文件就是os_tmr.c。
 定时器本质上是设置一个计数值,当计数值减为0的时候,就调用回调函数。在这里需要注意的是回调函数里面一定不能是有那个阻塞调用函数。
 定时器通过设置可以有三种模式:单次延时触发,周期延迟触发,周期无延迟触发。
 单次延时触发:定时器设置此模式后,启动定时器,会延时一段时间后触发,跳转到回调函数里面去执行。
 周期延迟触发:定时器设置为这个模式后,启动定时器,会延时设置的一段时间后跳转到回调函数里面执行,执行完等待周期延迟值,周期性仅需回调函数。
 周期无延迟触发:定时器设置为这个模式后,启动定时器,延迟周期值,后跳转到回调函数中执行。
 
 uCOS-III中存在一个定时器任务,所有定时器启动时都会把回调函数放入到这个定时器任务的列表中,时间一到,就执行。因此定时器任务的优先级不宜过低。在定时器任务执行回调函数的时候,调度器是关掉的,因此即使在执行回调函数的过程中发生了中断,中断返回的时候还是会回到回调函数中。
 例子如下:
 
 复制代码OS_TMR t;
void Task(void *p_arg)
{
OS_ERR err;
(void)&p_arg;
while(DEF_ON)
{
OSTmrCreate(&t,
"the timer"
10,
100,
OS_OPT_TMR_PERIODIC,
t_callback,
0,
&err);
OSTmrStart(&t, &err); 
} 
}
void t_callback(void *p_arg)
{
}
 
 | 
 |