首页 > 解决方案 > 如何知道从任务 B 发送到任务 A 的数据类型?

问题描述

所以假设我有一个任务 ( taskA),它接受来自另一个任务 ( taskB) 的数据。我如何制作taskA它可以接受泛型类型?void数组是不允许的,所以这是不可能的。

void buff[100];  // not allowed !!

void taskB(void *params)
{
  while(1) {
    xQueueReceive(queueA, buff, portMAX_DELAY);
  }

}

void taskA(void *params) 
{
   char data[] = "something";
   while(1) {
     xQueueSend(queueA, data, portMAX_DELAY);
   }
}

标签: cembeddedfreertos

解决方案


如果类型容易频繁更改(b/w 不同的调用),一种简单的方法是,将类型数据添加到函数装饰中,例如;

typedef enum {enumInt, enumDbl, enumChr, ... <add other types>} TypeInfo;

void taskB(void *ptr, TypeInfo t) {
    switch (t) {
        case enumInt:
            int *p = (int *)ptr;
            // do stuff as if data is integer
            break;
        case enumDbl:
            double *p = (double *)ptr;
            // do stuff as if data is double
            break;
        case enumChr:
            char *p = (char *)ptr;
            // do stuff as if data is char
            break;
    }
}

void taskA(void *ptr, TypeInfo t) {
    ...
    taskB(ptr, t);
    ...
}

推荐阅读