将表达式分配给 typedef 结构变量
assign a expression to a typedef struct variable
抱歉标题太烂了,我不知道怎么问我在找什么。这是我的问题。我有一个 msp430 处理器连接到一堆收发器。我有单独的离散输出去到每个收发器的 re/de select。正常我这样定义每个芯片的select
#define enable_port_rx P1OUT &= ~BIT2
#define disable_port_rx P1OUT |= BIT2
#define enable_port_tx P1OUT |= BIT1
#define disable_port_tx P1OUT &= ~BIT1
我为每个收发器都有一个结构,我将其放入一个数组中,这样我就可以用循环遍历它们。
extern motors m[10];
typedef struct
{
unsigned char address;
unsigned int value;
unsigned int xdata[10];
} motors;
我希望能够从结构中 enable/disable rx/tx。
我想做这样的事情。
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
我认为下面这样的东西会起作用。那就是我保存了指向寄存器的指针和我可以在需要时访问它们所需的位。但这不起作用。
//inside strut
volatile unsigned char *rxPxOUT;
unsigned char rxBITx;
volatile unsigned char *txPxOUT;
unsigned char txBITx;
//setup
m[0].txPxOUT=&P1OUT;
m[0].txBITx = BIT1;
//function call
&m[0].txPxOUT &= ~m[0].txBITx;
提前致谢
我显然不能自己测试,但我认为唯一的错误是
&m[0].txPxOUT &= ~m[0].txBITx;
应该是
*m[0].txPxOUT &= ~m[0].txBITx;
编辑:您可以像这样将代码放入成员函数中:
typedef struct
{
....
void disable_tx();
} motors;
void motors::disable_tx()
{
*txPxOUT &= ~txBITx;
}
并这样称呼它:
m[0].disable_tx();
您可以将函数指针添加到您的结构中,然后调用它们。
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 中执行匿名函数的方法。
抱歉标题太烂了,我不知道怎么问我在找什么。这是我的问题。我有一个 msp430 处理器连接到一堆收发器。我有单独的离散输出去到每个收发器的 re/de select。正常我这样定义每个芯片的select
#define enable_port_rx P1OUT &= ~BIT2
#define disable_port_rx P1OUT |= BIT2
#define enable_port_tx P1OUT |= BIT1
#define disable_port_tx P1OUT &= ~BIT1
我为每个收发器都有一个结构,我将其放入一个数组中,这样我就可以用循环遍历它们。
extern motors m[10];
typedef struct
{
unsigned char address;
unsigned int value;
unsigned int xdata[10];
} motors;
我希望能够从结构中 enable/disable rx/tx。 我想做这样的事情。
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
我认为下面这样的东西会起作用。那就是我保存了指向寄存器的指针和我可以在需要时访问它们所需的位。但这不起作用。
//inside strut
volatile unsigned char *rxPxOUT;
unsigned char rxBITx;
volatile unsigned char *txPxOUT;
unsigned char txBITx;
//setup
m[0].txPxOUT=&P1OUT;
m[0].txBITx = BIT1;
//function call
&m[0].txPxOUT &= ~m[0].txBITx;
提前致谢
我显然不能自己测试,但我认为唯一的错误是
&m[0].txPxOUT &= ~m[0].txBITx;
应该是
*m[0].txPxOUT &= ~m[0].txBITx;
编辑:您可以像这样将代码放入成员函数中:
typedef struct
{
....
void disable_tx();
} motors;
void motors::disable_tx()
{
*txPxOUT &= ~txBITx;
}
并这样称呼它:
m[0].disable_tx();
您可以将函数指针添加到您的结构中,然后调用它们。
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 中执行匿名函数的方法。