对不起,我不知道该怎么问我要找什么。这是我的问题。我有一个msp430处理器连接到一堆收发器。我有一个独立的独立输出去重新选择每一个收发器。正常情况下,我定义每个芯片的选择如下
#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;我希望能够从结构中启用/禁用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;提前感谢
发布于 2015-04-22 15:32:58
我显然无法亲自测试,但我认为唯一的错误是
&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();发布于 2015-04-22 15:33:24
可以将函数指针添加到结构中,然后调用它们。
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匿名函数或其他在C中执行匿名函数的方法。
https://stackoverflow.com/questions/29802115
复制相似问题