首页 > 其他分享 >第六章 FreeRTOS 任务相关 API 函数

第六章 FreeRTOS 任务相关 API 函数

时间:2024-10-29 20:21:04浏览次数:6  
标签:函数 FreeRTOS 创建 调用函数 任务 API 第六章 删除

6.1任务创建和删除 API 函数

FreeRTOS 的任务创建和删除 API 函数如表:

函数 xTaxkCreate()

此函数用来创建一个任务,任务需要 RAM 来保存与任务有关的状态信息(任务控制块),任务也需要一定的 RAM 来作为任务堆栈。如果使用函数 xTaskCreate()来创建任务的话那么这些所需的 RAM 就会自动的从 FreeRTOS 的堆中分配,因此必须提供内存管理文件,默认我们使用 heap_4.c 这个内存管理文件,而且宏 configSUPPORT_DYNAMIC_ALLOCATION 必须为 1

如果使用函数 xTaskCreateStatic()创建的话这些 RAM 就需要用户来提供了。新创建的任务默认就是就绪态的,如果当前没有比它更高优先级的任务运行那么此任务就会立即进入运行态开始运 行,不管在任务调度器启动前还是启动后,都可以创建任务。此函数也是我们以后经常用到的, 本教程所有例程均用此函数来创建任务,函数原型如下:

函数 xTaskCreateStatic()

此函数和 xTaskCreate()的功能相同,但是使用此函数创建的任务所需的 RAM需要用用户来提供 。 如果要使用此函数的话需要将宏 configSUPPORT_STATIC_ALLOCATION 定义为 1。

函数 xTaskCreateRestricted()

此函数也是用来创建任务的,只不过此函数要求所使用的 MCU 有 MPU(内存保护单元), 用此函数创建的任务会受到 MPU 的保护。其他的功能和函数 xTaxkCreate()一样。

函数 vTaskDelete()

删除一个用函数 xTaskCreate()或者 xTaskCreateStatic()创建的任务,被删除了的任务不再存 在,也就是说再也不会进入运行态。任务被删除以后就不能再使用此任务的句柄!

如果此任务 是使用动态方法创建的,也就是使用函数 xTaskCreate()创建的,那么在此任务被删除以后此任 务之前申请的堆栈和控制块内存会在空闲任务中被释放掉,因此当调用函数 vTaskDelete()删除任务以后必须给空闲任务一定的运行时间。 只有那些由内核分配给任务的内存才会在任务被删除以后自动的释放掉用户分配给任务的内存需要用户自行释放掉。

比如某个任务中用户调用函数 pvPortMalloc()分配了 500 字节的内 存,那么在此任务被删除以后用户也必须调用函数 vPortFree()将这 500 字节的内存释放掉,否则会导致内存泄露。此函数原型如下:

6.4 任务挂起和恢复 API 函数

有时候我们需要暂停某个任务的运行,过一段时间以后在重新运行。FreeRTOS 给我们提供了解决 这种问题的方法,那就是任务挂起和恢复,当某个任务要停止运行一段时间的话就将这个任务挂起,当要重新运行这个任务的话就恢复这个任务的运行。FreeRTOS 的任务挂起和恢复 API 函 数如表所示:

函数 vTaskSuspend()

此函数用于将某个任务设置为挂起态,进入挂起态的任务永远都不会进入运行态。退出挂 起态的唯一方法就是调用任务恢复函数 vTaskResume()或 xTaskResumeFromISR()

函数 vTaskResume()

将一个任务从挂起态恢复到就绪态,只有通过函数 vTaskSuspend()设置为挂起态的任务才 可以使用 vTaskRexume()恢复!函数原型如下:

函数 xTaskResumeFromISR()

此函数是 vTaskResume()的中断版本,用于在中断服务函数中恢复一个任务

小点:

1.start_task 任务的职责就是用来创建其他的任务或者信号量、消息队列等的,当创建完成以后就可以删除掉 start_task 任务。调用函数 vTaskStartScheduler()开启 FreeRTOS 的任务调度器,FreeRTOS 开始运行。

2.使用任务宏定义任务优先级,堆栈大小等,一般有关一个任务 的东西我们的放到一起,比如任务堆栈、任务句柄、任务函数声明等,这样方便修改。这些东西可以放到一个.h 头文件里面去,例程里面任务数比较少,所以就直接放到 main.c 文件里 面了,要是工程比较大的话最好做一个专用的头文件来管理.

3.在 main 函数中一开始肯定是初始化各种硬件外设,初始化完外设以后调用函数 xTaskCreate()创建一个开始任务,注意创建开始任务是在调用函数 vTaskStartScheduler()开启任 务调度器之前,这样当后面开启任务调度器以后就会直接运行开始任务了。其他任务的创建就 放到开始任务的任务函数中,由于开始任务的职责就是创建其他应用任务和信号量、队列等这 些内核对象的,所以它只需要执行一次,当这些东西创建完成以后就可以删除掉开始任务了。

4.如果使用静态方 法 的 话 需 要 用 户 实 现 两 个 函 数 vApplicationGetIdleTaskMemory() 和 vApplicationGetTimerTaskMemory()。通过这两个函数来给空闲任务和定时器服务任务的任务堆 栈和任务控制块分配内存,

标签:函数,FreeRTOS,创建,调用函数,任务,API,第六章,删除
From: https://blog.csdn.net/qq_45150278/article/details/143258403

相关文章

  • RPC和API关系
    RPC和APIRPC(RemoteProcedureCall)和API(ApplicationProgrammingInterface)是在软件开发和分布式系统领域中经常涉及到的两个概念,它们之间存在着一定的关联和区别,以下是对它们关系的详细阐述:一、定义回顾RPCRPC即远程过程调用,是一种允许一台计算机上的程序调用另一台计......
  • 【Swagger】Swagger2和Swagger3使用API文档的可视化工具(xiaoymin)
    Swagger时接口文档生成工具,在前后端分离时代很好用。不过,当接口多了,看起来不太符合国人的习惯。因为:缺乏搜索功能接口类多起来,找接口有如大海捞针。接口边上,没有带着接口注释看Model,需要拖拽到最后,没有很自然的切换。所以,xiaoymin在swagger的基础上,做到了更好的可视化......
  • Vue基础–Options API
    复杂data的处理方式◼我们知道,在模板中可以直接通过插值语法显示一些data中的数据。◼但是在某些情况,我们可能需要对数据进行一些转化后再显示,或者需要将多个数据结合起来进行显示;比如我们需要对多个data数据进行运算、三元运算符来决定结果、数据进行某种转化后显示;......
  • [Azure] 使用 Cosmos DB for NoSQL 的 API
    什么是AzureCosmosDBforNoSQL?AzureCosmosDBforNoSQL是用于处理文档数据模型的原生非关系服务。它可以使用灵活的架构任意存储原生JSON文档。数据会自动编制索引,并可使用专为JSON数据设计的SQL查询语言进行查询。使用适用于常用框架(如.NET、Python、Java和Node......
  • 购物平台数据抓取实战指南:从API到深度分析
    在当今电商盛行的时代,淘宝、京东、拼多多等购物平台已成为消费者日常购物的主要场所。对于企业、市场分析师及开发者而言,这些平台上的数据无疑是一座宝贵的金矿。本实战指南将带您从API接口出发,一步步实现购物平台数据的抓取、处理到深度分析。一、API接口初探API(Application......
  • 如何获得淘宝/天猫淘宝商品详情 API接口
    要获得淘宝商品详情API接口,通常可以通过以下几种途径:一、淘宝开放平台:注册账号:开发者需要在淘宝开放平台上注册账号,成为开发者。创建应用:在注册完成后,创建一个应用并提交审核。审核通过后,平台会为应用分配相应的API密钥(AppKey和AppSecret)。获取接口:使用分配的API密......
  • API 接口:电商行业高效运作的关键驱动
    在电商行业中,API(ApplicationProgrammingInterface,应用程序编程接口)接口正逐渐成为高效运作的关键驱动因素。它就像是电商生态系统中的“桥梁”和“纽带”,连接着不同的软件系统、服务和数据源,为电商企业提供了强大的功能扩展和集成能力。一、API接口在电商行业中的重要......
  • Performance API 实现前端资源监控
    1.PerformanceAPI的用处PerformanceAPI 是浏览器中内置的一组工具,用于测量和记录页面加载和执行过程中的各类性能指标。它的主要用处包括:监控页面资源加载:跟踪页面中的资源(如CSS、JavaScript、图片)的加载时间。分析页面加载时间:从导航到页面完全渲染的所有时间点。衡量......
  • api 接口 验证 timestamp 接口api测试
    接口(API)测试没有总结,就不能认识自己,就不知成功在哪里,失败在哪里;没有思考,就没有提高,没有进步自动化测试分层【什么是API】API是ApplicationProgrammingInterface的简写。实现了两个或多个独立系统或模块间的通信和数据交换能力。【什么是API测试】API测试不同于UI自......
  • IoC在ASP.NET Web API中的应用
    IoC在ASP.NETWebAPI中的应用 控制反转(InversionofControl,IoC),简单地说,就是应用本身不负责依赖对象的创建和维护,而交给一个外部容器来负责。这样控制权就由应用转移到了外部IoC容器,控制权就实现了所谓的反转。比如在类型A中需要使用类型B的实例,而B实例的创建并不由A来负责,......