реклама на сайте
подробности

 
 
> Побитовый сдвиг данных в структуре, Как реализовать
kt368
сообщение Oct 25 2011, 07:15
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 13-10-10
Из: Киев
Пользователь №: 60 135



Здравствуйте! Имеется юнион, содержащий структуру в которой находятся данные, которые необходимо предать по SPI. Можно ли в цикле сдвигать структуру влево и передавать на ножку МК старший бит структуры?
Вот код юниона и структуры:
Код
struct SPI_TX_str {
    unsigned dch2        :1;
    unsigned ch2        :1;
    unsigned dch1        :1;
    unsigned ch1        :1;
    unsigned ch2_disp    :8;
    unsigned ch1_disp    :8;
};

struct all {
    unsigned sw                :4;
    unsigned ch2_disp        :8;
    unsigned ch1_disp        :8;
};

union SPI_union {
    struct all             all;
    struct SPI_TX_str     bits;
};
union SPI_union TXdata

И можно ли мне сделать для данного случая такой юнион, к которому я смогу обращаться типа такого:
Код
TXdata=0bxxxxxxxxxxxxxxxxxxxx;
?
Т.е чтобы записывать во все переменные, которые входят в состав структуры (которая в юнионе) при помощи одной команды на Си, как написано выше. Если б был тип данных, который занимал настраиваемое количество бит, то сделав юнион с таким типом данных я б смог его сдвигать. Может я что-то не так говорю?
Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
777777
сообщение Oct 26 2011, 18:47
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(kt368 @ Oct 25 2011, 11:15) *
Здравствуйте! Имеется юнион, содержащий структуру в которой находятся данные, которые необходимо предать по SPI. Можно ли в цикле сдвигать структуру влево и передавать на ножку МК старший бит структуры?

Можно, для этого заводишь указатель на эту структуру и присваиваешь ему адрес соответствующей переменной:

union SPI_union TXdata;
uint8_t* pData = (uint8_t*)&TXdata;

После этого можешь передавать данные в SPI:

SPDR = *pData++;

После чего pData сдвигается на следующий байт той структуры.
ЗЫ. Замечание о порядке распределения полей справедливо (вплоть до того, слева направо они располагаются или справа налево), поэтому проверять это нужно экспериментально.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th August 2025 - 00:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01368 секунд с 7
ELECTRONIX ©2004-2016