Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: начальная инициализация массива
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Метценгерштейн
uint8_t tst_mass [1] = {(|= BIT_5)};

как что-то подобное делать?
Т.е. чтобы при обращении к данному элементу, происходило или с каким-то числом?
Когда буду в ф-ии вызывать данный элемент, он должен не полностью переписать элемент массива, а только бит в этом элементе.
aaarrr
Можно через union со структурой с битовыми полями. Но лучше, по-моему, (не)прописывать нужные биты явно при обращении.
jcxz
Цитата(Метценгерштейн @ May 22 2015, 15:15) *
Когда буду в ф-ии вызывать данный элемент, он должен не полностью переписать элемент массива, а только бит в этом элементе.

или 1: Использовать BitBanding.
или 2: Создать класс, перегрузив в нём оператор =.
CrimsonPig
Цитата(Метценгерштейн @ May 22 2015, 10:15) *
uint8_t tst_mass [1] = {(|= BIT_5)};

как что-то подобное делать?
Т.е. чтобы при обращении к данному элементу, происходило или с каким-то числом?
Когда буду в ф-ии вызывать данный элемент, он должен не полностью переписать элемент массива, а только бит в этом элементе.


Вы можете сформулировать требование простыми и понятными словами ?.
А то мало того, что полная дислексия, так еще и на С.

это работает, но непонятно, надо ли это.
uint8 arr[2] = {(1<<3), (1<<5)};
ViKo
Цитата(Метценгерштейн @ May 22 2015, 12:15) *
uint8_t tst_mass [1] = {(|= BIT_5)};
Т.е. чтобы при обращении к данному элементу, происходило или с каким-то числом?
Когда буду в ф-ии вызывать данный элемент, он должен не полностью переписать элемент массива, а только бит в этом элементе.

Читайте полностью, и делайте "или". rolleyes.gif
Да... изучите битовые поля. Они сами делают "или".
Метценгерштейн
есть массив 3-х уровневый.
Код
const uint8_t posdigits[6][10][2 * 7] = {
    { // POS_0
        {  }, // 0
        {  }, // 1
        {  }, // 2
        {  }, // 3
        {  }, // 4
        {  }, // 5
        {  }, // 6
        {  }, // 7
        {  }, // 8
        {  }, // 9
    },

мне надо его заполнить, да так, что последний элемент массива - самые внутренние вложенные скобки- элемент 0- адрес элемента массива, элемент 1- значение. Элемент 2- адрес, 3- значение.
например, так
{1, 2, 1, 4... }, // 0
т.е. я хочу уже в обрабатываемой ф-ии вызывать элементы массива. И видим, что в номер элемента 1 я сначала пишу 2, потом, вызвав еще раз, в тот же элемент 1 пишу 4. Но мне надо, чтобы не 4, а или 4. Или где-то и 4.
Вот как соорудить это?

Код
const uint8_t tst_mass [2][2] =
{
    { 0, BIT_2 }, // 0
    { 0, BIT_3 }, // 1
};

вот так, но BIT_2 сделать ИЛИ или &
ViKo
Трудно понять вопрос.
ar__systems
+1.

Вот это предложение можно как-то переписать, чтобы парсер русского языка на нем не спотыкался?

Цитата
Т.е. чтобы при обращении к данному элементу, происходило или с каким-то числом?
psL
Цитата(ar__systems @ Jun 2 2015, 15:25) *
+1.

Вот это предложение можно как-то переписать, чтобы парсер русского языка на нем не спотыкался?


вместо "или" нужно читать "ИЛИ" )


Цитата(Метценгерштейн @ May 22 2015, 12:15) *
uint8_t tst_mass [1] = {(|= BIT_5)};

как что-то подобное делать?
Т.е. чтобы при обращении к данному элементу, происходило или с каким-то числом?
Когда буду в ф-ии вызывать данный элемент, он должен не полностью переписать элемент массива, а только бит в этом элементе.



Например так:
Код
struct proc
{
    int param;
    int (*do_)(int arg, struct proc* proc );
};

int do_or(int arg, struct proc* proc)
{
    return arg | proc->param;
}

int do_and(int arg, struct proc* proc)
{
    return arg & proc->param;
}

int do_proc(int arg, struct proc* proc)
{
    return proc->do_(arg, proc);
}

struct proc procs[]={
    {   .param = (1<<5) ,  do_or  }, // 0
    {   .param = (1<<7) ,  do_or  }, // 1
    {   .param = (1<<31) , do_and }, // 2
};


...
    do_proc(0x12, &procs[1]); // установка бита 7
...

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.