0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS给任务传递两个参数LEDpin和vTaskDelay

工程师邓生 来源:硬件会 作者:硬件会 2022-09-14 15:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

补充:上节漏掉一个知识点:任务中的延时要用vTaskDelay,这是当前线程延时函数,不要用delay。delay是整个系统延时函数。

继续上节的延伸,从上篇文章的例子中可以看出两个任务是让两个LED闪烁,创建的两个任务task1和task2极其相似,除了传递的参数LED_PIN引脚不一样,还有就是LED灯闪烁的时间不一样vTaskDelay(1000)。

于是可以想到给任务传递两个参数,LEDpin和vTaskDelay。 先理解以下知识:

结构体:是存放不同类型数据的容器。例如:

1053c99e-3051-11ed-ba43-dac502259ad0.png

1082872a-3051-11ed-ba43-dac502259ad0.png

10bd3636-3051-11ed-ba43-dac502259ad0.png

初始化结构体成员变量的方法有好几种可以参考此连接:(58条消息) C语言结构体初始化的四种方法_ericbars的博客-CSDN博客_结构体初始化 typedef:给类型起别名。例如

1130c68c-3051-11ed-ba43-dac502259ad0.png

结构体“.”和“->”的区别: .

左边是一个结构体变量;->左边是一个指向结构体的指针。例如

1157c476-3051-11ed-ba43-dac502259ad0.jpg

理解了以上知识点后,传递多个参数是将参数定义为结构体成员变量,示例如下:

118e741c-3051-11ed-ba43-dac502259ad0.png

11c38ee0-3051-11ed-ba43-dac502259ad0.png

注意:

1)Arduino变量初始化要放在setup里,放到外边,有可能会出错。

2)全局变量内存的值不会删除。局部变量的内存值在setup运行完后,会自动删除,所以如果将声明结构体变量LEDFLASH led1, led2;放到setup里,传递的参数每次都是随机的,参数值会出错。

3)freertos 语法规定的创建任务的函数参数必须是输入void空指针 ,然后无返回的void类型。



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FreeRTOS
    +关注

    关注

    14

    文章

    497

    浏览量

    66355
  • Arduino
    +关注

    关注

    190

    文章

    6515

    浏览量

    195969
  • ESP32
    +关注

    关注

    24

    文章

    1083

    浏览量

    20858

原文标题:FreeRTOS给任务传递多个参数(ESP32)

文章出处:【微信号:硬件会,微信公众号:硬件会】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    FreeRTOS 空闲任务

    FreeRTOS 中很多人会注意到为什么有一叫IDLE task的任务占用了CPU百分之九十多的使用权,但是这个任务并没有自己手动创建。原因就是这个空闲
    发表于 12-04 07:35

    freertos关闭任务调度的方法

    */ xTaskResumeAll(); } /* 示例任务 */ void example_task(void *pvParameter) { for(;;) { vTaskDelay(1000);// 延时1000
    发表于 11-17 06:47

    FreeRtos 能否同时使用两个 CPU?

    的情况下,CM0 更愿意专门用于管理外设。 - 是否有在 CM0 和 CM4 中同时运行代码的简单示例或教程? - FreeRtos 能否同时使用两个 CPU?
    发表于 11-11 08:28

    FreeRTOS任务调度及优先级问题

    大家好,最近本人在学习FreeRTOS ,之前有过一些裸机开发的经验,目前知道了FreeRTOS任务是基于时间片轮转来调度,也就是知道了任务会基于各个时间片来运行。 于是联想了如果有
    发表于 11-06 02:18

    硬件SPI两个CS操作两个norflash,怎么互斥操作两个norflash?

    硬件SPI两个CS操作两个norflash,怎么互斥操作两个norflash,有一norflash被模拟成U盘,会在中断中操作spi。
    发表于 09-26 06:18

    基本半导体连获两个行业奖项

    近日,基本半导体凭借在碳化硅模块领域的突出表现,连获“国产SiC模块TOP企业奖”和“年度优秀功率器件产品奖”两个行业奖项。
    的头像 发表于 09-05 16:31 886次阅读

    【RA4L1-SENSOR】电压检测器第一程序增加 FreeRTOS显示量程0-3300 mV和量程0-15000mV]

    地方修改; 多个模块同时访问时容易出现竞态条件; 不适用于多任务并发的系统。 在FreeRTOS中,队列是一线程安全的、先进先出(FIFO)缓冲结构,用于任务之间或者
    发表于 07-11 10:53

    【RA4L1-SENSOR】05 按键实现RTOS任务切换

    是只做了两个任务来回切换,之后再完善多任务切换的。 #include \"Key_Switch_Task.h\" /* KeySwitch entry function
    发表于 06-16 22:38

    【RA4L1-SENSOR】04 用FreeRTOS重构工程

    东西,我就混着使用了。任务(Task)是FreeRTOS官方的叫法,而线程(Thread)是在E2Studio中的写法。 在我们之前的裸机程序中,有两个功能需要放在while死循环中:电容按键扫描以及
    发表于 06-16 22:28

    FreeRTOS读取ADS1299数据有误

    vTaskDelay(1) 在发送任务中:读取队列中的数据——发送到上位机 但是数据会出错,正常数据的范围是-1到1,用freertos就会出现超出正常范围的数据, 而在main函数的主循环中采集数据、滤波、发送到上位机就
    发表于 05-05 22:48

    stm32f103用freertos对一采样率为1kHz的传感器,进行采样,数据出差

    您好,请问,用FreeRTOS的队列对采样率1khz的传感器读取数据, 在采集任务中:通过spi读取数据——滤波(ARM-DSP库)——将数据写入队列——延时vTaskDelay(1) 在发送
    发表于 05-05 22:44

    两个不同频率晶振靠的近会怎样

    晶振的振荡本质上是一种机械振动(在压电晶体层面)。当两个晶振靠得很近时,它们的机械振动可能会相互影响。一晶振的振动可能会通过电路板或者外壳等介质传递给另一晶振,从而改变另一
    的头像 发表于 01-20 13:55 2018次阅读
    <b class='flag-5'>两个</b>不同频率晶振靠的近会怎样

    如何把两个数据返回调用函数

    已经知道函数会返回两个数据,提前申请两个元素的内存,并且把数组作为参数传递过去,把返回值放在数组中就行。 第三种,定义一全局的结构体变量,
    的头像 发表于 01-08 10:15 678次阅读

    【RA-Eco-RA4E2-64PIN-V1.0开发板试用】05、FreeRTOS

    LED1_thread_entry.c和LED2_thread_entry.c,这两个文件是留给我们写线程具体功能的。 在LED1_thread_entry.c中的死循环中添加代码 R_IOPORT_PinWrite(&
    发表于 12-17 11:53

    DS90UB941AS是否支持带两个屏? 两个屏是要求一样的参数才行吗?

    DS90UB941AS是否支持带两个屏? 两个屏是要求一样的参数才行么?
    发表于 12-12 06:07