对不起这个糟糕的标题,我不知道如何问我在寻找什么。这是我的问题。我有一个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
提前致谢
答案 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中执行匿名函数的方法。