RT-Thread 学习笔记(一)---系统节拍tick

来源:互联网 发布:windows store下载 编辑:程序博客网 时间:2024/05/29 11:07
基础知识,本人学习记录,仅供参考。

 

系统rt_tick大小定义在rtconfig.h中:

/* Tick per Second */
#define RT_TICK_PER_SECOND100

默认大小为100/秒,即10ms

时钟采用SysTick定时,初始化在startup.c文件中:

rtthread_startup() -> rt_hw_board_init() -> SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);

SysTick中断处理函数在board.c中:

SysTick_Handler();

在SysTick_Handler();中对tick进行计数的函数为:

rt_tick_increase();

rt_tick随着系统运行不断增加

跟进去分析下rt_tick_increase();函数:

 1 /** 2  * This function will notify kernel there is one tick passed. Normally, 3  * this function is invoked by clock ISR. 4  */ 5 void rt_tick_increase(void) 6 { 7     struct rt_thread *thread; 8  9     /* increase the global tick */10     ++ rt_tick;11 12     /* check time slice */13     thread = rt_thread_self();  //获取当前线程id14 15     -- thread->remaining_tick;16     if (thread->remaining_tick == 0)17     {18         /* change to initialized tick */19         thread->remaining_tick = thread->init_tick;20 21         /* yield */22         rt_thread_yield();  //线程让出处理器函数,判断当前线程tick时间到达,出让处理器使用权23     }24 25     /* check timer */26     rt_timer_check();27 }

根据函数说明可知:这个函数通知内核经过了一个tick,通常这个函数由时钟中断处理函数调用。

最后进行定时器链表检查,rt_timer_check()检测当前tick时间是否达到定时器timeout时间。

 

RT-Thread提供软件定时器,由操作系统提供系统接口,构建于硬件定时器基础之上,使系统能够提供不受限制于硬件资源的定时服务。

 

 未完待续!!!

原创粉丝点击