将表达式赋给typedef结构变量

时间:2015-04-22 15:25:16

标签: c struct msp430

对不起这个糟糕的标题,我不知道如何问我在寻找什么。这是我的问题。我有一个msp430处理器连接到一堆收发器。我有各自的离散输出进入每个收发器的re / de选择。正常我定义了每个芯片的选择

=IF(OR(ISBLANK(A1),TRIM(A1)=""),1,0)

我为每个收发器都有一个结构,我把它放在一个数组中,这样我就可以用循环遍历它们。

#define enable_port_rx  P1OUT &= ~BIT2
#define disable_port_rx P1OUT |= BIT2
#define enable_port_tx  P1OUT |= BIT1
#define disable_port_tx P1OUT &= ~BIT1

我希望能够从结构中启用/禁用rx / tx。 我想做这样的事情。

extern motors m[10];
typedef struct
{
    unsigned char address;
    unsigned int value;
    unsigned int xdata[10];
} motors;

这样我可以在需要时给他们打电话..

m[0].enable_tx = P1OUT |= BIT1;
m[0].disable_tx = P1OUT &= ~BIT1;
m[1].enable_tx = P3OUT |= BIT2;
m[1].disable_tx = P3OUT &= ~BIT2;

我认为下面的内容会起作用。那就是我保存了指向寄存器的指针和需要的位,我可以在需要时访问它们。但这不起作用。

m[0].disable_tx; //disable tx
m[1].disable_tx; //disable tx

提前致谢

2 个答案:

答案 0 :(得分:1)

我显然无法自己测试,但我认为唯一的错误是

find doc | grep basename_of_rake_file

应该是

&m[0].txPxOUT &= ~m[0].txBITx;

编辑:您可以将代码放入如下的成员函数中:

*m[0].txPxOUT &= ~m[0].txBITx;

并称之为:

typedef struct
{
    ....
    void disable_tx();
} motors;

void motors::disable_tx()
{
    *txPxOUT &= ~txBITx;
}

答案 1 :(得分:0)

您可以向结构中添加函数指针,然后调用它们。

extern motors m[10];
typedef struct
{
  unsigned char address;
  unsigned int value;
  unsigned int xdata[10];

  void (*disable_tx)(void);
} motors;

[...]

void disable_tx_1(void)
{
  P1OUT &= ~BIT1;
}

[...]

m[0].disable_tx = disable_tx_1

[...]

m[0].disable_tx();

[...]

如果你想拥有一个像问题那样的lambda风格的函数,你可以查看GCC anonymous functions或其他在C中执行匿名函数的方法。