|
本帖最后由 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)
- {
- }
复制代码
|
|