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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 31.10.2018, 11:14   #1
Andrey K.
Member
 
Регистрация: 14.05.2012
Сообщений: 46
Вес репутации: 114/32
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
Сообщений: 868
Вес репутации: 1709/64
DmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant future
По умолчанию Re: PICC18 #define USE_XXX_MASK

для установки или сброса битов в регистрах
DmitrijVDN вне форума   Ответить с цитированием
Старый 01.11.2018, 00:22   #3
Andrey K.
Member
 
Регистрация: 14.05.2012
Сообщений: 46
Вес репутации: 114/32
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
Возраст: 25
Сообщений: 305
Вес репутации: 978/45
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 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/32
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
Возраст: 33
Сообщений: 2,455
Вес репутации: 4677/101
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/32
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
Возраст: 25
Сообщений: 305
Вес репутации: 978/45
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 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
Сообщений: 868
Вес репутации: 1709/64
DmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant future
По умолчанию 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/32
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
Сообщений: 868
Вес репутации: 1709/64
DmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant future
По умолчанию Re: PICC18 #define USE_XXX_MASK

уход от магических чисел, переносимость кода или нет?
DmitrijVDN вне форума   Ответить с цитированием
Старый 03.11.2018, 10:39   #12
siarzhuk
Senior Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 50
Сообщений: 190
Вес репутации: 1617/39
siarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant future
По умолчанию Re: PICC18 #define USE_XXX_MASK

Цитата:
Сообщение от DmitrijVDN Посмотреть сообщение
если по каким-то причинам (религиозным ) прогербилдер предпочитает маску OR
Да потому как с детского садика все эти палочки и амперсандики в подкорку забиваются с определёным смыслом - а тут бабах и "отраслевой стандарт", как снег на голову, утверждает "обратное" - доставило в своё время, да. Кстати, кроме как [сомнительно] большая "читабельность" в готовом варианте - есть у такого способа записи масок реальные преимущества?
siarzhuk вне форума   Ответить с цитированием
Старый 03.11.2018, 11:36   #13
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,455
Вес репутации: 4677/101
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
Адрес: Барнаул
Возраст: 34
Сообщений: 1,507
Вес репутации: 826/71
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
Адрес: Воронеж
Возраст: 49
Сообщений: 1,842
Вес репутации: 2279/87
petrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond repute
Отправить сообщение для 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
Возраст: 50
Сообщений: 190
Вес репутации: 1617/39
siarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant futuresiarzhuk has a brilliant future
По умолчанию 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, время: 06:17.


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