SCoop库定义线程是用以下两种语句
defineTask(Task1);
defineTaskLoop(Task2);
报错信息如下
可见,这个看似函数的玩意,只是利用#define给扩展成了一个大的类,并在其中实现setup和loop这两个函数,而在这么大的一个扩展中,最后定义完类,直接就用类名定义了一个变量也就是
Task1 Task1;
所以会导致“变量Task1不是类型名”,毕竟是把辛辛苦苦定义的类型名,又给定义成了变量。。可不就得报错么。
改起来也不难,就把变量名改一下就可以了
右键报错的defineTaskLoop,转到定义
往上滑几下滚轮,找到
将其改为
#define defineTaskEnd(mytask) } ; mytask mytask##_ ;
也即是将变量名变成了
Task1 Task1_;
ctrl+s保存,回去再看,就不报错了,此处测试代码如下
#include <SCoop.h>//引入头文件
defineTaskLoop(Task1)//快速定义 省去setup
{
digitalWrite(13, HIGH);
sleep(1000);
digitalWrite(13, LOW);
sleep(1000);
}
defineTaskLoop(Task2)//快速定义 省去setup
{
digitalWrite(12, HIGH);
sleep(500);
digitalWrite(12, LOW);
sleep(500);
}
void setup() {
mySCoop.start();
pinMode(12, OUTPUT);
}
void loop()
{
yield();
}
在12引脚上接上一个LED小灯,编译程序,上传到Arduino板子,可以看到两个灯交替的闪烁起来。