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

一共有两种方法

第一种:

在创建任务中可以传递参数,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()
{
 
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值