|
为什么 a0,b0,c0设置为0就无法正常运行?
#include <Arduino_FreeRTOS.h>
#include <MemoryFree.h>
void TaskPrint1(void *param); //声明打印任务1
void TaskPrint2(void *param); //声明打印任务2
void TaskPrint3(void *param); //声明打印任务3
void TaskPrint4(void *param); //声明打印任务4
int led1 = A3;
int led2 = A4;
int led3 = A5;
int a0=0; //为什么设置为0无法正常运行
int a1=10000;// 等待10秒
int a2=1000; // 等待5秒
int b0=0; //为什么设置为0无法正常运行
int b1=15000;// 等待10秒
int b2=1000; // 等待5秒
int c0=0; //为什么设置为0无法正常运行
int c1=18000;// 等待10秒
int c2=1000; // 等待5秒
unsigned long changeTime1;
unsigned long changeTime2;
unsigned long changeTime3;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
changeTime1 = millis();
changeTime2 = millis();
changeTime3 = millis();
Serial.begin(9600);
while (!Serial);//等待串口连接后执行
xTaskCreate(TaskPrint1, "Print1", 128, NULL, 1, NULL); //创建任务1
xTaskCreate(TaskPrint2, "Print2", 128, NULL, 1, NULL); //创建任务2
xTaskCreate(TaskPrint3, "Print3", 128, NULL, 1, NULL); //创建任务3
xTaskCreate(TaskPrint4, "Print4", 128, NULL, 1, NULL); //创建任务4
xTaskCreate(TaskPrint5, "Print5", 128, NULL, 1, NULL); //创建任务5
vTaskStartScheduler(); //启动任务调度
}
/*
TaskCode:指向任务函数的指针
TaskName:任务的名称
StackDepth:任务堆栈大小,以字节数表示。
Parameter:指针,指向任务函数所接收的参数
Priority:任务的优先级,数字越大优先级越高,默认最大32级.
TaskHandle:返回一个句柄,用于以后进行函数调用(比如要删除某个任务或者修改其优先级)
时对任务的引用 该函数会返回pdPass(成功时)或错误代码
*/
void loop() {
}
//-------------------------------------------------------------
void TaskPrint1(void *param)
{
while (a0)
{
if (millis() - changeTime1 > a1) {
digitalWrite(led1, HIGH);
Serial.print("当前时间(毫秒)=");
vTaskDelay(a2 / portTICK_PERIOD_MS ); // 等待5秒
digitalWrite(led1, LOW);
changeTime1 = millis()-a2;
// 下面添加定时 10s 要执行的内容
}
//Serial.println("TaskPrint1...");
//vTaskDelay(1000 / portTICK_PERIOD_MS ); // 等待1秒
}
}
//------------------------------------------------------------
void TaskPrint2(void *param)
{
while (b0)
{
if (millis() - changeTime2 > b1) {
digitalWrite(led2, HIGH);
Serial.print("当前时间(毫秒)=");
vTaskDelay(b2 / portTICK_PERIOD_MS ); // 等待5秒
digitalWrite(led2, LOW);
changeTime2 = millis()-b2;
// 下面添加定时 10s 要执行的内容
}
//Serial.println("TaskPrint1...");
//vTaskDelay(1000 / portTICK_PERIOD_MS ); // 等待1秒
}
}
//----------------------------------------------------------
void TaskPrint3(void *param)
{
while (c0)
{
if (millis() - changeTime3 > c1) {
digitalWrite(led3, HIGH);
Serial.print("当前时间(毫秒)=");
vTaskDelay(c2 / portTICK_PERIOD_MS ); // 等待5秒
digitalWrite(led3, LOW);
changeTime3 = millis()-c2;
// 下面添加定时 10s 要执行的内容
}
//Serial.println("TaskPrint1...");
//vTaskDelay(1000 / portTICK_PERIOD_MS ); // 等待1秒
}
}
//----------------------------------------------------------
void TaskPrint4(void *param)
{
while (1)
{
Serial.println("");
Serial.println("运行中......");
Serial.print("当前时间(毫秒)=");
Serial.println(millis());
Serial.print("内存剩余(字节)=");
Serial.println(freeMemory());
Serial.println("TaskPrint4...");
vTaskDelay(3000 / portTICK_PERIOD_MS ); // 等待2秒
}
}
//----------------------------------------------------------
void TaskPrint5(void *param)
{
while (1)
{
Serial.println("");
Serial.println("运行中......");
Serial.print("当前时间(毫秒)=");
Serial.println(millis());
Serial.print("内存剩余(字节)=");
Serial.println(freeMemory());
Serial.println("TaskPrint5...");
vTaskDelay(5000 / portTICK_PERIOD_MS ); // 等待2秒
}
}
//----------------------------------------------------------
|
|