嵌入式技术论坛
直播中

王尚岱

8年用户 1515经验值
擅长:电源/新能源
私信 关注
[问答]

求助RT_OBJECT_HOOK_CALL这么一个宏是何意思

在thread.c的275行用了RT_OBJECT_HOOK_CALL这么一个宏

  RT_OBJECT_HOOK_CALL(rt_scheduler_hook, (from_thread, to_thread));

其中用到了rt_scheduler_hook这么一个函数指针

static void (*rt_scheduler_hook)(struct rt_thread *from, struct rt_thread *to);

这是指针的声明。

我的疑问是在这个宏调用之前没看到关于rt_scheduler_hook这个指针的初始化就调用了,不是野指针吗,没看懂。。。。

另外请帮忙解释一下钩子应该怎么用,谢谢

回帖(6)

河神大人

2022-4-24 11:36:56
您可以展开一下 RT_OBJECT_HOOK_CALL 的实现,肯定有空判断。
举报

最强海贼王

2022-4-24 11:37:09
对的,这个指针并没有“初始化”。这个是未初始化的变量,对于未初始化的变量(ZI/bss段),系统在启动时会默认清零。所以这里我们依然沿用这样的方式
举报

王尚岱

2022-4-24 11:37:19
展开之后的形式是:
do
{
if(rt_scheduler_hook != RT_NULL)
{
rt_scheduler_hook(from_thread, to_thread);
}
}
while(0)

RT_NULL是个空指针,如果rt_scheduler_hook没有初始化是个野指针的话,不知道指向哪里,那应该肯定不会等于RT_NULL,程序就继续往下执行了,那这个逻辑就说不通了,不知道我的理解对不对。。
举报

河神大人

2022-4-24 11:37:42
上面说了,启动代码会把 rt_scheduler_hook 清零, NULL就是0

函数里面的局部变量,末初始化时才是随机值,野指针,需要由程序员自己按需初始化。
举报

王尚岱

2022-4-24 11:37:56
非常感谢,我明白了。。
举报

bodongchen

2022-4-24 13:36:10
苏州惠普联电子有限公司生产CPCI机箱  VME机箱
举报

更多回帖

发帖
×
20
完善资料,
赚取积分