freertos变量问题-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1246|回复: 0

[未解决] freertos变量问题

[复制链接]
发表于 2021-11-18 09:46 | 显示全部楼层 |阅读模式
为什么 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秒
  }
}
//----------------------------------------------------------
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 21:46 , Processed in 0.075180 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表