系统钩子函数
为了在运行时跟踪和记录RT-Thread的活动,引入了一种钩子机制。
钩子函数是在一些特殊检查点调用的一类函数。 钩子函数包括:
对象钩子函数,在创建,删除,获取和放置等对象时调用。
调度器钩子函数,在线程切换和空闲线程循环中调用。
内存钩子函数,在分配或释放内存块时调用。
定时器钩子函数,在定时器超时时调用。
函数说明
rt_err_t rt_thread_idle_sethook ( void(*)(void) hook )
设置空闲线程钩子函数
系统运行空闲线程的时候会运行这个钩子函数。
参数
hook 指定的钩子函数
注解
空闲线程是一个线程状态永远为就绪态的线程,因此设置的钩子函数必须保证空闲线程在任何时刻都不会处于挂起状态, 例如rt_thread_delay() , rt_sem_take() 等可能会导致线程挂起的函数都不能使用。
示例:
idlehook_sample.c , 以及 iwdg_sample.c.
rt_err_t rt_thread_idle_delhook ( void(*)(void) hook )
从空闲钩子链表中删除指定的钩子函数。
参数
hook 指定的钩子函数
返回
RT_EOK: 删除成功 -RT_ENOSYS: 链表中未找没有改钩子函数
示例:
idlehook_sample.c.
void rt_interrupt_enter_sethook ( void(*)(void) hook )
设置进入中断钩子函数
该函数将设置一个中断钩子函数,当系统进入中断时会调用该函数。
注解
钩子函数必须简单,永远不会被阻塞或挂起。
void rt_interrupt_leave_sethook ( void(*)(void) hook )
设置中断退出钩子函数
该函数将设置一个钩子函数,当系统退出中断时会调用该函数。
注解
钩子函数必须简单,永远不会被阻塞或挂起。
void rt_malloc_sethook ( void(*)(void *ptr, rt_size_t size) hook )
设置内存分配钩子函数
该函数将设置一个钩子函数,当从堆内存中分配内存块时将调用该钩子函数。 钩子函数会在内存分配完成后进行回调,并把分配到的内存块地址和大小做为参数传递给钩子函数。
参数
hook 钩子函数
ptr 分配到的内存块指针
size 分配到的内存块大小
void rt_free_sethook ( void(*)(void *ptr) hook )
设置内存释放钩子函数
该函数将设置一个钩子函数,当内存块被释放会内存堆时将调用该钩子函数。 钩子函数会在调用内存释放完成前进行回调。 回调时,释放的内存块地址会做为入口参数传递进去(此时内存块并没有被释放)。
参数
hook 钩子函数
ptr 待释放的内存块指针
void rt_mp_alloc_sethook ( void(*)(struct rt_mempool *mp, void *block) hook )
设置内存池分配钩子函数
该函数将设置一个钩子函数,当从内存池中分配内存块时将调用该钩子函数。
参数
hook 钩子函数
void rt_mp_free_sethook ( void(*)(struct rt_mempool *mp, void *block) hook )
设置内存池释放钩子函数
该函数将设置一个钩子函数,当内存块被释放回内存池时将调用该钩子函数。
参数
hook 钩子函数
void rt_object_attach_sethook ( void(*)(struct rt_object *object) hook )
设置内核对象添加钩子函数
该函数将设置一个钩子函数,当对象添加到内核对象管理器时将调用该钩子函数。
参数
hook the hook function
void rt_object_detach_sethook ( void(*)(struct rt_object *object) hook )
设置内核对象脱离钩子函数
该函数将设置一个钩子函数,当对象从内核对象系统脱离时将调用该钩子函数。
参数
hook the hook function
void rt_object_trytake_sethook ( void(*)(struct rt_object *object) hook )
设置线程尝试获取内核对象钩子函数
该函数将设置一个钩子函数,当线程尝试获取内核对象时将调用该钩子函数。
内核对象指的是: semaphore - 信号量被线程获取 mutex - 互斥量被线程获取 event - 事件被线程接收 mailbox - 邮件被线程接收 message queue - 消息队列被线程接收
参数
hook 钩子函数
void rt_object_take_sethook ( void(*)(struct rt_object *object) hook )
设置线程获取内核对象钩子函数 该函数将设置一个钩子函数,当线程获取到内核对象后将调用该钩子函数。
内核对象指的是: semaphore - 信号量被线程获取 mutex - 互斥量被线程获取 event - 事件被线程接收 mailbox - 邮件被线程接收 message queue - 消息队列被线程接收 timer - 定时器被启动
参数
hook 钩子函数
void rt_object_put_sethook ( void(*)(struct rt_object *object) hook )
设置线程发送内核对象钩子函数 该函数将设置一个钩子函数,当线程发送内核对象时将运行该钩子函数。
内核对象指的是: semaphore - 信号量被线程获取 mutex - 互斥量被线程获取 event - 事件被线程接收 mailbox - 邮件被线程接收 message queue - 消息队列被线程接收 timer - 定时器被启动
参数
hook 钩子函数
void rt_scheduler_sethook ( void(*)(struct rt_thread *from, struct rt_thread *to) hook )
设置调度器钩子函数
此函数将设置一个钩子函数,当发生线程切换时将调用该钩子函数。
参数
hook 钩子函数
示例:
scheduler_hook.c.
void rt_thread_suspend_sethook ( void(*)(rt_thread_t thread) hook )
设置线程挂起钩子函数
钩子函数会在系统挂起线程时调用。
参数
hook 指定的钩子函数
注解
钩子函数必须简单,并且永远不会被阻塞或挂起。
void rt_thread_resume_sethook ( void(*)(rt_thread_t thread) hook )
设置线程恢复钩子函数
钩子函数会在系统恢复线程调用。
参数
hook 指定的钩子函数
注解
钩子函数必须简单,并且永远不会被阻塞或挂起。
void rt_thread_inited_sethook ( void(*)(rt_thread_t thread) hook )
设置线程初始化钩子函数
钩子函数会在线程初始化的时候调用。
参数
hook 指定的钩子函数
void rt_timer_timeout_sethook ( void(*)(struct rt_timer *timer) hook )
设置定时器超时钩子函数 该函数将设置一个钩子函数,当定时器超时时将调用该钩子函数。
参数
hook 钩子函数
原作者:文江博客
|