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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
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,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
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, время: 15:48.


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