电子说
补充:上节漏掉一个知识点:任务中的延时要用vTaskDelay,这是当前线程延时函数,不要用delay。delay是整个系统延时函数。
继续上节的延伸,从上篇文章的例子中可以看出两个任务是让两个LED闪烁,创建的两个任务task1和task2极其相似,除了传递的参数LED_PIN引脚不一样,还有就是LED灯闪烁的时间不一样vTaskDelay(1000)。
于是可以想到给任务传递两个参数,LEDpin和vTaskDelay。 先理解以下知识:
结构体:是存放不同类型数据的容器。例如:
初始化结构体成员变量的方法有好几种可以参考此连接:(58条消息) C语言结构体初始化的四种方法_ericbars的博客-CSDN博客_结构体初始化 typedef:给类型起别名。例如
结构体“.”和“->”的区别: .
左边是一个结构体变量;->左边是一个指向结构体的指针。例如
理解了以上知识点后,传递多个参数是将参数定义为结构体成员变量,示例如下:
注意:
1)Arduino变量初始化要放在setup里,放到外边,有可能会出错。
2)全局变量内存的值不会删除。局部变量的内存值在setup运行完后,会自动删除,所以如果将声明结构体变量LEDFLASH led1, led2;放到setup里,传递的参数每次都是随机的,参数值会出错。
3)freertos 语法规定的创建任务的函数参数必须是输入void空指针 ,然后无返回的void类型。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !