07 2021 档案
摘要:在RT-Thread中,每个线程都内置一个定时器,当线程需要延时的时候,先将线程挂起,然后内置的定时器将会启动,并且将定时器插入到一个全局的定时器列表rt_timer_list,这个全局的系统定时器列表维护着一条双向链表,每个节点代表了正在延时的线程的定时器,节点按照延时时间大小做升序排列。当每次时
阅读全文
摘要:1、就绪列表 RT-Thread 要支持多优先级,需要靠就绪列表的支持,从代码上看,就绪列表由两个在schedule.c文件定义的全局变量组成,一个是线程就绪优先级组rt_thread_ready_priority_group,另一个是线程优先级表rt_thread_priority_table[R
阅读全文
摘要:RTOS中的延时叫阻塞延时,即线程需要延时的时候,线程会放弃CPU的使用权,CPU可以去干其他事情,当线程延时时间到,重新获取CPU使用权,线程继续运行,这样就充分利用了CPU的使用权,而不是刚等着。 当线程需要延时,CPU进入阻塞状态,那CPU又去干什么事情了?如果没有其它线程可以运行,RTOS都
阅读全文
摘要:1、什么是对象 在RT-Thread,所有的数据结构都成为对象。 其中线程,信号量、互斥量、事件、邮箱、消息队列、内存堆、内存池、设备和定时器在rtdef.h中有明显的枚举定义,即为每个对象打上一个数字标签。 enum rt_object_class_type { RT_Object_Class_T
阅读全文
摘要:1、什么是临界段 临界段就是一段在执行的时候不能被中断的代码段。在RT-Thread里面这个临界段最常出现的就是对全局变量的操作。 那么什么情况下临界段会被打断? 一个是系统调度,另一个是外部中断。在RT-Thread里面,系统调度,最终也是产生PendSV中断,在PendSV Handler里面实
阅读全文