diff --git a/bsp/x86/applications/startup.c b/bsp/x86/applications/startup.c index 1449b69de6b5414f1dd26f2cb418e2c2e15c968a..c4e50087a77c6b2f74d7bdd7a1fc02dbf7b1891b 100644 --- a/bsp/x86/applications/startup.c +++ b/bsp/x86/applications/startup.c @@ -93,11 +93,6 @@ void rtthread_startup() finsh_set_device("console"); #endif -#ifdef RT_USING_HOOK - /* set idle thread hook */ - rt_thread_idle_sethook(RT_NULL); -#endif - /* init idle thread */ rt_thread_idle_init(); diff --git a/bsp/x86/drivers/board.c b/bsp/x86/drivers/board.c index 3aff852b59e9f304de9143fc7fe457c9b83ccd8a..8ec05b6747ffc3136b07b824576eef053ee59d1b 100644 --- a/bsp/x86/drivers/board.c +++ b/bsp/x86/drivers/board.c @@ -26,7 +26,14 @@ static void rt_timer_handler(int vector) { rt_tick_increase(); +} + +#ifdef RT_USING_HOOK +static void idle_hook(void) +{ + asm volatile("sti; hlt": : :"memory"); } +#endif /** * This function will init QEMU @@ -41,7 +48,11 @@ void rt_hw_board_init(void) /* install interrupt handler */ rt_hw_interrupt_install(INTTIMER0, rt_timer_handler, RT_NULL); - rt_hw_interrupt_umask(INTTIMER0); + rt_hw_interrupt_umask(INTTIMER0); + +#ifdef RT_USING_HOOK + rt_thread_idle_sethook(idle_hook); +#endif } void restart(void)