一、实验目的
- 理解线程创建、初始化与自动脱离的基本原理;
- 理解高优先级线程抢占低优先级线程运行;
- 掌握 RT-Thread 中线程的动态创建、静态初始化;
- 在 RT-Thread 中熟练使用线程来完成需求。
二、实验内容
本实验使用的例程为:thread_sample.c
为了体现线程的创建、初始化与脱离,本实验设计了 thread1、thread2 两个线程。thread1 是创建的动态线程,优先级为 25;Thread2 初始化的静态线程,优先级为 24。
优先级较高的 Thread2 抢占低优先级的 thread1,执行完毕一段程序后自动被系统脱离。优先级较低的 thread1 被设计成死循环,循环中有让出 CPU 使用权的动作–使用了 delay 函数。该线程在 thread2 退出运行之后开始运行,每隔一段时间运行一次,并一直循环运行下去。
通过本实验,用户可以清晰地了解到线程在本实验中的状态变迁情况。实验运行过程:
- 在 tshell 线程 (优先级 20) 中创建线程 thread1 和初始化 thread2,thread1
优先级为 25,thread2 优先级为 24;
2.启动线程 thread1 和 thread2,使 thread1 和 thread2 处于就绪状态;
3.随后 tshell 线程挂起,在操作系统的调度下,优先级较高的 thread2 首先被投入运行;
4.thread2 是可执行完毕线程,运行完毕打印之后,系统自动删除 thread2;
5.thread1 得以运行,打印信息之后执行延时将自己挂起;
6.系统中没有优先级更高的就绪队列,开始执行空闲线程;
7.延时时间到,执行 thread1;
(8)循环(5)~(7)。
三、编码和思考题
- 静态创建一个线程 Thread_Flag3,优先级高于任务 1,实现一个周期方波, 周期为 10 个 OS Ticks。在报告中给出相关的核心代码、仿真截图和说明。
- 在任务 1 和 2 内添加代码,并在仿真中设置虚拟逻辑分析仪,在报告中给出截图和说明。
3.在 watch 中添加并观察 3 个任务的控制块结构体中的关键成员,并在报告中给出截图和分析。
4.在合适位置设置断点,观察任务 3 状态在就绪、运行和挂起之间的转换,在报告中给出截图和分析。