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

电子说

1.3w人已加入

描述

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

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

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

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

FreeRTOS

FreeRTOS

FreeRTOS

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

FreeRTOS

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

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

FreeRTOS

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

FreeRTOS

FreeRTOS

注意:

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

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

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



审核编辑:刘清

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分