这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 换取逻辑分析仪+星火一号【RT-Thread】任务的创建和删除

共3条 1/1 1 跳转至

换取逻辑分析仪+星火一号【RT-Thread】任务的创建和删除

菜鸟
2024-09-22 00:52:09   被打赏 25 分(兑奖)     打赏

实时操作系统介绍


嵌入式开发中的实时操作系统(RTOS, Real-Time Operating System)是一类专门为嵌入式系统设计的操作系统,它通过实时任务调度和资源管理,确保关键任务能够在规定的时间内执行。RTOS 被广泛应用于需要高实时性、确定性和可靠性的应用中,例如汽车控制系统、工业自动化、机器人、物联网设备等。

RT-Thread 是一个开源、嵌入式实时操作系统(Real-Time Operating System,简称 RTOS),专为资源受限的嵌入式系统设计,具有高效、轻量、可裁剪的特点。它广泛应用于物联网(IoT)、智能设备、工业控制等领域。


在本套系列博客中,我将会使用RT-thread 的官方开发板星火一号来进行RT-thread 的介绍和使用

image.png

RT-Thread 的主要特点:
  1. 实时性

    • RT-Thread 提供了优先级调度机制,可以确保关键任务在预定时间内得到处理,满足实时系统的需求。

  2. 轻量与可裁剪

    • RT-Thread 可以在内存资源非常有限的设备上运行,例如小于 10KB 的 ROM 和 2KB 的 RAM。它支持裁剪,用户可以根据项目需要裁剪掉不必要的模块,从而在不同的应用场景中做到优化内存占用。

  3. 模块化架构

    • RT-Thread 采用了松耦合的模块化设计,系统功能通过不同的组件(如线程管理、内存管理、设备驱动、文件系统、网络协议栈等)进行独立开发。用户可以根据需求自由选择和组合这些组件。

  4. 多线程支持

    • RT-Thread 支持多任务管理,可以创建多个线程并同时运行,提供了丰富的线程控制函数(如线程创建、启动、挂起、恢复、删除等),让用户轻松实现并发执行。

  5. 跨平台支持

    • RT-Thread 可以在多种微控制器架构(如 ARM Cortex-M、Cortex-A、RISC-V、MIPS 等)上运行。它支持多种硬件平台,帮助开发者实现快速移植和开发。

  6. 设备驱动框架

    • RT-Thread 提供了丰富的设备驱动框架,支持串口、I2C、SPI、SD 卡、ADC 等常见外设设备,并且通过统一的驱动接口进行管理,方便开发者进行设备驱动的集成与开发。

  7. 软件包管理

    • RT-Thread 拥有自己的软件包管理器,称为 RT-Thread Package,可以轻松地集成和使用第三方的软件包,比如图形用户界面(GUI)、网络协议栈、AI 算法库等,大大简化了开发的过程。

  8. 文件系统与网络支持

    • RT-Thread 提供了多种文件系统的支持,如 FatFS、LittleFS。网络方面,RT-Thread 支持 TCP/IP 协议栈(如 lwIP),并为物联网开发者提供了 MQTT、CoAP 等协议栈,方便实现联网功能。

  9. 丰富的社区与生态

    • RT-Thread 拥有一个活跃的开发者社区,官方提供了详细的开发文档、教程、以及论坛支持。RT-Thread 生态系统涵盖了各种开发工具、板卡支持包(BSP)、以及大量的示例项目。


任务的创建和删除


在这次的示例中,我将展示如何使用不同的方式创建任务,并介绍如何使用一些 RT-Thread 的功能。

  1. thread_creation.c简短描述:

此任务通过两种不同的方式创建任务:静态创建和动态创建。静态创建是通过使用 rt_thread_init 函数,而动态创建是通过 rt_thread_create 函数来实现的。

注意:不要在 main 函数的末尾使用 while() 循环。否则,任务将永远不会被调度执行。

不正确的方式:

image.png

在上面的代码中,while(1) 会导致主线程无限循环,阻止其他线程被调度执行。

正确的方式:

image.png


在这个版本中,我们使用 return 0; 来结束 main 函数,从而允许 RT-Thread 的任务调度器接管系统。

正确方式效果:

  • 两个任务将成功创建并按预期执行。

不正确方式效果:

  • 由于主循环一直在运行,任务调度器无法正常工作。

  1. main.c 文件位置:/application-day2

这个 C 代码演示了如何使用 rt_thread_detach 和 rt_thread_delete 函数来删除任务。

  • rt_thread_detach 用于删除静态任务。

  • rt_thread_delete 不能删除静态任务,只能删除动态任务。


删除动态任务的示例:


image.png


上面的代码创建了一个动态任务,当计数器 i 达到 10 时,该任务会通过 rt_thread_delete 函数自我删除。


通过 rt_thread_detach 删除静态任务的示例:


image.png

此代码中的静态任务也会在 i == 10 时通过 rt_thread_detach 函数自我删除。


效果说明:

  • 动态任务在 i == 10 时被删除。

  • 静态任务通过 rt_thread_detach 删除。



总结:

本章节我们学习了如何使用RT-thread的不同方式来创建线程,以及获取线程的状态和删除等。那么在接下来的章节里,我们将继续学习RT-thread的高级内容。




关键词: RT-Thread    

专家
2024-10-14 20:12:59     打赏
2楼

工程是通过以开发板模式创建的?


助工
2024-10-15 19:29:33     打赏
3楼

有个问题,有传言说RTT内核不支持抢占,也就是说,如果低优先级线程不让出时间片,那高优先级线程就一直拿不到资源,这个问题真实存在吗?


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]