TinyOS nesC - typedef nx_struct依赖

时间:2014-01-07 22:32:56

标签: tinyos nesc

我在创建头文件时遇到问题,我在其中定义了三个结构! 问题是结构之间的依赖关系。 我尝试这样的-c语法,但是在编译代码时收到错误。

错误是:

  

/home/user/top/t2_cur/tinyos-2.x/tos/platforms/telosb/mac/tkn154/timer/Alarm32khzTo62500hzTransformC.nc:53:2:   警告:#warning"警告:MAC时序不符合标准!"   make: * [exe0]错误1

这是我的代码:

#define PRECISION nx_float
typedef nx_struct neurA neuronA;
typedef nx_struct neurB neuronB;
typedef nx_struct neurC neuronC;

nx_struct neurB{
  neurA in[2];
  neurC out;

 PRECISION trans_value;
 PRECISION prop_value;
 PRECISION delta;

 PRECISION in_weight[2];
 PRECISION out_weight[1];
}

nx_struct neurA{
  neurB out[3];

  PRECISION trans_value;
  PRECISION delta;
  PRECISION out_weight[3]; 
}

nx_struct neurC{
 neurB in;

 PRECISION trans_value;
 PRECISION prop_value;
 PRECISION delta;

 PRECISION in_weight;
}

struct neurB在其内部声明变量neurC和neurB。如果我将neurB结构的声明置于代码中的所有其他结构之上,则错误是由其内部声明neurb变量的neurC结构引起的。如果我反转struct的声明,问题仍然存在于另一个原因。

我也试过这种方式:

  typedef nx_struct neurA{
      neurB out[3];

      PRECISION trans_value;
      PRECISION delta;
      PRECISION out_weight[3]; 
    }neurA;

    typedef nx_struct neurC{
     neurB in;

     PRECISION trans_value;
     PRECISION prop_value;
     PRECISION delta;

     PRECISION in_weight;
    }neurC;

    typedef nx_struct neurB{
      neurA in[2];
      neurC out;

     PRECISION trans_value;
     PRECISION prop_value;
     PRECISION delta;

     PRECISION in_weight[2];
     PRECISION out_weight[1];
    }neurB;

2 个答案:

答案 0 :(得分:0)

有时错误消息很奇怪且难以理解,我不知道围绕这个的标题,如果可能是这种情况。尝试使用像

这样简单的东西
typedef struct Point {
    int x;
    int y;
} Point;

Point vPoint;

一次一个地将您自己的类型替换为程序

我认为,考虑到上述情况,您需要在使用之前对类似于上述Point的类型进行类型设计。

答案 1 :(得分:0)

TinyOS错误消息通常不会显示错误的确切原因。但是,至少在两个方面,您的代码肯定是不正确的。

首先,定义neurC neurBneurB neurC是一个无法编译的递归依赖。您可能希望将指针用作字段:

typedef struct neurC {
    neurB *in;
} neurC;

其次,正如您所注意到的那样,在定义之前不能使用neurB。解决方案是在开头声明它并稍后定义结构。为了避免混淆,我将实际类型命名为与结构不同的方式(类型名称以_t结尾)。两个结构的示例是:

typedef struct neurB neurB_t; // declaration of neurB_t as struct neurB

typedef struct neurC {
    neurB_t *in; // neurB_t is declared before, so it can be used here
} neurC_t;

struct neurB { // definition of struct neurB
    neurC_t *out; // neurC_t is declared before
};