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

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

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

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

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

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

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

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

testerplus знаете дело в чем! Я просто пытаюсь понять когда стоит писать volatile а когда это ошибка.читаю сейчас это http://crossplatform.ru/node/183есть вопрос можно ли достоверно назвать код с несколькими функциями "многопоточная программа"?
Реклама:
__________________
- Слово на "б" знаешь ? - ??? - "Береги себя"...
neox-neox вне форума  
Непрочитано 21.08.2011, 19:00  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Когда нужно volatile?

Сообщение от testerplus Посмотреть сообщение
Пройдет год или 2 - и выйдет новая версия CV с улучшенной оптимизаций, и Ваша программа начнет падать.
Добавлю... чуток...
Или закинуть исходник в другой компилятор... и долго думать, почему прога не работает... или работает не так...
Как в посту #1 ...
st_1 вне форума  
Непрочитано 21.08.2011, 19:10  
testerplus
Прописка
 
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
testerplus на пути к лучшему
По умолчанию Re: Когда нужно volatile?

Сообщение от neox-neox Посмотреть сообщение
можно ли достоверно назвать код с несколькими функциями "многопоточная программа"?
Уффф... Ну и навернули вопросик, даже не знаю, как ответить, чтобы кратко Ибо статейку Вы выбрали, ну, скажем так, не совсем для микроконтроллеров.

В первом приближении могопоточной программа для авр'а становится тогда, когда в ней появляются обработчики прерываний. Т.е. когда функция (не важно, много их в программе или всего одна main) может быть прервана в произвольном месте без ее ведома. Если она сама вызывает другие функции, то это не многопоточность. Ваша программа в первом посте - многопоточная, а в 8-м - нет.


Другой вариант многопоточности - работа под управлением многозадачной ОС (операционной системы) (часто называют RTOS), когда несколько функций работают параллельно, прерывая друг друга.
testerplus вне форума  
Непрочитано 21.08.2011, 19:14  
testerplus
Прописка
 
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
testerplus на пути к лучшему
По умолчанию Re: Когда нужно volatile?

Сообщение от neox-neox Посмотреть сообщение
Я просто пытаюсь понять когда стоит писать volatile а когда это ошибка.
Лишний волатайл - это не ошибка. Отсутствующий - ошибка. Все аспекты проблем, возникающих из-за отсутствия volatile там, где надо, описаны в статье, которую я Вам дал.
testerplus вне форума  
Непрочитано 21.08.2011, 19:20  
neox-neox
Прописка
 
Аватар для neox-neox
 
Регистрация: 27.10.2010
Сообщений: 133
Сказал спасибо: 24
Сказали Спасибо 53 раз(а) в 41 сообщении(ях)
neox-neox на пути к лучшему
По умолчанию Re: Когда нужно volatile?

ААА testerplus теперь все ясно!!! большое спасибо!!! последний ваш ответ расставил все точки!А не могли бы вы показать примерчик когда несколько функций работают параллельно, так для общего образования? хоть под какую плутформу
__________________
- Слово на "б" знаешь ? - ??? - "Береги себя"...

Последний раз редактировалось neox-neox; 21.08.2011 в 19:23.
neox-neox вне форума  
Непрочитано 21.08.2011, 19:24  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Когда нужно volatile?

Сообщение от neox-neox Посмотреть сообщение
Я просто пытаюсь понять когда стоит писать volatile а когда это ошибка.
Не так это всё просто... к сожалению... На пальцах все нюансы не объяснишь...
Есть правила в каких случаях обязательно нужен volatile, а есть случаи, когда volatile, как выход из сложившейся ситуации...
У меня был случай, когла компилятор тупо убивал параметр простой функции... Функция выполнялась один раз... и на этом всё...
st_1 вне форума  
Непрочитано 21.08.2011, 19:37  
testerplus
Прописка
 
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
testerplus на пути к лучшему
По умолчанию Re: Когда нужно volatile?

Сообщение от neox-neox Посмотреть сообщение
А не могли бы вы показать примерчик когда несколько функций работают параллельно, так для общего образования?
Вот пример, не вникайте в содержание темы, оно там боком, но две функции task1 и task2 будут работать параллельно. Там нет RTOS, только чисто Си-шные приемы.
testerplus вне форума  
Непрочитано 22.08.2011, 13:08  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Когда нужно volatile?

Сообщение от testerplus Посмотреть сообщение
Лишний волатайл - это не ошибка. Отсутствующий - ошибка.
Отсутствующий - ошибка, а лишний - некорректность. По сути вы запретите компилятору выполнять оптимизацию в части данной переменной. И это неправильно! Иначе у вас возникнет желание все переменные так объявить.

С другой стороны вам тут напустили тумана ... а на самом деле берёте учебник по Си и читаете определение ... По памяти примерно выглядит так: квалификатор для переменной, которая может быть изменена внешним образом, по отношению к описываемому процессу.

Типичный пример
for( ;; )
{
if(iii›N) break;
.....
}
Если переменная не volatile, нормальный компилятор вынесет if за цикл.
Очевидно что помещение в цикл данной переменной имеет смысл только тогда, когда переменная может измениться "внешним образом" по отношению к написанной проге. В цикле то она не меняется!
Когда это возможно? Ну например это порт ввода или переменная которая меняется в прерывании ...
То есть вы это должны автоматом видеть прямо в момент написания программы. Вы её пишите уже с расчётом этого.
SasaVitebsk вне форума  
Сказали "Спасибо" SasaVitebsk
neox-neox (22.08.2011)
Непрочитано 23.08.2011, 12:40  
testerplus
Прописка
 
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
testerplus на пути к лучшему
По умолчанию Re: Когда нужно volatile?

Я бы не советовал в таких сложных вопросах, как volatile (тут и профессионалы бывает ошибаются), обращаться к учебникам. То, что Вы процитировали из учебника, - это одно из применений volatile. А вообще этот квалификатор просто запрещает выполнять оптимизацию при работе с объектами (в основном с переменными, но не только).

Вот пример за рамками Вашего определения:
Код:
    unsigned char i;

    // Ищем нулевой элемент в массиве
    for (i = 0; i ‹ 64; i++) if (Data[i] == 0x00) break;

    if (i == 64) ...; // Если не нашли,  то ...
В этом коде есть ошибка: компилятор запросто может развернуть порядок счета, если посчитает, что так будет эффективнее, и тогда при отсутствии 0x00 в массиве i будет равна не 64, а 0xFF (или 0, в зависимости от реализации).

P.S.
Сообщение от SasaVitebsk
Отсутствующий - ошибка, а лишний - некорректность
Это не некорректность. Программа будет работать абсолютно правильно., просто немного снизится эффективность оптимизации.

Последний раз редактировалось testerplus; 23.08.2011 в 22:43.
testerplus вне форума  
 

Закладки
Опции темы

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

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, время: 19:55.


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