Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Когда нужно volatile?

Непрочитано 21.08.2011, 16:52  
neox-neox
Прописка
 
Аватар для neox-neox
 
Регистрация: 27.10.2010
Сообщений: 133
Сказал спасибо: 24
Сказали Спасибо 53 раз(а) в 41 сообщении(ях)
neox-neox на пути к лучшему
По умолчанию Когда нужно volatile?

разъясните мне плиз на примере необходимость этой "volotile" получается в код вижине она совсем не нужна пример:

int a=0;//хоть так работает
volatile int a=0;//хоть этак работает

interrupt [EXT_INT0] void ext_int0_isr(void)
{
a++;
}

void main(void)
{
DDRB=0xff;
GICR|=0x40;
MCUCR=0x02;
GIFR=0x40;
#asm("sei")

while (1)
{
PORTB=a;//все равно работает
};
}
а в avr studio 4 volatile нужна,пример:

volatile int a=0;//так все работает
int a=0;//так не работает

SIGNAL(SIG_INTERRUPT0)
{
a++;
}
int main(void)
{
DDRB=0xff;
DDRD |= 1‹‹1;
PORTD |= _BV(PD1);
DDRD &= ~(0‹‹2);
PORTD |= _BV(PD2);
GIMSK = 1‹‹INT0;
MCUCR = 1‹‹ISC01;

asm("sei");
for (;
{
PORTB=a;
}
}
где подвох?
ведь не зря Атмельци так сделали?!
Реклама:
__________________
- Слово на "б" знаешь ? - ??? - "Береги себя"...

Последний раз редактировалось neox-neox; 21.08.2011 в 16:57.
neox-neox вне форума  
Сказали "Спасибо" neox-neox
warel (28.06.2019)
Непрочитано 21.08.2011, 16:54  
testerplus
Прописка
 
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
testerplus на пути к лучшему
По умолчанию Re: когда нужно volatile?

volatile для "чайников"
testerplus вне форума  
Эти 2 пользователя(ей) сказали Спасибо testerplus за это сообщение:
neox-neox (21.08.2011), warel (28.06.2019)
Непрочитано 21.08.2011, 17:43  
neox-neox
Прописка
 
Аватар для neox-neox
 
Регистрация: 27.10.2010
Сообщений: 133
Сказал спасибо: 24
Сказали Спасибо 53 раз(а) в 41 сообщении(ях)
neox-neox на пути к лучшему
По умолчанию Re: когда нужно volatile?

ок testerplus, кое что разъяснилось. получается что если глобальную переменную мы используем как в "main" так и в коком либо прерывание луче обозвать ее volotile.это многозадачность для одной переменной! но как быть тогда с CV получается он врет? но все ведь работает!
__________________
- Слово на "б" знаешь ? - ??? - "Береги себя"...
neox-neox вне форума  
Сказали "Спасибо" neox-neox
warel (28.06.2019)
Непрочитано 21.08.2011, 17:59  
testerplus
Прописка
 
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
testerplus на пути к лучшему
По умолчанию Re: когда нужно volatile?

Сообщение от neox-neox Посмотреть сообщение
но как быть тогда с CV получается он врет? но все ведь работает!
CV, насколько я помню, не особо искушен в оптимизации. тут штука такая: чем умнее компилятор, тем больше проблем из-за отсутствия волатайл.

Поймите, что volatile сделали не атмельщики, а сишники. Это стандартный квалификатор. Если Вы заглянете в код, сгенеренный CV и WinAVR (AvrStudio), то поймете, в чем разница и откуда растут ноги.
testerplus вне форума  
Сказали "Спасибо" testerplus
warel (28.06.2019)
Непрочитано 21.08.2011, 18:07  
neox-neox
Прописка
 
Аватар для neox-neox
 
Регистрация: 27.10.2010
Сообщений: 133
Сказал спасибо: 24
Сказали Спасибо 53 раз(а) в 41 сообщении(ях)
neox-neox на пути к лучшему
По умолчанию Re: когда нужно volatile?

Сообщение от testerplus Посмотреть сообщение
volatile сделали не атмельщики, а сишники
сори я имел в виду другое.вы правы!
__________________
- Слово на "б" знаешь ? - ??? - "Береги себя"...
neox-neox вне форума  
Сказали "Спасибо" neox-neox
warel (28.06.2019)
Непрочитано 21.08.2011, 18:10  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: когда нужно volatile?

Сообщение от neox-neox Посмотреть сообщение
но как быть тогда с CV получается он врет? но все ведь работает!
Некоторые недо- полу- СИ-компиляторы вполне могут позволить себе вольность не применять volatile...
Поройтесь в папках компилятора, позаглядывайте в хидеры... если порты, регистры и отдельные биты описаны с квалификатором volatile, то вероятность нарваться на неприятности в случае его неприменения высока...
st_1 вне форума  
Сказали "Спасибо" st_1
warel (28.06.2019)
Непрочитано 21.08.2011, 18:17  
neox-neox
Прописка
 
Аватар для neox-neox
 
Регистрация: 27.10.2010
Сообщений: 133
Сказал спасибо: 24
Сказали Спасибо 53 раз(а) в 41 сообщении(ях)
neox-neox на пути к лучшему
По умолчанию Re: когда нужно volatile?

Сообщение от testerplus Посмотреть сообщение
CV, насколько я помню, не особо искушен в оптимизации
да и на счет этого тоже правы,сравнил hex-ы у CV hex больше при одинаковых кодах! даже при включенной оптимизации по размеру
__________________
- Слово на "б" знаешь ? - ??? - "Береги себя"...
neox-neox вне форума  
Сказали "Спасибо" neox-neox
warel (28.06.2019)
Непрочитано 21.08.2011, 18:30  
neox-neox
Прописка
 
Аватар для neox-neox
 
Регистрация: 27.10.2010
Сообщений: 133
Сказал спасибо: 24
Сказали Спасибо 53 раз(а) в 41 сообщении(ях)
neox-neox на пути к лучшему
По умолчанию Re: когда нужно volatile?

Сообщение от st_1 Посмотреть сообщение
Некоторые недо- полу- СИ-компиляторы
но тут есть штука,CV не совсем не понимает volatile сейчас экспериментирую в CV забил следующие:

void Delay (int D ){
volatile int i;
for (i = 0; i ‹ D; i++){
continue;
}
}
int main(void){
DDRD=255;
while(1){
PORTD=255;
Delay(1000);
PORTD=0;
Delay(1000);
}
return 0;
}

смотрю в протеусе осцилогрофом _|-|_ положительный перейюд меандра равен 23.00ms а без volatile в задержке 11.00ms как это объяснить?
__________________
- Слово на "б" знаешь ? - ??? - "Береги себя"...
neox-neox вне форума  
Сказали "Спасибо" neox-neox
warel (28.06.2019)
Непрочитано 21.08.2011, 18:42  
testerplus
Прописка
 
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
testerplus на пути к лучшему
По умолчанию Re: когда нужно volatile?

Сообщение от neox-neox Посмотреть сообщение
CV не совсем не понимает volatile сейчас экспериментирую
Вы не с того бока подходите к проблеме. Если Вам интересно поведение конкретного компилятора в отношении его приемов оптимизации, то Вам следует смотреть генерируемый им код. Только и всего. Никакого понимания квалификатора volatile Вам это не привьет. И то, как он проявляет себя в конкретном примере, - вопрос скорее к разработчикам CV.

Штука тут в другом: если по логике какая- то переменная должна быть volatile, то ее и нужно объявлять таковой вне зависимости от того, какой компилятор используется. Пройдет год или 2 - и выйдет новая версия CV с улучшенной оптимизаций, и Ваша программа начнет падать.

Конкретно о Вашем коде: надеюсь, Вы понимаете, что и с volatile и без него рассчитывать на точную задержку, построенную таким образом, не приходится.
testerplus вне форума  
Сказали "Спасибо" testerplus
warel (28.06.2019)
Непрочитано 21.08.2011, 18:43  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Когда нужно volatile?

neox-neox
Подозреваю, что с volatile компилятор разместил переменную в ОЗУ, а без - в регистр... С CV не работаю... сам посмотреть не могу...
st_1 вне форума  
Сказали "Спасибо" st_1
warel (28.06.2019)
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно пересчитать переменные на "С" помогите 7Fantomas7 Микроконтроллеры, АЦП, память и т.д 12 17.10.2010 13:37
Памагите плз!!!! что нужно для AD5933 gus1234 Микроконтроллеры, АЦП, память и т.д 0 16.07.2006 00:30
[Решено] Всем эмбеддерам посвящается... Decan Отвлекитесь, эмбеддеры! 0 24.10.2005 14:43


Часовой пояс GMT +4, время: 02:43.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.