c - 如何知道从任务 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);
}
}
解决方案
如果类型容易频繁更改(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);
...
}
推荐阅读
- python - 将文件压缩到内存并以字节 python 读取整个存档
- git - Git:仅在当前目录中忽略文件名
- google-cloud-platform - BigQuery 是否适合小型数据集?
- tfs - 在 Visual Studio 中退出 TFS 而不会导致问题
- gcc - 获取链接器映射文件中的变量地址
- python - 检查输入时出错:预期 conv2d_1_input 的形状为 (64, 64, 3) 但得到的数组的形状为 (64, 64, 4)
- c - 如何捕捉文件模式?
- c++ - MSVC 需要带有矢量和映射的显式默认移动构造函数
- authentication - 使用没有数据库的 JSON 响应进行身份验证
- javascript - 使用扩展运算符将参数分配给 ES5 构造函数中的新对象?