1620|3

6969

帖子

11

TA的资源

版主

楼主
 

[ ST NUCLEO-U575ZI-Q 测评] FREERTOS - 结构体多参数传递 [复制链接]

这次的例程是创建两个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按不同的频率闪烁。

 
2022-12-13 16.15拍摄的影片

 

 

此帖出自RF/无线论坛

最新回复

测评汇总:免费申请|ST NUCLEO-U575ZI-Q https://bbs.eeworld.com.cn/thread-1228653-1-1.html   详情 回复 发表于 2023-1-12 09:26
点赞 关注(1)
 

回复
举报

6105

帖子

4

TA的资源

版主

沙发
 

arduino真好

此帖出自RF/无线论坛

点评

谢谢!  详情 回复 发表于 2022-12-13 22:10
 
 

回复

6969

帖子

11

TA的资源

版主

板凳
 

谢谢!

此帖出自RF/无线论坛
 
 
 

回复

1万

帖子

203

TA的资源

管理员

4
 

测评汇总:免费申请|ST NUCLEO-U575ZI-Q https://bbs.eeworld.com.cn/thread-1228653-1-1.html

此帖出自RF/无线论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
寻迹小车设计

一. 起因、目标及车体设计 一、 概述以自制方式为主制作一辆低成本的寻迹小车,用于学习嵌入式应用(单片机),这个项目有两 ...

一个老外写的DDS(VHDL)的例子,很经典

-- DDFS.vhd ------------------------------------- -- Direct Digital Freq. Synthesis -- ------------------------------ ...

示波器V2.0调试过程贴(定期更新)

本人主要负责软件的开发,硬件由FLT9006负责,板已做好,汤汤已经把板发到我手上,现在开始全面调试工作 前天收到包裹,包括 ...

大学堂之系统初始化及时钟配置

本文主要介绍MSP430G2231的内部时钟结构,采用Grace进行该单片机的时钟配置为例,并介绍如何将Grace生成的初始化代码移植到IAR f ...

LCD单层菜单翻滚的实现

在很多项目中我们都需要菜单,特别是多层菜单应用比较广泛,但是写一个能够很方便移植的多层菜单非常麻烦,我们这里就先研究一下 ...

RC π型滤波电阻和电容的取值-------

RC π型滤波电阻和电容的取值------- 有人说按将经验取值,2πfR或者2πfc或者2πfl小于(开关频率1M)*1/5或者1/1 ...

示波器测量微弱信号放大时,人体经过示波器或者放大电路或者信号源,波形会波动

对uv级别直流信号进行放大,放大之后,感觉十分容易受到干扰。 已经共低5了

上海航芯 ACM32F070开发板+触控功能评估板评估 - 第三篇 时钟和温度显示界面

本测评实验使用RTC获取实时时间,使用I2C从板载传感器获取温度数据,将时间和温度像是在LCD屏幕上。 代码实现主要参考了S ...

【2022得捷电子创新设计大赛】-智能电子称重系统

一、功能概况 ESP32S2: 1、是基于CircuitPython语言开发 2、自带LCD屏,驱动LCD屏,输出信息 3、连接HX711称重计量 ...

【NUCLEO H533RE】USB串口CDC-ACM设备栈

测试介绍 CDC-ACM(Communication Device Class——Abstract Control Model)串口设备为一种通用串口设备,属于ACM ...

快速回复 返回顶部 返回列表