Установите все переменные в структуре в ноль / один - PullRequest
0 голосов
/ 24 января 2019

Я хотел бы знать, возможно ли инициализировать все переменные (в пределах LOOP), присутствующие в Struct, на 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 );
    }
}

EDIT:

Мне нужно было заменить функцию 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 );
}

1 Ответ

0 голосов
/ 24 января 2019

1001 * имеющий *

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: memset(&pins, 0, sizeof(pins));

чтобы установить все на 1: memset(&pins, -1, sizeof(pins));

и, вероятно, memset будет оптимизирован для установки только одного байта


Чтобы помочь Джону Доу:

#include <stdio.h>
#include <string.h>

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;

void pr()
{
  printf("%u %u %u %u %u %u %u\n",
     pins.state, pins.LED0, pins.LED1, pins.LED2, pins.LED3, pins.LED4, pins.LED5);
}

int main()
{
  /* pins is already to 0 because static */
  memset(&pins, -1, sizeof(pins));
  pr();
  memset(&pins, 0, sizeof(pins));
  pr();
  memset(&pins, -1, sizeof(pins));
  pr();

  return 0;
}

Исполнение:

1 1 1 1 1 1 1
0 0 0 0 0 0 0
1 1 1 1 1 1 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...