(由于大多数Arduino板上的内存有限,我有时会遇到使用有效C/C++代码的问题,所以这个问题特别是关于在Arduino上使用结构的任何问题.)
我已经看到了在Arduino中使用结构的示例代码,但没有讨论内存需求.
s1.LED1.state = 0;)(当然,如果不存储在PROGMEM中).for..in或通过索引迭代结构?我的用例是我有64个由MAX7219芯片驱动的LED.由于物理布线布局的要求,使用结构以更合理的方式组织LED顺序将是方便的,以便使编程更容易/更连贯.
typedef struct {
byte row : 6;
byte col : 128;
byte state : 1;
} LED;
Run Code Online (Sandbox Code Playgroud)
typedef struct {
LED LED1 : {1,1,1};
LED LED2 : {1,2,1};
LED LED3 : {1,4,1};
LED LED4 : {1,8,1};
LED LED5 : {1,16,1};
LED LED6 : {1,32,1};
LED LED7 : {1,64,1};
LED LED8 : {1,128,1};
} LED_SECTION;
Run Code Online (Sandbox Code Playgroud)
LED_SECTION s1;
s1.LED1.row = 1;
Run Code Online (Sandbox Code Playgroud)
s1.LED1.state = 0;
Run Code Online (Sandbox Code Playgroud)
我认为可以使用这种语法:(http://www.arduino.cc/en/Reference/PROGMEM)
Run Code Online (Sandbox Code Playgroud)LED leds PROGMEM;
是的,它们是,语法如您在问题中所写。
是的你可以:
typedef 结构 { 结构 otherStruct; };
是的,您可以使用面具来做到这一点。例如:
Run Code Online (Sandbox Code Playgroud)for (int i = 0, byte cur = s1 & 1; ; i < numOfFieldsInStruct; i++, cur = (s1<<i)&1) { .... }
关于您对此答案的最后评论,让我提出以下解决方案:
以一种不会占用内存的方式组织 LED(就像问题中的那样 - LED 结构占用内存进行寻址)。相反,您可以使用 LED 在数组和结构中的位置来寻址 LED,如下所示:
typedef struct {
byte LED1 : 1;
byte LED2 : 1;
byte LED3 : 1;
byte LED4 : 1;
byte LED5 : 1;
byte LED6 : 1;
byte LED7 : 1;
byte LED8 : 1;
} LED_ROW;
LED_ROW leds[256];
leds[0].LED1 = 1; // turn led at row 0, col 0 to 1
leds[0].LED5 = 1; // turn led at row 4, col 0 to 1
led[100].LED3 = 1; // turn led at row 2, col 100 to 1
...
// and so on
Run Code Online (Sandbox Code Playgroud)
您可以考虑以不同的方式排列数组,结构体中有 256 个项目,数组中有 8 个项目,因此行将由 [] 和点后的列引用,如下所示:
leds[0].LED3 = 1; // turn on led at row 0, col 2 to 1
Run Code Online (Sandbox Code Playgroud)