Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как передать структуру битов или битовое поле в функцию? (CVAVR)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
mmavka
Доброго времени суток!

У меня возникло затруднение. Я не могу понять как передать в функцию в параметрах битовое поле или структуру битов???

Часть кода:
Код
char temp=0,i;
eeprom char hour_on,hour_off,min_on,min_off;
struct {
unsigned char fh_on : 1;
unsigned char fh_off : 1;
unsigned char fm_on : 1;
unsigned char fm_off : 1;
unsigned char prog : 1;
} flags;                           //структура битов в данном случае

void check(?????? active,???????? next,char eep, char limit) //как передать не понимаю....
{
    if (SET_STATE==0 & active == 1)
       {
        temp++;
        led(1);                    //функция мигания диодом
        if (temp>=limit)
            {
            temp=0;
            };
        };
    if (REC_STATE==0 & active == 1)
        {
       led(temp);                //функция мигания диодом
        eep = temp;
        active ^= active;
        next ^= next;
        temp = 0;
        delay_ms(250);
        };
};

void main (void)
{
check(flags.fh_on, flags.fh_off, hour_on, 24);    //?????????????????????
};


вот функция как я ее представляю, но компилятор говорит что я не понимаю что творю...
Прошу помощи.
=GM=
Вы не структуру передаёте, а обычные аргументы, которые являются элементами структуры, так и передавайте.

В описании функции
void check(unsigned char active,unsigned char next,char eep, char limit)

В вызове функции
check(flags.fh_on,flags.fh_off, hour_on, 24);
mmavka
Цитата(=GM= @ Aug 3 2011, 00:32) *
В описании функции
void check(unsigned char active,unsigned char next,char eep, char limit)


Да все заработало! спасибо!

У меня вопрос. А как передать указатель на структуру и передать как бы "указатель" на те этементы структуры которые нужно изменить или использовать при логических сравнениях. Может это бред, если так то простите может вопрос поставлен не правильно, но думаю суть ясна.
Sirko
Цитата
А как передать указатель на структуру
Точно так, как Вы передаете указатель на char или int.
Цитата
и передать как бы "указатель" на те этементы структуры которые нужно
Такой фокус не пройдет, да это и не нужно. Просто в теле функции обрабатывайте нужные поля.
=GM=
Цитата(mmavka @ Aug 2 2011, 20:18) *
А как передать указатель на структуру и передать как бы "указатель" на те этементы структуры которые нужно изменить или использовать при логических сравнениях

Передача адреса структуры в аргументе
check(struct FLGS *flags,char eep,char limit)

Вызов функции
check(&flags,eep,limit);

Теперь, поскольку вы явно передаёте адрес структуры, чтобы добраться до элемента структуры внутри подпрограммы, надо использовать стрелку, например,
flags->fh_on ^= flags->fh_on
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.