|
Битовые области в WinAVR |
|
|
|
Nov 3 2011, 08:15
|

Местный
  
Группа: Участник
Сообщений: 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 { ... }
|
|
|
|
|
 |
Ответов
|
Nov 9 2011, 10:13
|

Местный
  
Группа: Участник
Сообщений: 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.) Что я не так делаю ?
|
|
|
|
|
Nov 9 2011, 10:24
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Nov 9 2011, 12:31
|

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

|
Цитата(Сергей Борщ @ Nov 9 2011, 13:24)  Вы объявили тип Bfield, но не переменную этого типа. Код struct { char One : 1; char bTwo : 1; char bFree : 1; } Bfield; Вот так будет работать. Работает, Спасибо ! Получается что в книге Шпак Ю.А. описание структур неполное Кстати , а как теперь сделать так чтобы битовая область находилась в регистре МК как глобальная переменная ?
|
|
|
|
|
Nov 9 2011, 13:13
|

неотягощённый злом
     
Группа: Свой
Сообщений: 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 */
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|