用阻塞延时的方法实现线程缺点很明显,每个循环周期都要扫描所有线程,费时效率低。RT-Thread提供了更合理的选择,每个线程都内置一个定时器,使用时先将线程挂起,之后内置定时器启动并将定时器插入到全局的系统定时器列表rt_timer_list,它维护着一条双向链表,每个节点表示正在延时的定时器,节点按照延时大小升序排列,由SysTick中断来控制扫描系统定时器列表判断时间是否到了。如果排在第一个定时器时间没到,那么它之后的一定也没到(节点按照延时大小升序排列的),如果时间到了就让对应的线程就绪,这种方法大大缩短了寻找延时到期线程的时间。
1.系统定时器在timer.c中,需要添加到工程的srtt/source组中
/* hard timer list */
static rt_list_t rt_timer_list[RT_TIMER_SKIP_LIST_LEVEL];