【RT-Thread读书笔记】3. RT-Thread 学习4-5章读后感
[复制链接]
本帖最后由 传媒学子 于 2019-4-22 22:46 编辑
【RT-Thread读书笔记】3. RT-Thread 学习4-5章读后感
第四章
这一章内容较少,主要是打个铺垫,教我们如何新建keil工程,以及文件组的布局,以及如何设置一些参数。
第五章
这一章,主要讲的是裸机线程与多线程系统的定义和区别。这里需要我们认真体会一下,为后边RTOS的学习打下一个基础。
裸机系统通常是指没有采用RTOS的系统,一般分为轮询系统和前后台系统。
轮询系统:即常见的先初始化各个硬件模块,然后在while(1)中不断轮询各个任务。
例程:
- int main(void)
- {
- /* 硬件相关初始化 */
- HardWareInit();
- /* 无限循环 */
- while (1)
- {
- /* 处理事情1 */
- DoSomething1();
-
- /* 处理事情2 */
- DoSomething2();
-
- /* 处理事情3 */
- DoSomething3();
- }
- }
复制代码
优点是:严格顺序执行。缺点是:如果遇到多线程任务时,往往会造成阻塞;有一个任务长时间卡在这里,系统就无法继续轮询下去。
在此基础上,加上中断,便是前后台系统。前后台系统能够打断主函数中的大循环,插入一些紧急的任务。加上中断嵌套,即可满足很多应用。
例程:
- int flag1 = 0;
- int flag2 = 0;
- int main(void)
- {
- /* 硬件相关初始化 */
- HardWareInit();
- /* 无限循环 */
- while (1)
- {
- /* 处理事情1 */
- DoSomething1();
-
- /* 处理事情2 */
- DoSomething2();
-
- /* 处理事情3 */
- DoSomething3();
- }
- }
- void ISR1(void)
- {
- flag1 = 1;
- DoSomething4();
- }
- void ISR2(void)
- {
- flag1 = 1;
- DoSomething5();
- }
复制代码
优点:克服了单纯轮询系统只能按大循环中顺序执行的弱点。
缺点:中断服务函数依然是一个顺序执行块,如果在中断服务函数中的事件占用的时间过长,系统主循环中的任务不能得到及时处理,实时性还是很差。如果主函数中有显示函数,则会造成显示中断。
因此,为了克服上述缺点,并继承上述优点,便出现了多线程系统,也叫RTOS。
多线程系统的事件响应也是在中断中完成的,但是事件的处理是在线程中完成的。线程也具有优先级,提高了系统的实时性。
多线程的每个线程都相当于一个小的while(1)无线循环,每个线程相互独立,互不干扰,后边会介绍线程中如何共享变量,传递信息。
多线程会需要额外的RAM ROM来保存相关线程的上下文(函数运行所需要的环境),并在线程被启用的时候供系统使用。
下面是三种系统的区别: 虽然,RTOS确实显得高大上,但是不得不说一下,三种类型其实都有各自的使用场合。只是,RTOS的使用是一种趋势,但绝不是说,其它两种就不好了。大家要在自己的项目中,根据具体需求来决定使用哪种模型。
此内容由EEWORLD论坛网友传媒学子原创,如需转载或用于商业用途需征得作者同意并注明出处
|