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

 
 
> Битовые области в WinAVR
MaxiMuz
сообщение Nov 3 2011, 08:15
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658



Обычно для управления отдельными битами и их проверкой используют конcтрукции:
Код
...
#define bOne 0x01;

uint8_t Bfield;

int main (void)
{
...
Bfield |= (1<<bOne); // установка в 1 бита
...
Bfield &= ~(1<<bOne); // установка в 0 бита
...
if ( Bfield & bOne ) // проверка на 1
{ ... }
}

Есть ли возможность с помощью определения структуры и задания полей задавать битовые области ?
Сейчас к сожалению нет возможности попробывать работоспособность этого в железе поэтому привожу пример:
Код
...
struct Bfield
{
  bit bOne:1;
  bit bTwo:1;
  bit bFree:1;
};

int main (void)
{
...
Bfield.bOne=1; // установка в 1 бита
...
Bfield.bTwo=0; // установка в 0 бита
...
if ( Bfield.bFree==1 ) // проверка на 1
{ ... }

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MaxiMuz
сообщение Jan 18 2012, 18:02
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658



Решил не создавать новой темы.
Вообщем нужно в битовую область размером в байт записать некую переменную с таким же размером.
Сделал указатель на структуру (битовую область):
Код
volatile struct
{
  uint8_t bOne : 1;
  uint8_t bTwo : 1;
  uint8_t bThree : 1;
  uint8_t bFour : 1;
}  *RF;

обращаюсь к ней:
Код
(*RF).bOne=1;

но выражение:
Код
volatile uint8_t Cnt1;
.....
(*RF)=Cnt1;
выдает ошибку:
Цитата
error: incompatible types in assignment

Размеры здесь вроде совпадают. Как правильно целиком записать байт в ячейку битового поля?

Сообщение отредактировал MaxiMuz - Jan 18 2012, 18:05
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jan 18 2012, 18:36
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(MaxiMuz @ Jan 18 2012, 20:02) *
Решил не создавать новой темы.
Вообщем нужно в битовую область размером в байт записать некую переменную с таким же размером.
Сделал указатель на структуру (битовую область):
Код
volatile struct
{
  uint8_t bOne : 1;
  uint8_t bTwo : 1;
  uint8_t bThree : 1;
  uint8_t bFour : 1;
}  *RF;

обращаюсь к ней:
Код
(*RF).bOne=1;

но выражение:
Код
volatile uint8_t Cnt1;
.....
(*RF)=Cnt1;
выдает ошибку:
Размеры здесь вроде совпадают. Как правильно целиком записать байт в ячейку битового поля?


union можно.
Или так:
Код
volatile struct TestbitBield
{
    unsigned char bOne : 1;
    unsigned char bTwo : 1;
    unsigned char bThree : 1;
    unsigned char bFour : 1;
}  RF; /// !!! не *RF
unsigned char Cnt1;

RF.bOne=1;
unsigned char *ptr_dbg=(unsigned char *)&RF;
*ptr_dbg=Cnt1;

Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 18 2012, 18:46
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(_Артём_ @ Jan 18 2012, 22:36) *
Или так

"Наглое" преобразование типа - источник ошибок.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MaxiMuz   Битовые области в WinAVR   Nov 3 2011, 08:15
- - Палыч   Цитата(MaxiMuz @ Nov 3 2011, 12:15) Есть ...   Nov 3 2011, 08:29
|- - MaxiMuz   Цитата(Палыч @ Nov 3 2011, 11:29) (только...   Nov 3 2011, 09:57
|- - XVR   Цитата(MaxiMuz @ Nov 3 2011, 13:57) в кни...   Nov 3 2011, 12:57
- - MaxiMuz   а что делать ?   Nov 3 2011, 13:57
|- - XVR   Цитата(MaxiMuz @ Nov 3 2011, 17:57) а что...   Nov 3 2011, 14:10
|- - MaxiMuz   Цитата(XVR @ Nov 3 2011, 17:10) Писать ch...   Nov 4 2011, 09:22
|- - Sergey_Aleksandrovi4   Цитата(MaxiMuz @ Nov 4 2011, 13:22) тогда...   Nov 7 2011, 10:11
|- - demiurg_spb   Цитата(MaxiMuz @ Nov 4 2011, 12:22) тогда...   Nov 7 2011, 10:51
|- - Sergey_Aleksandrovi4   Цитата(MaxiMuz @ Nov 4 2011, 13:22) тогда...   Nov 7 2011, 17:58
|- - _Артём_   Цитата(Sergey_Aleksandrovi4 @ Nov 7 2011, 19...   Nov 7 2011, 23:43
|- - demiurg_spb   Цитата(Sergey_Aleksandrovi4 @ Nov 7 2011, 20...   Nov 8 2011, 05:07
- - MaxiMuz   В WinAVR (20080610) пишу: Код#include <avr/io....   Nov 9 2011, 10:13
|- - Сергей Борщ   QUOTE (MaxiMuz @ Nov 9 2011, 13:13) Что я...   Nov 9 2011, 10:24
|- - MaxiMuz   Цитата(Сергей Борщ @ Nov 9 2011, 13:24) В...   Nov 9 2011, 12:31
|- - demiurg_spb   Скачайте WinAVR да посмотрите заголовочные файлы л...   Nov 9 2011, 13:13
|- - Палыч   Цитата(MaxiMuz @ Nov 9 2011, 16:31) как т...   Nov 9 2011, 15:23
- - MaxiMuz   Спасибо Палыч , работает   Nov 14 2011, 08:30
|- - Палыч   Цитата(MaxiMuz @ Jan 18 2012, 22:02) Как ...   Jan 18 2012, 18:28
|- - demiurg_spb   Цитата(MaxiMuz @ Jan 18 2012, 21:02) (*RF...   Jan 19 2012, 04:43
- - MaxiMuz   Всем спасибо! Используя подставной указатель:...   Jan 20 2012, 16:58


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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 23:52
Рейтинг@Mail.ru


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