RT-Threadshellcommands:version-showRT-Threadversioninformationlist_thread-listthreadlist_sem-listsemaphoreinsystemlist_event-listeventinsystemlist_mutex-listmutexinsystemlist_mailbox-listmailboxinsystemlist_msgqueue-listmessagequeueinsystemlist_timer-listtimerinsystemlist_device-listdeviceinsystemexit-returntoRT...
对于RT-Thread中,比较关心的是ROM资源以及RAM资源,所以在设计之初,首先评估资源是否合理去跑一个rtos。 比如,rt-thread nano版本对 RAM 与 ROM 的开销非常小,在支持 semaphore 和 mailbox 特性,并运行两个线程 (main 线程 + idle 线程) 情况下,ROM 和 RAM 依然保持着极小的尺寸,RAM 占用约 1K 左右,ROM 占...
/* 线程控制块*/struct rt_thread{/* rt 对象*/char name[RT_NAME_MAX];/* 线程名称*/rt_uint8_t type;/* 对象类型*/rt_uint8_t flags;/* 标志位*/rt_list_t list;/* 对象列表*/rt_list_t tlist;/* 线程列表*//* 栈指针与入口指针*/void*sp;/* 栈指针*/void*entry;/* 入口函数指针*...
线程状态和就绪队列在 RT-Thread 中,系统中的线程会根据其优先级挂载在一个全局的就绪队列中,具体来说就是 rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX]; 这个数组。数组下标表示线程的优先级,…
可以看到线程创建函数的返回值类型为:rt_thread_t,找到定义处(如下图),可以看到它的返回值类型是一个结构体指针变量。 2、线程定义 那么我们先定义一个结构体指针的线程th1_ptr,这样通过rt_thread_create函数创建的进程控制块的地址就能直接赋值给th1_ptr变量: ...
通过打印rt_object等结构体的大小,了解了rt_object的基本构成。 基本了解到了其他内核对象,如rt_thread(线程控制块),rt_timer(定时器控制块),rt_list_t(双向链表)的RAM占用大小。 了解到rt_object的派生方式,增加其他对象的特殊属性,构成其他的对象,用链表链接起来,用于OS管理。
rtthread:消息队列 1 消息队列 消息队列是一种常用的线程间异步通讯方式; 消息队列能够接收来自线程或中断中不固定长度的消息,并把消息缓存在自己的内存空间中,供线程间进行异步通讯; 1.1 结构体定义 //rtconfig.h 源码默认注释掉未开启,用到消息队列的时候需要自己开启;...
rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX]; 这里的RT_THREAD_PRIORITY_MAX表示可用的线程优先级数,这里用了32个,最大可支持256个优先级,且数字越小,优先级越大。用图表说明为: 优先级管理数组 voidrt_system_scheduler_init(void){register rt_base_t offset;rt_scheduler_lock_nest=0;fo...
最近在看RT-Thread内核的源码,内核对象使用链表组织。 RT-Thread内部有完整的【双向链表】与【单向链表】的操作API与实际用例 内核对象,内核派生的如线程、定时器、设备等,都是由链表链起来管理的。 链表介绍 /** Double List structure */ struct rt_list_node ...
一、概述 这是我学习RT-Thread线程管理过程中记录的笔记,方便自己查看,仅供参考,有什么不对的地方忘各位大佬指出。想要了解更详细的内容,请浏览官方文档“线程管理” 如下图所示,一个子任务不间断地读取传感器数据,并将数据写到共享内存中,另外一个子任务周期性的从