/* 定时器的控制块 */
static rt_timer_t timer1;
static int cnt = 0;
/**
* 定时器1超时函数 即回调
*
* @param parameter
*/
static void timeout1(void *parameter){
rt_kprintf("periodic timer is timeout %d\n", cnt);
/* 运行第10次,停止周期定时器 */
if (cnt++ >= 9){
rt_timer_stop(timer1);
rt_kprintf("periodic timer was stopped! \n");
}
}
/*
* 函数名:timer_sample(void)
* 输入参数:无
* 输出参数:无
* 返 回 值:无
* 函数作用: 创建一个软件定时器 如果需要更细的us 需要使用硬件定时器 直接调用 timer_sample();
*/
int timer_sample(void){
/* 创建定时器1 周期定时器 */
//单次定时RT_TIMER_FLAG_ONE_SHOT、周期定时RT_TIMER_FLAG_PERIODIC、 硬件模式RT_TIMER_FLAG_HARD_TIMER、软件模式RT_TIMER_FLAG_SOFT_TIMER;
//time 定时器的超时时间,单位是时钟节拍 这里是1ms 最小单位也是1ms 如果需要更细的us 需要使用硬件定时器
timer1 = rt_timer_create("timer1", timeout1,RT_NULL,1000,RT_TIMER_FLAG_PERIODIC);
/* 启动定时器1 */
if (timer1 != RT_NULL) rt_timer_start(timer1);
else rt_kprintf("timer1 error ! \n");
return 0;
}
直接在需要的地方调用 timer_sample 即可
]]>这些是RTT处理好的,估计其它系统还得进一步去阅读RTT代码。
board.c中os_clock_irq_handle就是依赖timer0的。。
libcpu上interrupt.c中
rt_hw_interrupt_init有处理这些。
这个好,让大家过来学一下RTT。