如何解决FreeRTOS |将用户输入的字符传递给任务
我正在使用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);
}
我在这里犯什么错误。
解决方法
例如使用队列:
在任务中,您等待队列。在用户界面任务中,您发布队列。
顺便说一句,您的代码在许多其他方面是错误的。到处都是UB。我建议从C本书开始,然后学习如何完成任务之间的通信,并最终从freeRTOS开始。
,app_main()是任务吗?如果没有,您将无法在其中调用vTaskDelay(),因为调度程序未运行,因此没有任何延迟。
您是否只是想将输入字符流传递给任务?如果是这样,那么流缓冲区可能是最合适的https://www.freertos.org/RTOS-stream-buffer-example.html
另一方面,您可能只是在创建任务时试图将一组数据传递给任务?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。