Definování I/O portů v poli

Tak jsem zkusil sesmolit tu první variantu a po několikátém pokusu to překladač pobral jen s dvouma varováníma (1. missing braces around initializer -Wmissing-braces] a 2. (near initialization for ‘rele[0]’) -Wmissing-braces])
, ale podle simulátoru to funguje. :smiley:

#include <avr/io.h>

typedef struct  
{
	volatile uint8_t *PORT;
	volatile uint8_t *DDR;
	volatile uint8_t *PIN_REG;
	uint8_t PIN;
} device;

device rele[4] = {
	&PORTA, &DDRA, &PINA, PINA0,		// rele1
	&PORTB, &DDRB, &PINB, PINB3,		// rele2
	&PORTA, &DDRA, &PINA, PINA5,		// rele3
	&PORTC, &DDRC, &PINC, PINC6,		// rele4
	};

int main(void)
{
	uint8_t stavRele;
	for (uint8_t t = 0; t < 4; t++)
	{
		*rele[t].DDR |= (1<<rele[t].PIN);	// nastavení jako výstup
	}
    while(1)
    {
        for (uint8_t t = 0; t < 4; t++)
        {
	       if (stavRele & (1<<t)) *rele[t].PORT |= (1<<rele[t].PIN);	// nastavení nebo nulování rele podle bitu proměnné
		   else *rele[t].PORT &= ~(1<<rele[t].PIN);
			
        }
		stavRele = ~stavRele;	// neguje obsah pro vyzkoušení
    }
}

ale nejde mi do hlavy, jak jsi myslel tu druhou variantu. Co jsem pročítal to vlákno, tak tam si definuješ fci jednoho bitu, příp. pinu. To bych musel definovat fci pro každej pin a bit zvlášť. Ale potom bych asi nemohl pracovat se všemi vstupy (výstupy) z jedné funkce. Nebo teda alespoň nevím jak :frowning: