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

 
 
> Битовые области в 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
сообщение Nov 9 2011, 10:13
Сообщение #2


Местный
***

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



В WinAVR (20080610) пишу:
Код
#include <avr/io.h>
#include <inttypes.h>

#define  KeyMask (1<<Btn1)|(1<<Btn2)

struct Bfield
{
  char One : 1;
  char bTwo : 1;
  char bFree : 1;
};

int main (void)
{
Bfield.bTwo=1;
Bfield.bOne=0;
if (~(PINB)&(KeyMask))
        {
        PORTB=KeyMask;
        }
}

Вместо char пробывал и unsigned char и unsigned int8_t и просто unsigned
В итоге ошибка:
Код
test.c:27: error: 'Bfield' undeclared (first use in this function)
test.c:27: error: (Each undeclared identifier is reported only once
test.c:27: error: for each function it appears in.)

Что я не так делаю ?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 9 2011, 10:24
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (MaxiMuz @ Nov 9 2011, 13:13) *
Что я не так делаю ?
Вы объявили тип Bfield, но не переменную этого типа.
CODE
struct
{
  char One : 1;
  char bTwo : 1;
  char bFree : 1;
}  Bfield;
Вот так будет работать.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
MaxiMuz
сообщение Nov 9 2011, 12:31
Сообщение #4


Местный
***

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



Цитата(Сергей Борщ @ Nov 9 2011, 13:24) *
Вы объявили тип Bfield, но не переменную этого типа.
Код
struct
{
  char One : 1;
  char bTwo : 1;
  char bFree : 1;
}  Bfield;
Вот так будет работать.

Работает, Спасибо ! Получается что в книге Шпак Ю.А. описание структур неполное sad.gif
Кстати , а как теперь сделать так чтобы битовая область находилась в регистре МК как глобальная переменная ?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 9 2011, 13:13
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Скачайте WinAVR да посмотрите заголовочные файлы любой XMega
а также любой тулчейн для ARM и в нём заголовочные файлы любого контроллера.
Так и сможете понять два применяемых там метода (с разименованными указателями и нет).
CODE
typedef struct ADC_struct /* Analog-to-Digital Converter */
{
register8_t CTRLA; /* Control Register A */
register8_t CTRLB; /* Control Register B */
...
ADC_CH_t CH2; /* ADC Channel 2 */
ADC_CH_t CH3; /* ADC Channel 3 */
} ADC_t;

#define ADCA (*(ADC_t *) 0x0200) /* Analog to Digital Converter A */
#define ADCB (*(ADC_t *) 0x0240) /* Analog to Digital Converter B */


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
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 @ Nov 9 2011, 16:31) как т...   Nov 9 2011, 15:23
- - MaxiMuz   Спасибо Палыч , работает   Nov 14 2011, 08:30
- - MaxiMuz   Решил не создавать новой темы. Вообщем нужно в бит...   Jan 18 2012, 18:02
|- - Палыч   Цитата(MaxiMuz @ Jan 18 2012, 22:02) Как ...   Jan 18 2012, 18:28
|- - _Артём_   Цитата(MaxiMuz @ Jan 18 2012, 20:02) Реши...   Jan 18 2012, 18:36
||- - Палыч   Цитата(_Артём_ @ Jan 18 2012, 22:36) Или ...   Jan 18 2012, 18:46
|- - 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 - 07:51
Рейтинг@Mail.ru


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