Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 31.10.2018, 11:14   #1
Andrey K.
Member
 
Регистрация: 14.05.2012
Сообщений: 46
Вес репутации: 114/25
Andrey K. will become famous soon enoughAndrey K. will become famous soon enough
По умолчанию PICC18 #define USE_XXX_MASK

Здравствуйте.
В Микрочиповских примерах для PIC18 натолкнулся на конструкцию #define USE_XXX_MASK, где ХХХ - OR или AND. Ни когда раньше внимания не обращал, и, соответственно, никогда не применял. Порылся в хелпах, описания не нашел. Объясните пожалуйста, для чего применяется такая конструкция.
Andrey K. вне форума   Ответить с цитированием
Старый 31.10.2018, 21:35   #2
DmitrijVDN
Senior Member
 
Регистрация: 09.04.2010
Сообщений: 789
Вес репутации: 1418/53
DmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud of
По умолчанию Re: PICC18 #define USE_XXX_MASK

для установки или сброса битов в регистрах
DmitrijVDN вне форума   Ответить с цитированием
Старый 01.11.2018, 00:22   #3
Andrey K.
Member
 
Регистрация: 14.05.2012
Сообщений: 46
Вес репутации: 114/25
Andrey K. will become famous soon enoughAndrey K. will become famous soon enough
По умолчанию Re: PICC18 #define USE_XXX_MASK

В каких регистрах? Этот дефайн в коде ставится перед инклудами.
Andrey K. вне форума   Ответить с цитированием
Старый 01.11.2018, 02:54   #4
al.kl
Senior Member
 
Регистрация: 11.10.2011
Возраст: 23
Сообщений: 265
Вес репутации: 750/35
al.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to behold
Отправить сообщение для al.kl с помощью ICQ
По умолчанию Re: PICC18 #define USE_XXX_MASK

Цитата:
Сообщение от Andrey K. Посмотреть сообщение
Объясните пожалуйста, для чего применяется такая конструкция.
Для того же, для чего в общем применяются маски.


PS: Странный какой-то вопрос, если честно. Нашли где-то, в каких-то примерах, какой-то дефайн, а нас спрашиваете - зачем он там применяется

Последний раз редактировалось al.kl; 01.11.2018 в 02:59.
al.kl вне форума   Ответить с цитированием
Старый 01.11.2018, 05:32   #5
Andrey K.
Member
 
Регистрация: 14.05.2012
Сообщений: 46
Вес репутации: 114/25
Andrey K. will become famous soon enoughAndrey K. will become famous soon enough
По умолчанию Re: PICC18 #define USE_XXX_MASK

И на что же должна накладываться эта маска?
Не "где-то, в каких-то примерах, какой-то дефайн...", а в "PIC18F Peripheral Library Help Document", в каждом примере работы с переферией стоит эта маска. Например:
АЦП
Код:
#define USE_OR_MASKS
#include <p18cxxx.h>
#include "adc.h"
UART
Код:
#define USE_OR_MASKS
#include <p18cxxx.h>
#include "usart.h"
и все остальные так же.
В том же документе есть указание:
Цитата:
"The peripheral library contains some functions that do not require any input arguments, some that require single values or variables as arguments, and some whose arguments can be expressed as a logical AND/AND-OR of several constants that are pre-defined in the header file.
Each constant included in any of these AND-ed expressions corresponds to the 8-bit mask for a possible selection for a certain bit or bit-field in a Special Function Register (SFR). Each argument, in turn, typically corresponds to the value written to an entire SFR. Thus, by logically combining chosen values for every bit-field in the SFR, the complete initialization value of the SFR is obtained.
To use the OR mask setting, you will need to define the macro (#define USE_OR_MASKS) at the beginning of application code prior to inclusion of respective peripheral header files using #inlcude. In addition, the peripheral.h file provides macros xxx_MASK for each bitfield in an SFR. During runtime these macros can be used to clear bitfields. To clear a bitfield , bitwise AND the xxx_MASK with the current contents of the respective register."
Код:
AD1CON &= ADC_TAD_MASK; /* To Clear the bit field */
AD1CON |= ADC_48_TAD; /* To Set the bit field to new value */
Перевел Гугл-переводчиком, но ни чего не понял. Сможет кто-нибудь доходчиво объяснить как работает эта маска и как этим пользоваться?
Andrey K. вне форума   Ответить с цитированием
Старый 01.11.2018, 09:02   #6
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 31
Сообщений: 1,885
Вес репутации: 3528/77
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: PICC18 #define USE_XXX_MASK

Andrey K.
прочтите про битовые операции - скорее всего Вам сразу все станет ясно.

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

наверняка ADC_TAD_MASK что-то вроде (~(1 << 5))
besogon вне форума   Ответить с цитированием
Старый 02.11.2018, 07:51   #7
Andrey K.
Member
 
Регистрация: 14.05.2012
Сообщений: 46
Вес репутации: 114/25
Andrey K. will become famous soon enoughAndrey K. will become famous soon enough
По умолчанию Re: PICC18 #define USE_XXX_MASK

С битовыми операциями применительно к обычным переменным я проблем не испытываю, я не могу понять именно эту конструкцию.
Компилятор я неправильно написал. Я пользуюсь Microchip C18 ver.3.47, а не PICC.
Andrey K. вне форума   Ответить с цитированием
Старый 02.11.2018, 09:37   #8
al.kl
Senior Member
 
Регистрация: 11.10.2011
Возраст: 23
Сообщений: 265
Вес репутации: 750/35
al.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to behold
Отправить сообщение для al.kl с помощью ICQ
По умолчанию Re: PICC18 #define USE_XXX_MASK

Цитата:
Сообщение от Andrey K. Посмотреть сообщение
я не могу понять именно эту конструкцию.
Это не конструкция, это - макрос (дефайн). Не понятно, что в нём может быть непонятного ...
al.kl вне форума   Ответить с цитированием
Старый 02.11.2018, 12:24   #9
DmitrijVDN
Senior Member
 
Регистрация: 09.04.2010
Сообщений: 789
Вес репутации: 1418/53
DmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud of
По умолчанию Re: PICC18 #define USE_XXX_MASK

Цитата:
Сообщение от Andrey K. Посмотреть сообщение
И на что же должна накладываться эта маска?
Код:
#define USE_OR_MASKS
Сможет кто-нибудь доходчиво объяснить как работает эта маска и как этим пользоваться?
по умолчанию для инициализации периферии используется для наложения маски операция AND пример:

Код:
  OpenUSART (USART_TX_INT_OFF &
             USART_RX_INT_ON &
             USART_ASYNCH_MODE &
             USART_EIGHT_BIT &
             USART_CONT_RX &
             USART_BRGH_HIGH, 103);
если по каким-то причинам (религиозным ) прогербилдер предпочитает маску OR

те
Код:
  OpenUSART (USART_TX_INT_OFF |
             USART_RX_INT_ON |
             USART_ASYNCH_MODE |
             USART_EIGHT_BIT |
             USART_CONT_RX |
             USART_BRGH_HIGH, 103);
в начале кода включая инклюды

ставится указатель компилятору использовать маску OR
Код:
#define USE_OR_MASKS
в хедере на основании этого указателя компилятор
выбирает нужные маски
Код:
/* Configuration bit masks to be 'anded' together and passed as the 'config'
 * parameter to the 'open' routine. */
//-----------AND OR MASK-------------------------------------------------
#ifndef USE_OR_MASKS

#define USART_TX_INT_ON   0b11111111  // Transmit interrupt on
#define USART_TX_INT_OFF  0b01111111  // Transmit interrupt off
#define USART_RX_INT_ON   0b11111111  // Receive interrupt on
#define USART_RX_INT_OFF  0b10111111  // Receive interrupt off
#define USART_BRGH_HIGH   0b11111111  // High baud rate
#define USART_BRGH_LOW    0b11101111  // Low baud rate
#define USART_CONT_RX     0b11111111  // Continuous reception
#define USART_SINGLE_RX   0b11110111  // Single reception
#define USART_SYNC_MASTER 0b11111111  // Synchrounous master mode
#define USART_SYNC_SLAVE  0b11111011  // Synchrounous slave mode
#define USART_NINE_BIT    0b11111111  // 9-bit data
#define USART_EIGHT_BIT   0b11111101  // 8-bit data
#define USART_SYNCH_MODE  0b11111111  // Synchronous mode
#define USART_ASYNCH_MODE 0b11111110  // Asynchronous mode
#define USART_ADDEN_ON    0b11111111  // Enables address detection
#define USART_ADDEN_OFF   0b11011111  // Disables address detection


//------------AND MASK------------------------------------------------
#else
#define USART_TX_INT_ON           0b10000000  // Transmit interrupt on
#define USART_TX_INT_OFF          0b00000000  // Transmit interrupt off
#define USART_TX_INT_MASK        (~USART_TX_INT_ON)    //Mask Trnasmit Interrupt select bit

#define USART_RX_INT_ON           0b01000000  // Receive interrupt on
#define USART_RX_INT_OFF          0b00000000  // Receive interrupt off
#define USART_RX_INT_MASK        (~USART_RX_INT_ON)    //Mask Receive Interrupt select bit

#define USART_ADDEN_ON            0b00100000  // Enables address detection
#define USART_ADDEN_OFF           0b00000000  // Disables address detection
#define USART_ADDEN_MASK        (~USART_ADDEN_ON)    //Mask address detection select bit

#define USART_BRGH_HIGH           0b00010000  // High baud rate
#define USART_BRGH_LOW            0b00000000  // Low baud rate
#define USART_BRGH_MASK            (~USART_BRGH_HIGH)    //Mask baud rate select bit

#define USART_CONT_RX             0b00001000  // Continuous reception
#define USART_SINGLE_RX           0b00000000  // Single reception
#define USART_CONT_RX_MASK        (~USART_CONT_RX)     //Mask Continuous Reception select bit

#define USART_SYNC_MASTER         0b00000100  // Synchrounous master mode
#define USART_SYNC_SLAVE          0b00000000  // Synchrounous slave mode
#define USART_SYNC_MASK            (~USART_SYNC_MASTER)    //Mask usart mode select bit

#define USART_NINE_BIT            0b00000010  // 9-bit data
#define USART_EIGHT_BIT           0b00000000  // 8-bit data
#define USART_BIT_MASK             (~USART_NINE_BIT)        //Mask 9 bit transmit  select bit

#define USART_SYNCH_MODE          0b00000001  // Synchronous mode
#define USART_ASYNCH_MODE         0b00000000  // Asynchronous mode
#define USART_MODE_MASK            (~USART_SYNCH_MODE)     //Mask sync/async mode select bit

 #endif
фирштейн?
ЗЫ жаль что на форуме не доступны спойлеры...

Последний раз редактировалось DmitrijVDN; 02.11.2018 в 12:33.
DmitrijVDN вне форума   Ответить с цитированием
Старый 02.11.2018, 12:53   #10
Andrey K.
Member
 
Регистрация: 14.05.2012
Сообщений: 46
Вес репутации: 114/25
Andrey K. will become famous soon enoughAndrey K. will become famous soon enough
По умолчанию Re: PICC18 #define USE_XXX_MASK

Фундаментально! Огромное спасибо!
И последний вопрос: какой практический смысл наложения маски при инициализации? Всегда без неё было и все работало, а тут увидел и покоя не даёт.
Andrey K. вне форума   Ответить с цитированием
Старый 02.11.2018, 13:08   #11
DmitrijVDN
Senior Member
 
Регистрация: 09.04.2010
Сообщений: 789
Вес репутации: 1418/53
DmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud of
По умолчанию Re: PICC18 #define USE_XXX_MASK

уход от магических чисел, переносимость кода или нет?
DmitrijVDN вне форума   Ответить с цитированием
Старый 03.11.2018, 10:39   #12
siarzhuk
Senior Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 48
Сообщений: 158
Вес репутации: 1161/27
siarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud of
По умолчанию Re: PICC18 #define USE_XXX_MASK

Цитата:
Сообщение от DmitrijVDN Посмотреть сообщение
если по каким-то причинам (религиозным ) прогербилдер предпочитает маску OR
Да потому как с детского садика все эти палочки и амперсандики в подкорку забиваются с определёным смыслом - а тут бабах и "отраслевой стандарт", как снег на голову, утверждает "обратное" - доставило в своё время, да. Кстати, кроме как [сомнительно] большая "читабельность" в готовом варианте - есть у такого способа записи масок реальные преимущества?
siarzhuk вне форума   Ответить с цитированием
Старый 03.11.2018, 11:36   #13
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 31
Сообщений: 1,885
Вес репутации: 3528/77
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: PICC18 #define USE_XXX_MASK

siarzhuk
с детского садика все эти палочки и амперсандики в подкорку забиваются с определённым смыслом - я не понял о чем Вы.
besogon вне форума   Ответить с цитированием
Старый 03.11.2018, 12:30   #14
masterzx
Senior Member
 
Аватар для masterzx
 
Регистрация: 21.09.2007
Адрес: Барнаул
Возраст: 33
Сообщений: 1,493
Вес репутации: 826/63
masterzx is a splendid one to beholdmasterzx is a splendid one to beholdmasterzx is a splendid one to beholdmasterzx is a splendid one to beholdmasterzx is a splendid one to beholdmasterzx is a splendid one to beholdmasterzx is a splendid one to behold
Отправить сообщение для masterzx с помощью ICQ
По умолчанию Re: PICC18 #define USE_XXX_MASK

Цитата:
Сообщение от siarzhuk Посмотреть сообщение
Да потому как с детского садика все эти палочки и амперсандики в подкорку забиваются с определёным смыслом - а тут бабах и "отраслевой стандарт", как снег на голову, утверждает "обратное" - доставило в своё время, да. Кстати, кроме как [сомнительно] большая "читабельность" в готовом варианте - есть у такого способа записи масок реальные преимущества?
Есть, можно делить код на несколько веток или версий. К примеру выпускаем некое устройство в разных конфигурациях: базовое, улучшенное и профессиональное. Но на одной железной платформе. Или к примеру используем в проекте различной периферии. И при этом иметь один исходник кода.
__________________
Если проблему можно решить за деньги, то это не проблема, это расходы. Еврейская мудрость.
masterzx вне форума   Ответить с цитированием
Старый 03.11.2018, 13:43   #15
petrd
Senior Member
 
Регистрация: 09.02.2008
Адрес: Воронеж
Возраст: 47
Сообщений: 1,773
Вес репутации: 1860/75
petrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant future
Отправить сообщение для petrd с помощью ICQ
По умолчанию Re: PICC18 #define USE_XXX_MASK

Цитата:
Сообщение от Andrey K. Посмотреть сообщение
И последний вопрос: какой практический смысл наложения маски при инициализации? Всегда без неё было и все работало, а тут увидел и покоя не даёт.
Последнее время активно пишу для STM32 (без HAL, STD_PER_LIB и т.д. так сказать "по философии" dosikus-a ) и когда увидел эти "маски" то вообще ничего не шевельнулось. Ибо в CMSIS там все так и написано. Потому что CMSIS - Cortex Microcontroller Software Interface Standard. Это стандарт! Удобно, когда понимаешь логику их устройства. Все четко и логично увязано в кодах хедеров с референс мануалами и даташитами. И все написано в свете данного топика как бы в масках AND. При инициализации получается длинная запись, но наглядная для восприятия. Но после того как поработает компилятор эта запись превращается в однотактовую команду записи в регистр.
__________________
License MikroC, MikroC PRO and EasyPIC5 by mikroElektronika (the dead mikroICD replaced PICKit2 & PICKit3)

Последний раз редактировалось petrd; 03.11.2018 в 13:58.
petrd вне форума   Ответить с цитированием
Старый 03.11.2018, 15:25   #16
siarzhuk
Senior Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 48
Сообщений: 158
Вес репутации: 1161/27
siarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud of
По умолчанию Re: PICC18 #define USE_XXX_MASK

Цитата:
Сообщение от besogon Посмотреть сообщение
я не понял о чем Вы.
Ну вот гляньте: вот так в программистском "садике" учат битики задавать:
Код:
#define BIT_0 (1u << 0)
#define BIT_1 (1u << 1)
[...]
#define BIT_7 (1u << 7)
а так - масочку из этих битиков собирать по необходимости:
Код:
Set(BIT_0 | BIT_1 | BIT_5);
ну т.е. булево сложение - всё понятно и привычно. И порхает человек с проекта на проект лет двадцать, глаз его успешно замыливается, изредка встречается чудачество BIT_0 + BIT_1 + BIT_5, но вот "маска" вида BIT_0 & BIT_1 & BIT_5 - по-первости озадачивает своей алогичностью, пока не узнаешь того, что стоит за определениями.
siarzhuk вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PIC18F25K80, где взять BootLoader? hfmscan Вопросы начинающих 49 26.11.2017 17:28
Нужна помощь с кодом с ALADIN Продукция MICROCHIP 5 08.06.2017 09:12
Нужна помощь с TCP/IP skdon Cетевые протоколы и технологии 158 19.09.2014 03:58
PIC + MRF24J40 Nik Продукция MICROCHIP 59 05.08.2012 16:51
Звук через ШИМ KeMik Продукция MICROCHIP 79 02.10.2011 12:36


Часовой пояс GMT +3, время: 01:42.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot