rtt hook钩子函数

来源:互联网 发布:国内域名备案 编辑:程序博客网 时间:2024/06/06 08:55

1.

#ifdef RT_USING_HOOK

static void (*rt_thread_idle_hook)();


/**
 * @ingroup Hook
 * This function sets a hook function to idle thread loop. When the system performs 
 * idle loop, this hook function should be invoked.
 *
 * @param hook the specified hook function
 *
 * @note the hook function must be simple and never be blocked or suspend.
 */
void rt_thread_idle_sethook(void (*hook)(void))
{
    rt_thread_idle_hook = hook;
}

#endif

2.

#define RT_USING_HOOK

然后在应用程序里设置钩子函数

#ifdef RT_USING_HOOK

       rt_thread_idle_sethook(rt_hw_led_flash);

#endif


3.

void rt_hw_led_flash(void)
{
       rt_uint32_t i;      
       rt_hw_led_init();
 
       {
              GPIO_WriteBit(state_led_gpio,state_led_pin, (BitAction)(1-GPIO_ReadOutputDataBit(state_led_gpio,state_led_pin)));
        
}

这样写过之后,在系统空闲的时候就会执行这个函数,当然,如果系统繁忙的时候是不会进入这个idel任务的,不过如果系统一直处于繁忙的状态就是有问题了
另外一点记住,在这个函数里不能调用系统提供的使线程挂起的函数