[RT_Thread]
【RT-Thread读书笔记】第三周:进入RT-Thread的世界——线程、时钟
第二周的帖子被我给耽搁了,直接跳到第三周了。
从第四章开始,算是详细的介绍RT-Thread了,首先是对线程的介绍,这个算是玩RTOS的基础知识了,怎么把任务分割,怎么多任务去运行等等。读完第一遍,真的很抽象,完全不像FreeRTOS那样易上手,然后每章在读了两遍的基础上,再去跑例程,跟着例程去学习,就有种豁然开朗的感觉,收获很大。读完第四章,就可以发现RT-Thread的线程管理机制和FreeRTOS的管理机制,还是有很多不同的,比如基本的线程状态就不一样。第四章主要解决什么是线程、线程有哪些状态、怎么去创建线程、怎么去管理线程等基本问题。管理线程又涉及到线程的初始化、脱离线程、启动线程、挂起恢复线程等。初始化线程又涉及到动态线程和静态线程,两者分别以rt_thread_create()和rt_thread_init()分别展开来介绍。最后介绍了调度器钩子,感觉这个在调试时比较实用,但是钩子函数貌似不太好写。
第五章,时钟管理。这个就是介绍RT-Thread系统中的最小时间单位节拍。从节拍的概念、如何产生,到获取时间节拍。然后分硬件模式(HARD_TIMER)软件模式(SOFT_TIMER)来讲定时器,硬件定时器的时间精度高,并且定时时间灵活,自由。而软的定时器则是基于RT-Thread的时钟节拍,因此,定时时间,必须是节拍的整数倍。弄清楚这些基本概念后,就是介绍定时器的工作机制了,定时器链表以及链表的跳表算法,这个感觉跟以前学刚C语言时时的排序算法类似,实际就是增加索引目录,就像书上说的那样,以空间换取时间。
第六章,线程间的同步。这一章和第四章一样,至少需要去读两遍再去实践才能理解的透彻。为什么会引入同步这个概念,实际就是解决RT-Thread协调多个线程共同完成任务的问题。解决这个问题,首先引入的是信号量的概念,由信号量到信号控制块,到信号的管理:创建、初始化、获取信号量、删除、释放。信号量适用于形成锁、同步、计数、线程与线程、中断与线程间的同步。互斥量的引入没有做过多的解释,记得以前学FreeRTOS的时候,是由普通信号量的弊端引入的,举了很多事例,比如优先级是怎么翻转的,当然这种翻转是你所不期望的。RT-Thread中主要是利用优先级继承算法来解决优先级翻转的问题。着重讲了互斥量与普通信号量的两点不同:支持递归访问,只能由持有线程释放,并且,互斥量不能在中断服务函数中使用。本章,最后又引入了事件集的概念,这个主要是解决一对多和多对多的线程同步。因此也有了线程的“逻辑与”和“逻辑或”概念,即独立型同步和关联性同步。
写这种读书笔记真的挺好的,不但能留下学习的脚印,还可以去梳理自己的学习知识、学习思路,不懂的概念或者知识,再去温故一遍。
本帖最后由 数码小叶 于 2019-5-5 22:57 编辑
暂无评论,赶紧抢沙发吧