这次的例程是创建两个LED闪烁的程序,闪烁时间各不相同,如何做到同一程序,传入不同参数来实现功能呢? 先写一个任务创建函数,用指针来接收结构体数据。 - void ledFlash(void *pt){
- LEDFLASH *ptLedFlash = (LEDFLASH *)pt;
- byte pin = ptLedFlash->pin;
- int delayTime = ptLedFlash->delayTime;
- pinMode(pin,OUTPUT);
- while(1){
- digitalWrite(pin,!digitalRead(pin));
- vTaskDelay(delayTime);
- }
- }
复制代码为了给任务创建时传递多个参数,这里用结构体来传递多个参数。 - typedef struct {
- byte pin;
- int delayTime;
- } LEDFLASH;
复制代码setup函数: - void setup() {
- Serial.begin(115200);
- led1.pin = PB7;
- led1.delayTime = 200;
- led2.pin = PC7;
- led2.delayTime = 500;
- if(xTaskCreate(ledFlash,
- "FLASH LED",
- 1024,
- (void *)&led1,
- 6,
- NULL) == pdPASS)
- Serial.println("led1,flash task Created.");
-
- if (xTaskCreate(ledFlash,
- "Flash LED.",
- 1024,
- (void *)&led2,
- 6,
- NULL) == pdPASS)
- Serial.println("led2 flash task Created.");
- vTaskStartScheduler();
- }
复制代码这样就实现了同一个任务接收不一样的参数,实现不同的功能,整体程序如下: - #include <Arduino.h>
- #include <STM32FreeRTOS.h>
- typedef struct {
- byte pin;
- int delayTime;
- } LEDFLASH;
- void ledFlash(void *pt){
- LEDFLASH *ptLedFlash = (LEDFLASH *)pt;
- byte pin = ptLedFlash->pin;
- int delayTime = ptLedFlash->delayTime;
- pinMode(pin,OUTPUT);
- while(1){
- digitalWrite(pin,!digitalRead(pin));
- vTaskDelay(delayTime);
- }
- }
- LEDFLASH led1,led2;
- void setup() {
- Serial.begin(115200);
- led1.pin = PB7;
- led1.delayTime = 200;
- led2.pin = PC7;
- led2.delayTime = 500;
- if(xTaskCreate(ledFlash,
- "FLASH LED",
- 1024,
- (void *)&led1,
- 6,
- NULL) == pdPASS)
- Serial.println("led1,flash task Created.");
-
- if (xTaskCreate(ledFlash,
- "Flash LED.",
- 1024,
- (void *)&led2,
- 6,
- NULL) == pdPASS)
- Serial.println("led2 flash task Created.");
- vTaskStartScheduler();
- }
- void loop() {
- // put your main code here, to run repeatedly:
- }
复制代码上传给开发板后实现两个LED按不同的频率闪烁。
出处:社区用户:lugl发布
|