所以这个宏的pos参数,传入的应该是你自己定义的链表节点结构体指针,此结构体内包含一个rt_list_t类型的member成员变量。所以第三个参数传入一个rt_list_t member变量即可。而第二个参数head传入的是链表头节点内的member变量指针。所以这里for循环内的第一条初始化语句就是初始化pos为链表内第一个节点的自定义结构...
其中栈的尺寸stack_size一般都是固件函数调用深度和可能需要的最大资源来给定,一般刚开始开发的时候,给定的都是最大值,如果要进行裁剪,有三种方法: 1.让系统运行一段时间,通过命令行list_thread 来调整栈空间 2.在MDK中,可以查看Static Call Graph for image文件来查看栈的使用情况 通过函数调用关系,计算最大栈的...
voidrt_system_scheduler_init(void){register rt_base_t offset;rt_scheduler_lock_nest=0;for(offset=0;offset<RT_THREAD_PRIORITY_MAX;offset++){rt_list_init(&rt_thread_priority_table[offset]);}rt_current_priority=RT_THREAD_PRIORITY_MAX-1;rt_current_thread=RT_NULL;/* initialize ready priority ...
基本了解到了其他内核对象,如rt_thread(线程控制块),rt_timer(定时器控制块),rt_list_t(双向链表)的RAM占用大小。 了解到rt_object的派生方式,增加其他对象的特殊属性,构成其他的对象,用链表链接起来,用于OS管理。
使用list_msgqueue 命令来显示系统中所有的消息队列信息,包括消息队列的名称、包含的消息数目和等待这个消息队列的线程数目。 msh/>list_msgqueuemsgqueueentrysuspendthread--- list_msgqueue 返回字段的描述: 2.7显示内存池状态 使用list_mempool 命令来显示系统中所有...
而rt_object_information则抽象了对象类型,加入了一个双向链表指针数据域rt_list_node,从而将同类别的内核对象利用该双链指针链接起来,这些同类别的内核对象具有如下可能的特点: 可能在软件运行时生成,也可能在os初始化创建。 其存储类型可能为静态类型,也可能为动态类型(所谓动态类型这里是确指在内核堆上动态申请的内...
RT-Thread 提供list_thread、list_device等,查看内核的对象。 查看线程初始化【次序】,看看最后打印的线程,就是【最先】首个创建的线程。 一般从链表【头部】开始遍历各个链表节点。如下:最后一个节点是:main线程. 其实,main线程,是第一个创建的。 msh/>list_threadthreadpristatusspstacksizemaxusedlefttickerror-...
在rt_list_init中进行next,prev指针的初始化 两个指针均指向节点本身 二 定时器在线程中的定义 在线程结构体rt_thread中定义了rt_timer。rt_timer的定义如下: struct rt_timer { struct rt_object parent; /**< inherit from rt_object */ rt_list_t row[RT_TIMER_SKIP_LIST_LEVEL]; ...
void*msg_queue_tail;/**< list tail */ void*msg_queue_free;/**< pointer indicated the free node of queue */ }; typedefstructrt_messagequeue*rt_mq_t; #endif //rtdef.h suspend_thread在create函数中初始化,作为suspend线程的链表节点来挂载; ...
如果把链表插入到【尾部】后面,就要先把链表指针移到尾部,再执行:rt_list_insert_after. 查看内核对象 其实,thread,device等对象,都是内核对象【派生】出来的。 RT-Thread 提供list_thread、list_device等,查看内核的对象。 查看线程初始化【次序】,看看最后打印的线程,就是【最先】首个创建的线程。