RT_ASSERT(obj != object); } }/* leave critical */rt_exit_critical();/* initialize object's parameters *//* set object type to static */object->type = type | RT_Object_Class_Static;/* copy name */rt_strncpy(objec
drivers -> 设备驱动 obj -> 编译过程文件与镜像烧录文件 rtthread -> rtt源码 编译有个警告,跳到警告处,改一下就好 4.0.x是这么改的 if (obj) /* skip warning when disable debug */ { RT_ASSERT(obj != object); } 或者 struct rt_object *obj RT_UNUSED; 好了,这里的下载烧录没有任何问题,而...
if (obj) /* skip warning when disable debug */ { RT_ASSERT(obj != object); } } /* 离开临界区 */ rt_exit_critical(); /* 初始化对象参数,并置为静态标记 */ object->type = type | RT_Object_Class_Static; rt_strncpy(object->name, name, RT_NAME_MAX); RT_OBJECT_HOOK_CALL(rt_o...
RT_ASSERT(obj != object); } }/* 离开临界区 */rt_exit_critical();/* 初始化对象参数,并置为静态标记 */object->type=type| RT_Object_Class_Static; rt_strncpy(object->name, name, RT_NAME_MAX); RT_OBJECT_HOOK_CALL(rt_object_attach_hook, (object));/* 禁止硬件中断 */temp = rt_hw...
编写一个函数,打印一下rt_object 等对象的结构体占用的内存RAM大小。 void print_kernel_object_size(void) { struct rt_object obj; rt_kprintf("struct rt_object size=%d\n", sizeof(obj)); rt_kprintf("rt_list_t size=%d\n", sizeof(rt_list_t)); rt_kprintf("struct rt_timer size=%d\n"...
RT_Object_Class_Module, // 模块 #endif RT_Object_Class_Unknown, // 未知内核对象类型 RT_Object_Class_Static = 0x80 // rt-thread以此位标志是否为系统内核对象 }; 所有对象又被放置于对象容器中: /** * The information of the kernel object ...
当我更改内核对象中的:rt_uint8_t type --> rt_uint32_t type,验证下结构体大小时,却发生了Assert 栈溢出。 经过调试,发现是线程结构体引起的对齐问题。结构体,一定要注意结构与大小一致。 线程控制块(结构体)rt_thread,使用了内核对象块,是重写的。
struct rt_object*obj;obj=rt_list_entry(node,struct rt_object,list);if(obj)/* skip warning when disable debug */{RT_ASSERT(obj!=object);} rt_list_entry()的作用是根据成员的地址,推出结构体的地址。由于node是rt_list_node类型,而object结构体内有一个rt_list_t,这两个结构体是一样的: ...
rt_object_trt_object_allocate(enum rt_object_class_type type,const char*name){struct rt_object*object;register rt_base_t temp;struct rt_object_information*information;RT_DEBUG_NOT_IN_INTERRUPT;/* get object information */information=rt_object_get_information(type);RT_ASSERT(information!=RT_NULL...
obj =rt_list_entry(node,structrt_object, list);if(obj)/* skip warning when disable debug */{RT_ASSERT(obj != object); } }/* 离开临界区 */rt_exit_critical();/* 初始化对象参数,并置为静态标记 */object->type=type| RT_Object_Class_Static;rt_strncpy(object->name, name, RT_NAME_...