实时操作系统介绍
嵌入式开发中的实时操作系统(RTOS, Real-Time Operating System)是一类专门为嵌入式系统设计的操作系统,它通过实时任务调度和资源管理,确保关键任务能够在规定的时间内执行。RTOS 被广泛应用于需要高实时性、确定性和可靠性的应用中,例如汽车控制系统、工业自动化、机器人、物联网设备等。
RT-Thread 是一个开源、嵌入式实时操作系统(Real-Time Operating System,简称 RTOS),专为资源受限的嵌入式系统设计,具有高效、轻量、可裁剪的特点。它广泛应用于物联网(IoT)、智能设备、工业控制等领域。
在本套系列博客中,我将会使用RT-thread 的官方开发板星火一号来进行RT-thread 的介绍和使用
RT-Thread 的主要特点:实时性:
RT-Thread 提供了优先级调度机制,可以确保关键任务在预定时间内得到处理,满足实时系统的需求。
轻量与可裁剪:
RT-Thread 可以在内存资源非常有限的设备上运行,例如小于 10KB 的 ROM 和 2KB 的 RAM。它支持裁剪,用户可以根据项目需要裁剪掉不必要的模块,从而在不同的应用场景中做到优化内存占用。
模块化架构:
RT-Thread 采用了松耦合的模块化设计,系统功能通过不同的组件(如线程管理、内存管理、设备驱动、文件系统、网络协议栈等)进行独立开发。用户可以根据需求自由选择和组合这些组件。
多线程支持:
RT-Thread 支持多任务管理,可以创建多个线程并同时运行,提供了丰富的线程控制函数(如线程创建、启动、挂起、恢复、删除等),让用户轻松实现并发执行。
跨平台支持:
RT-Thread 可以在多种微控制器架构(如 ARM Cortex-M、Cortex-A、RISC-V、MIPS 等)上运行。它支持多种硬件平台,帮助开发者实现快速移植和开发。
设备驱动框架:
RT-Thread 提供了丰富的设备驱动框架,支持串口、I2C、SPI、SD 卡、ADC 等常见外设设备,并且通过统一的驱动接口进行管理,方便开发者进行设备驱动的集成与开发。
软件包管理:
RT-Thread 拥有自己的软件包管理器,称为 RT-Thread Package,可以轻松地集成和使用第三方的软件包,比如图形用户界面(GUI)、网络协议栈、AI 算法库等,大大简化了开发的过程。
文件系统与网络支持:
RT-Thread 提供了多种文件系统的支持,如 FatFS、LittleFS。网络方面,RT-Thread 支持 TCP/IP 协议栈(如 lwIP),并为物联网开发者提供了 MQTT、CoAP 等协议栈,方便实现联网功能。
丰富的社区与生态:
RT-Thread 拥有一个活跃的开发者社区,官方提供了详细的开发文档、教程、以及论坛支持。RT-Thread 生态系统涵盖了各种开发工具、板卡支持包(BSP)、以及大量的示例项目。
任务的创建和删除
在这次的示例中,我将展示如何使用不同的方式创建任务,并介绍如何使用一些 RT-Thread 的功能。
thread_creation.c简短描述:
此任务通过两种不同的方式创建任务:静态创建和动态创建。静态创建是通过使用 rt_thread_init 函数,而动态创建是通过 rt_thread_create 函数来实现的。
注意:不要在 main 函数的末尾使用 while() 循环。否则,任务将永远不会被调度执行。
不正确的方式:
在上面的代码中,while(1) 会导致主线程无限循环,阻止其他线程被调度执行。
正确的方式:
在这个版本中,我们使用 return 0; 来结束 main 函数,从而允许 RT-Thread 的任务调度器接管系统。
正确方式效果:
两个任务将成功创建并按预期执行。
不正确方式效果:
由于主循环一直在运行,任务调度器无法正常工作。
main.c 文件位置:/application-day2
这个 C 代码演示了如何使用 rt_thread_detach 和 rt_thread_delete 函数来删除任务。
rt_thread_detach 用于删除静态任务。
rt_thread_delete 不能删除静态任务,只能删除动态任务。
删除动态任务的示例:
上面的代码创建了一个动态任务,当计数器 i 达到 10 时,该任务会通过 rt_thread_delete 函数自我删除。
通过 rt_thread_detach 删除静态任务的示例:
此代码中的静态任务也会在 i == 10 时通过 rt_thread_detach 函数自我删除。
效果说明:
动态任务在 i == 10 时被删除。
静态任务通过 rt_thread_detach 删除。
总结:
本章节我们学习了如何使用RT-thread的不同方式来创建线程,以及获取线程的状态和删除等。那么在接下来的章节里,我们将继续学习RT-thread的高级内容。