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

 
 
> Побитовый сдвиг данных в структуре, Как реализовать
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
Ответов
kt368
сообщение Oct 26 2011, 05:18
Сообщение #2


Местный
***

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



Так хотелось сделать для удобного в применении хранилища с передаваемыми данными. Ладно, лучше (и быстрее) будет на асме десяток строк написать.
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 27 2011, 04:02
Сообщение #3


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(kt368 @ Oct 26 2011, 12:18) *
Так хотелось сделать для удобного в применении хранилища с передаваемыми данными. Ладно, лучше (и быстрее) будет на асме десяток строк написать.

Тогда, как уже посоветовали, сделать union, где объявить структуру и массив. При работе с полями использовать структуру, а при пересылках - массив.

Только структуру надо будет объявить пакованной (обычно делается через #pragma директиву компилятора), иначе на другом конце, если там другая платформа, весьма вероятны ошибки, т.к. размещение полей в структуре очень зависит от платформы (в основном из-за требований к выравниванию данных в памяти).

Указанный способ с union является самым простым способом сериализации. И не факт, что он будет самым эффективным, если использовать пакованный структуры. Возможно, явная упаковка полей в пакеты при отправке будет и получше.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post



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

 


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


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