9.空闲线程钩子函数喂狗2021-11-03

空闲线程是一个线程状态永远为就绪态的线程,所以空闲线程钩子函数不许被挂起,如使用 rt_thread_delay(),rt_sem_take()等可能会导致线程挂起阻塞类函数,在钩子函数中使用 空闲线程可以设置多个钩子函数

在空闲线程钩子函数里不能调用系统提供的使线程挂起的函数   如: rt_thread_mdelay(300);


在idel的钩子函数中是不能用while (1) 之类的死循环的,这样会造成系统资源不能得到释放。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void rt_hw_iwdg(void)      ///在空闲线程钩子函数里喂狗

{

  IWDG_ReloadCounter();    /*reload*/   

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void IWDG_Init(void)    //看门狗周期设置为1秒

{

  /* Set counter reload value to obtain 250ms IWDG TMReOut.

    Counter Reload Value = 1000ms/IWDG counter clock period

                          = 1000ms / (64/LSI)

                          = 1s / (64/LsiFreq)

                          = LsiFreq/(64 * 1)

                          = LsiFreq/64

  */

  IWDG_KeyRegWrite(IWDG_KeyRegWrite_Enable);

  IWDG_SetPrescaler(IWDG_Psc_64);

  IWDG_SetReload(LsiFreq / 64);

  IWDG_ReloadCounter();

  IWDG_Enable();

  rt_thread_idle_sethook(rt_hw_iwdg); /* 设置调度器钩子 */

}

你可能感兴趣的:(9.空闲线程钩子函数喂狗2021-11-03)