版本 5573c143fa48a1daf96254620e5d05aa5fc1f2a0
ChibiOS/RT idle thread
idle thread
idle thread 是一個 CPU 實現 power saving 的機制
在 ChibiOS/RT 中, idle thread 的優先度被設為最低,意即只要有其他的 Thread 在跑, idle thread 就不可能被執行到
In ChibiOS-RT-Community / os / kernel / include / chsys.h
在 ChibiOS/RT 中, idle thread 的優先度被設為最低,意即只要有其他的 Thread 在跑, idle thread 就不可能被執行到
In ChibiOS-RT-Community / os / kernel / include / chsys.h
.. code-block:: c
#if !CH_NO_IDLE_THREAD || defined(__DOXYGEN__)
/**
* @brief Idle thread working area.
*/
WORKING_AREA(_idle_thread_wa, PORT_IDLE_THREAD_STACK_SIZE);
/**
* @brief This function implements the idle thread infinite loop.
* @details The function puts the processor in the lowest power mode capable
* to serve interrupts.<br>
* The priority is internally set to the minimum system value so
* that this thread is executed only if there are no other ready
* threads in the system.
*
* @param[in] p the thread parameter, unused in this scenario
*/
void _idle_thread(void *p) {
(void)p;
chRegSetThreadName("idle");
while (TRUE) {
port_wait_for_interrupt(); //空函式
IDLE_LOOP_HOOK();
}
}
在
chSysInit()<chSysInit()>
_ 函式的最後, 建立了 idle thread.. code-block:: c
#if !CH_NO_IDLE_THREAD
/* This thread has the lowest priority in the system, its role is just to
serve interrupts in its context while keeping the lowest energy saving
mode compatible with the system status.*/
chThdCreateStatic(_idle_thread_wa, sizeof(_idle_thread_wa), IDLEPRIO,
(tfunc_t)_idle_thread, NULL);
#endif