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

基础知识,本人学习记录,仅供参考。

 

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

/* Tick per Second */
#define RT_TICK_PER_SECOND 100

默认大小为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();  //获取当前线程id
14 
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提供软件定时器,由操作系统提供系统接口,构建于硬件定时器基础之上,使系统能够提供不受限制于硬件资源的定时服务。

 

 未完待续!!!

你可能感兴趣的:(RTThread,STM32)