Freertos学习第二天-Freertos基于ESP32-给任务传递单个参数

devtools/2024/9/22 16:08:46/

一共有两种方法

第一种:

在创建任务中可以传递参数,void *pt 传递了一个空指针

void Task1(void *pt)

可以运用这个空指针来设置引脚

byte * pbLED1PIN;pbLEDPIN = &LED1_PIN;void * pvLED1PIN;pvLED1PIN = (void *)pbLED1PIN;

以上代码意思是

byte * pbLED1PIN;

设置一个字节型指针变量

pbLED1PIN = &LED1_PIN;

将这个引脚的地址传递给创建的指针变量

void * pvLED1PIN;

创建一个空的指针

 pvLED1PIN = (void *)pbLED1PIN;

将刚才创建的字节型指针型变量转化为空指针变量

xTaskCreate(Task1,"Blink 23",1024,pvLED1PIN,1,NULL)

然后再将得到的空指针变量传递给任务

在任务函数中

void Task1(void *pt)
{byte * pbLEDPIN;pbLED1PIN =(byte*)pt;byte LEDPIN;LEDPIN = *pbLEDPIN;pinMode(LEDPIN, OUTPUT);while(1){digitalWrite(LEDPIN,!digitalRead(LEDPIN));vTaskDelay(1000);//vTaskDelay(pdMS_TO_TICKS(timeDelay));//vTaskDelay(3000/portTICK_PERIOD_MS));}
}
byte * pbLEDPIN;
pbLEDPIN =(byte*)pt;
byte LEDPIN;
LEDPIN = *pbLEDPIN;

1 先创建一个字节型指针变量

2 将传入的空的字节型变量转化为字节型变量

3 创建一个字节变量、

4 将指针变量的数据传递个创建好的指针变量

第二种

(void *)&LED2_PIN

 现将LED2_PIN的地址取出来然后将其转化为空指针,再传入任务函数

xTaskCreate(Task2,"Blink 21",1024,(void *)&LED2_PIN,1,NULL);

 先将空指针转化为字节型指针,然后再将该地址的数据取出。

byte LEDPIN = *(byte *)pt;
void Task2(void *pt)
{byte LEDPIN = *(byte *)pt;pinMode(LEDPIN, OUTPUT);pinMode(21,OUTPUT);while(1){digitalWrite(LEDPIN,!digitalRead(LEDPIN));vTaskDelay(3000);//vTaskDelay(pdMS_TO_TICKS(timeDelay));//vTaskDelay(3000/portTICK_PERIOD_MS));=}
}

以下为完整版代码

byte LED1_PIN = 23;
byte LED2_PIN = 21;
void Task1(void *pt)
{byte * pbLEDPIN;pbLEDPIN =(byte*)pt;byte LEDPIN;LEDPIN = *pbLEDPIN;pinMode(LEDPIN, OUTPUT);while(1){digitalWrite(LEDPIN,!digitalRead(LEDPIN));vTaskDelay(1000);//vTaskDelay(pdMS_TO_TICKS(timeDelay));//vTaskDelay(3000/portTICK_PERIOD_MS));}
}void Task2(void *pt)
{byte LEDPIN = *(byte *)pt;pinMode(LEDPIN, OUTPUT);pinMode(21,OUTPUT);while(1){digitalWrite(LEDPIN,!digitalRead(LEDPIN));vTaskDelay(3000);//vTaskDelay(pdMS_TO_TICKS(timeDelay));//vTaskDelay(3000/portTICK_PERIOD_MS));=}
}
void setup()
{Serial.begin(9600);byte * pbLED1PIN;pbLED1PIN = &LED1_PIN;void * pvLED1PIN;pvLED1PIN = (void *)pbLED1PIN;if( xTaskCreate(Task1,"Blink 23",1024,pvLED1PIN,1,NULL) ==pdPASS){Serial.println("Task1 Created.");}xTaskCreate(Task2,"Blink 21",1024,(void *)&LED2_PIN,1,NULL);
}void loop()
{}


http://www.ppmy.cn/devtools/4112.html

相关文章

计算机网络——GBN协议实现

实验目的 编程模拟实现GBN可靠传输软件 实验内容 C 程序模拟实现Go-Back-N可靠数据传输,需要编写一个发送端程序和一个测试端程序来模拟传输过程 具体流程 1. 编写发送端程序,调用库实现socket连接,然后主要实现滑动窗口,接收…

神经网络压缩图像

简介 典型的压缩管道由四个组件组成: 编码:输入图像 x x x通过编码器函数 ε \varepsilon ε,将其转换为潜在表示 z z z。 量化:截断 z z z以丢弃一些不重要的信息 熵编码:使用某种形式的熵编码(例如&…

Tomcat下载配置地址

IntelliJ IDEA是一个强大的集成开发环境,能够大大简化Java应用程序的开发和部署过程。而Tomcat作为一个流行的Java Web服务器,其与IntelliJ IDEA的整合能够提供便捷的开发环境,让开发人员更专注于代码的创作与优化。 在配置IntelliJ IDEA以使…

docker最新版安装

docker安装 检查系统版本即卸载旧docker安装docker依赖工具及底层依赖、仓库源安装dockerdocker阿里云镜像资源站参考 检查系统版本即卸载旧docker # 查看操作系统的发行版号 uname -r# 查看系统版本 cat /etc/redhat-release# 卸载旧版本docker(如已安装过) yum remove docke…

Jackson 2.x 系列【25】Spring Boot 集成之起步依赖、自动配置

有道无术,术尚可求,有术无道,止于术。 本系列Jackson 版本 2.17.0 本系列Spring Boot 版本 3.2.4 源码地址:https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 1. 前言2. 起步依赖3. 自动配置3.1 JacksonPrope…

力扣:141. 环形链表

力扣:141. 环形链表 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾…

【MySQL面试题pro版-13】

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据…

负载均衡的原理及算法简介

负载均衡(Load Balancing)是一种用于在多台服务器之间分配网络流量的技术,旨在优化系统资源利用率、提高服务可用性、增强系统的伸缩性和容错能力。其基本原理是将来自客户端的请求分散到一个服务器集群中的各个服务器上,而不是让…