|
rt_err_t rt_thread_init(struct rt_thread* thread,
const char* name,
void (*entry)(void* parameter), void* parameter,
void* stack_start, rt_uint32_t stack_size,
rt_uint8_t priority, rt_uint32_t tick)
{
/* thread check */
RT_ASSERT(thread != RT_NULL);
RT_ASSERT(stack_start != RT_NULL);
/* init thread object */
rt_object_init((rt_object_t)thread, RT_Object_Class_Thread, name);
return _rt_thread_init(thread, name, entry, parameter,
stack_start, stack_size,
priority, tick);
}
其中调用了rt_object_init((rt_object_t)thread, RT_Object_Class_Thread, name);
这个rt_object_t 结构体类型和rt_thread* thread结构体类型完全不同,怎么可以随意转换
然后在rt_object_init中
void rt_object_init(struct rt_object* object, enum rt_object_class_type type, const char* name)
{
register rt_base_t temp;
struct rt_object_information* information;
/* get object information */
information = &rt_object_container[type];
/* init object's parameters */
/* set object type to static */
object->type = type | RT_Object_Class_Static;
/* copy name */
for (temp = 0; temp < RT_NAME_MAX; temp ++)
{
object->name[temp] = name[temp];
}
#ifdef RT_USING_HOOK
if (rt_object_attach_hook != RT_NULL)
{
rt_object_attach_hook(object);
}
#endif
/* lock interrupt */
temp = rt_hw_interrupt_disable();
/* insert object into information object list */
rt_list_insert_after(&(information->object_list), &(object->list));
/* unlock interrupt */
rt_hw_interrupt_enable(temp);
}
这个object结构体随意使用,
/* set object type to static */
object->type = type | RT_Object_Class_Static;
/* copy name */
for (temp = 0; temp < RT_NAME_MAX; temp ++)
{
object->name[temp] = name[temp];
}
C语言还可以怎么干吗?我甚为疑惑
还有那个/* get object information */
information = &rt_object_container[type];
这个rt_object_container[type]定义怎么看得我一头雾水
这个枚举量中enum rt_object_class_typ也没有给出那个 RT_Object_Class_Timer, /* The object is a timer. */
RT_Object_Class_Unknown, /* The object is unknown. */
具体数值来
究竟是在那儿定义的
VIM+CTAGS根本就找不到
ffxz麻烦答一下疑? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|