一共有两种方法
第一种:
在创建任务中可以传递参数,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()
{
}