FreeRTOS浅析:解决两个任务运行冲突,系统停止一个任务唤醒另一个任务的方法

2023-05-16

FreeRTOS中的任务和多线程的概念差不多,但是任务的本质是把时间片无限的切小,小到人分辨不出来,其实还是一个时间只能运行一个任务,这是和多线程的根本区别。

FreeRTOS中的任务有几种运行态:

如果我正在运行A任务,但是B任务起来的时候我需要把A任务挂起,等B任务结束A任务继续运行,不能冲突。下面是demo。

首先运行一个主程序,开启一个任务,里面再开启两个任务

extern xTaskHandle dTask_Handler;//定义任务句柄
extern xTaskHandle cTask_Handler;

static void democode_thread2(void *param)
{

    xTaskCreate(democode_thread, ((const char*)"socket_service_thread"), 1024, NULL, tskIDLE_PRIORITY + 1, (TaskHandle_t*)&dTask_Handler);


	xTaskCreate(democode_thread1, ((const char*)"socket_service_thread1"), 1024, NULL, tskIDLE_PRIORITY + 1, (TaskHandle_t*)&cTask_Handler);
    
    eTaskGetState(dTask_Handler);//查询任务状态
    eTaskGetState(cTask_Handler);
    
    vTaskDelete(NULL);

}


void demo2()
{
    if(xTaskCreate(democode_thread2, ((const char*)"socket_service_thread1"), 1024, NULL, \
            tskIDLE_PRIORITY + 1, (TaskHandle_t*)&eTask_Handler) != pdPASS)
            Ihoment_printf(IHOMENT_ERROR, "\n\r%s xTaskCreate(socket_service_thread) failed", __FUNCTION__);

}

任务一开启之后挂起.任务2开启之后暂停十秒之后释放任务1。

static void democode_thread1(void *param)
{
    printf("into democode_thread1\n");
    vTaskSuspend(NULL);//挂起任务
    while(1)
    {
        printf("demo1 start!\n");
        vTaskDelay(200);
    }
}

static void democode_thread(void *param)
{
    while(1)
    {
         printf("demo start!\n");
         vTaskDelay(10000);//延时十秒
         vTaskResume(cTask_Handler);//释放任务
    }
}

这样就会是这种情况,先democode_thread1进去任务,然后挂起,等到democode_thread10s之后唤醒democode_thread1之后再继续运行。

这是给某些项目情景中两个任务不能冲突运行提供一种解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeRTOS浅析:解决两个任务运行冲突,系统停止一个任务唤醒另一个任务的方法 的相关文章

  • stm32芯片的焊接

    stm32的焊接 xff0c 使用到东西 xff1a 松香 xff0c 维修佬 xff0c 烙铁 1 首先将stm32的一个角的脚上涂上维修佬 xff0c 要特别特别少 xff0c 太多了 xff0c 容易粘连到其他脚上面 xff0c 不好
  • Modbus-RTU通讯协议中CRC校验码的计算步骤

    在CRC计算时只用8个数据位 xff0c 起始位及停止位 xff0c 如有奇偶校验位也包括奇偶校验位 xff0c 都不参与CRC计算 CRC计算方法是 xff1a 1 预置1个16位的寄存器为十六进制FFFF xff08 全1 xff09
  • 一个很好的makefile例子(经典)

    转自http www cnblogs com sld666666 archive 2010 04 08 1707789 html 相信在unix下编程的没有不知道makefile的 xff0c 刚开始学习unix平台 下的东西 xff0c
  • 无线传输距离计算公式

    转自一篇文档 无线传输距离计算 Pr dBm 61 Pt dBm Ct dB 43 Gt dB FL dB 43 Gr dB Cr dB Pr xff1a 接受端灵敏度 Pt 发送端功率 Cr 接收端接头和电缆损耗 Ct 发送端接头和电缆损
  • hex文件解析

    Keil开发环境编程时对源程序进行编译链接后都 可以 成一个可执行文件即 hex文件 xff0c 但是有不完全是一个可执行文件 然后 可以 通过烧录工具烧写到对应的单片机的 flash中 xff0c 当然也还有其他方法可以进行烧录 大家在编
  • Ubuntu下如何挂载以及卸载U盘?

    l 在挂载U盘前 xff0c 首先运行命令cat proc partitions xff0c 看看现在系统中有哪些分区 插上u盘以后 xff0c 再次运行上述命令 xff0c 看看多出来什么分区 xff08 通常是sda1 xff0c 由于
  • 链接脚本文件的写法

    对于 lds文件 xff0c 它定义了整个程序编译之后的连接过程 xff0c 决定了一个可执行程序的各个段的存储位置 虽然现在我还没怎么用它 xff0c 但感觉还是挺重要的 xff0c 有必要了解一下 先看一下GNU官方网站上对 lds文件
  • Ubuntu18.04+思岚激光雷达A2M7+ROS测试

    Ubuntu18 04 43 思岚激光雷达A2M7 43 ROS测试 1 测试环境搭建 测试环境 xff1a Ubuntu18 04 43 ROS Melodic测试工具 xff1a 思岚科技激光雷达A2M7 43 USB转接工具 2 下载
  • ROS系统的串口数据读取和解析

    原帖地址 xff1a https blog csdn net Tansir94 article details 81357612 一 Ubuntu下的串口助手cutecom 下载 xff1a sudo apt get install cut
  • tcp buffer设置

    本文基于CENTOS DEBIAN UBUNTU 编写 我有两台位于不同数据中心的服务器 xff0c 都用来处理很多并行的大文件传输 但是处理大文件 xff0c 网络性能非常差 并且涉及到一个大文件 xff0c 会导致性能降级 我怎样通过调
  • URL模块之parse方法

    url parse urlString boolean boolean parse这个方法可以将一个url的字符串解析并返回一个url的对象 参数 xff1a urlString指传入一个url地址的字符串 第二个参数 xff08 可省 x
  • Makefile 知识点记录

    Makefile 知识点记录 1 依赖类型 xff1a normal Prerequisites xff0c order only prerequisites normal Prerequisites xff1a 标准依赖具有两层含义的声明
  • 视频矩阵系统中三代OSD字符叠加技术全面解析

    视频矩阵系统中三代OSD字符叠加技术全面解析 屏显信息更丰富 中文效果更出色 使用设置更灵活 视频矩阵系统中三代OSD字符叠加技术全面解析 前言 xff1a 在以矩阵为控制中枢的视频监控系统中 xff0c 大量的视频信号需要在数目有限的监视
  • CV_...报错

    在出错的程序里面添加相应的头文件即可 1 CV LOAD IMAGE COLOR was not declared in this scope include 34 opencv2 imgcodecs legacy constants c
  • 优化IMU数据避免突变的建议

    影响IMU数据变化的主要因素是应力 温度和电气干扰 xff1b xff11 温度的的骤升 xff0c 比如芯片的位置附件有相关器件几秒钟工作一次 xff0c 此时温度骤升 xff0c 可能会引起数据也发生突变 xff0c 周围有变化的热源和
  • JAVA HtmlParser Filter解析网页和表格(半个教程)

    package sometry import java io BufferedReader import java io InputStreamReader import java io FileInputStream import jav
  • 物联网系统网关开发与实现

    项目是大学时期的课程设计 摘要 粤嵌GEC 6818开发板作为系统的网关板 xff0c 其为系统数据的中枢 启动串口收发 xff0c 可以接收到ZigBee网络的协调器通过串口发送的数据 xff1b lCD屏幕编程 xff0c 实现传感网的
  • python 人脸识别和手势识别应用(face++)开发

    一 基础认识 本项目使用的是face 43 43 平台 xff0c 人脸识别 43 手势识别双确认显示 python编程 xff0c 代码简介 xff0c 方便扩展 该项目适用于Windows系统和Linux系统 xff0c 但必须安装相应
  • 产品开发阶段 EVT DVT PVT MP

    PLM xff08 Product Lifecycle Management xff09 System xff1a PLM是协助产品能够顺利完成在新产品开发 xff08 NPI xff1a New Product Introduction
  • OLED的波形曲线、进度条、图片显示(STM32 HAL库 模拟SPI通信 5线OLED屏幕)详细篇

    少废话 xff0c 先上效果图 屏幕显示效果 全家福 观看演示效果 xff1a https www bilibili com video BV13V411b78V 一 基础认识及引脚介绍 屏幕参数 xff1a 尺寸 xff1a 0 96英寸

随机推荐