【发布时间】:2019-01-24 09:38:20
【问题描述】:
我想知道是否可以将结构中存在的所有变量(在循环内)初始化为0 并返回到1。
这是一个演示程序:
#include <stdio.h>
#define LEDS_LENGTH 7
void inititate_to_zero(void);
void inititate_to_one(void);
struct pins
{
unsigned char state : 1;
unsigned char LED0 : 1;
unsigned char LED1 : 1;
unsigned char LED2 : 1;
unsigned char LED3 : 1;
unsigned char LED4 : 1;
unsigned char LED5 : 1;
}pins;
int main(void)
{
inititate_to_zero( );
inititate_to_one( );
}
void inititate_to_zero(void)
{
for(unsigned char i = 0; i < LEDS_LENGTH; i++)
{
/// set all variable in struct pins to 0;
pins.VARIABLE[SOME_HOW] ^= ( 1 << 0 );
}
}
void inititate_to_one(void)
{
for (unsigned char i = 0; i < LEDS_LENGTH; i++)
{
/// set all variable in struct pins to 1;
pins.VARIABLE[SOME_HOW] ^= ( 1 << 0 );
}
}
编辑:
如果可能,我需要替换函数 inititate_to_one() 以使用 LOOP:
#include <stdio.h>
#define LEDS_LENGTH 7
void inititate_to_one ( void );
struct pins
{
volatile unsigned char state : 1;
unsigned char LED0 : 1;
unsigned char LED1 : 1;
unsigned char LED2 : 1;
unsigned char LED3 : 1;
unsigned char LED4 : 1;
unsigned char LED5 : 1;
}pins{ 0 };
int main( void )
{
inititate_to_one ( );
}
void inititate_to_one( void )
{
state ^= ( 1 << 0 );
LED0 ^= ( 1 << 0 );
LED1 ^= ( 1 << 0 );
LED2 ^= ( 1 << 0 );
LED3 ^= ( 1 << 0 );
LED4 ^= ( 1 << 0 );
LED5 ^= ( 1 << 0 );
}
【问题讨论】:
-
也许你真正想要的是一个数组?或者可能单个
unsigned char用作位域? -
C 结构的 初始化 为 0(或任何零值/空值)很简单。稍后设置为0或1,或者初始化为1,是不同的。所以这真的取决于你问什么问题准确地。
-
如何制作一个 LED[i] 阵列而不是 led0 led1...
-
您有
memset可用吗? (例如memset (&pins, 1, sizeof (struct pins));),只需使用0将每个字节归零。 -
@DavidC.Rankin 这个 memset 不起作用。而不是 1 你需要 0xff
标签: c