首页 > 解决方案 > 自由RTOS | 将用户输入的字符传递给任务

问题描述

我正在使用 FreeRTOS 开发 ESP-32,我想要实现的是,我想将用户输入的字符传递给任务。下面的代码是我写的,但它不起作用正如预期的那样,

#include <stdio.h>

#include <freertos/FreeRTOS.h>
#include <freertos/task.h>

void task(void* pvParameters){
  char* data;
  data = (char *) pvParameters;
  while (true)
  {
    printf("%s\n", data);
    vTaskDelay(2000 / portTICK_PERIOD_MS);
  }
}

void app_main(void){
  
  char c = 0;
  char * data = "Hello";
  while (c != '\n')
  {
    c = getchar();
    if(c != 0xff){
      data = &c ;
      printf(" The entered %c\n", c);
      printf(" The data entered %c\n", *data);
    }
    vTaskDelay(100/portTICK_PERIOD_MS);
  }
  xTaskCreate(task, "task1", 4096, (void*) data, 1, NULL);
}


我在这里犯了什么错误。

标签: cembeddedtaskesp32freertos

解决方案


app_main() 是一项任务吗?如果不是,您不能在其中调用 vTaskDelay(),因为调度程序没有运行,所以没有什么可以延迟的。

您只是想将输入字符流传递给任务吗?如果是这样,那么流缓冲区可能是最合适的https://www.freertos.org/RTOS-stream-buffer-example.html

另一方面,您可能只是在创建任务时尝试将一组数据传递给任务?


推荐阅读