RT-thread学習ノート(一)---システムビートtick
基礎知識、本人の学習記録、参考に供します.
システムrt_tickサイズ定義はrtconfig.h中:
/* Tick per Second */#define RT_TICK_PER_SECOND 100
デフォルトのサイズは100/秒、すなわち10 msです.
クロックは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();関数:
関数の説明によれば、この関数はカーネルにtickが通過したことを通知し、通常、この関数はクロック割り込み処理関数によって呼び出される.
最後にタイマチェーンテーブルチェック、rt_timer_check()は、現在のtick時間がタイマtimeout時間に達しているかどうかを検出する.
RT-Threadはソフトウェアタイマを提供し、オペレーティングシステムによってシステムインタフェースを提供し、ハードウェアタイマの基礎の上に構築され、システムがハードウェアリソースに制限されないタイミングサービスを提供できるようにする.
未完待续!!!
システムrt_tickサイズ定義はrtconfig.h中:
/* Tick per Second */#define RT_TICK_PER_SECOND 100
デフォルトのサイズは100/秒、すなわち10 msです.
クロックは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はソフトウェアタイマを提供し、オペレーティングシステムによってシステムインタフェースを提供し、ハードウェアタイマの基礎の上に構築され、システムがハードウェアリソースに制限されないタイミングサービスを提供できるようにする.
未完待续!!!