|
Вопрос по volatile |
|
|
|
 |
Ответов
|
Jan 19 2017, 06:54
|
Профессионал
    
Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256

|
jcxz, а мне Ваши примеры напоминают троллинг, повторение описанного ранее. Я не вижу причин для сбоя в Вашем коде. В описанной ситуации функция не увидит возведение флажка, при втором входе в функцию все будет Ок. Повторюсь: где проблема? Да и пример я бы назвал "странным" (читай так делать нельзя), т.к. оба прерывания используют один и тот же байт-флаг и если они сработают друг за другом, то Вы не будете знать, что сработало первое. Цитата Если записи нет, а есть только чтения, то компилятор заменит все чтения этой переменной загрузкой константы в регистр. А потом компоновщик увидит, что к этой переменной нет ни одного обращения и удалит её за ненадобностью. Какой еще константы, если она переменная? Как это нет обращения, Вы же ее читаете. Цитата И функция при выходе результат работы прерывания затирает. Если переменная изменяется в функции, то это делать надо атомарно, и тогда не будет описанной Вами проблемы. Если что, то volatile не спасет от написанного Вами. Цитата Вот еще пример - иногда требуется только сам факт чтения/записи переменной (без реальных значений) для выполнения какого либо действия в периферии. Без volatile такое "бессмысленное расточительство" режется на корню "слишком умным" компилятором. Хороший пример, добавляем в копилку. Хотя можно объявить переменную глобально или extern, тоже будет работать. Цитата "Споры" нужны для того, чтобы понять при каких ситуациях "сюрпризы возможны". Пока имеем следующие ситуации требущие объявления volatile: 1) Переменные в блокирующих операций (ожидание определенного значения в цикле) 2) Все системные регистры, в том числе ввода/вывода (хотя они де-факто volatile) 3) Переменные в которые "просто читаем" из какого-либо регистра (как вариант, используем глобальную или extern переменную)Еще пару примеров и можно делать мини-FAQ по теме вопроса
|
|
|
|
Сообщений в этой теме
Alt.F4 Вопрос по volatile Jan 14 2017, 09:00 Lagman Для 51 в кейле такое объяснение http://www.keil.co... Jan 14 2017, 18:17 XVR Чтения этих переменных делается напрямую или тоже ... Jan 15 2017, 20:39 Alt.F4 Если вообще смотреть на проблемы в примерах, то он... Jan 15 2017, 21:05 jcxz Цитата(Alt.F4 @ Jan 14 2017, 12:00) В оче... Jan 16 2017, 13:19 Укушенный воблой Цитата(jcxz @ Jan 16 2017, 14:19) Атомарн... Jan 18 2017, 16:14  zltigo Цитата(Укушенный воблой @ Jan 18 2017, 18... Jan 18 2017, 17:06   Baser Цитата(zltigo @ Jan 18 2017, 19:06) Никак... Jan 18 2017, 18:09 SlavaV Тогда и я своё видение изложу
В документацию не л... Jan 16 2017, 14:43 jcxz Цитата(SlavaV @ Jan 16 2017, 17:43) PS а ... Jan 16 2017, 15:00 SlavaV Переменная не "путешествует" во время вы... Jan 16 2017, 15:14 jcxz Цитата(SlavaV @ Jan 16 2017, 18:14) Перем... Jan 16 2017, 15:41 SlavaV int x;
void f()
{
x += N1; //1
...
x += N2; //2... Jan 16 2017, 15:55 Сергей Борщ QUOTE (SlavaV @ Jan 16 2017, 17:55) вы сч... Jan 16 2017, 16:44 gerber Цитата(SlavaV @ Jan 16 2017, 18:55) вы сч... Jan 16 2017, 16:55  jcxz Цитата(gerber @ Jan 16 2017, 19:55) А в в... Jan 16 2017, 17:40 Alt.F4 Снова приведен пример, как и во всех статьях. В ре... Jan 16 2017, 17:10 XVR Пример (https://gcc.godbolt.org/)
Код (компилятор ... Jan 16 2017, 19:03 Alt.F4 Цитата... Дальше например можете в цикле ждать ког... Jan 17 2017, 07:57 jcxz Цитата(Alt.F4 @ Jan 17 2017, 10:57) Если ... Jan 17 2017, 14:01 RobFPGA Приветствую!
Не забывайте о том что не только... Jan 17 2017, 14:20 Alt.F4 jcxz, вот именное такие: "например можете в ц... Jan 17 2017, 21:45 jcxz Цитата(Alt.F4 @ Jan 18 2017, 00:45) Значи... Jan 18 2017, 08:39 Kabdim А если включить lto то оптимизироваться будет совс... Jan 18 2017, 08:44 Alt.F4 jcxz, сейчас я тоже начну вас оскорблять
Изменять... Jan 18 2017, 10:53 jcxz Цитата(Alt.F4 @ Jan 18 2017, 13:53) jcxz,... Jan 18 2017, 11:12 RobFPGA Приветствую!
Цитата(Alt.F4 @ Jan 18 2017... Jan 18 2017, 11:23 Alt.F4 jcxz, читаю "на входе в эту функцию, компилят... Jan 18 2017, 11:24 RobFPGA Приветствую!
Цитата(Alt.F4 @ Jan 18 2017,... Jan 18 2017, 11:49 Baser Цитата(Alt.F4 @ Jan 18 2017, 13:24) jcxz,... Jan 18 2017, 11:52 jcxz Цитата(Alt.F4 @ Jan 18 2017, 14:24) И как... Jan 18 2017, 14:05 Alt.F4 RobFPGA, думаю, если буфер объявлен глобально, то ... Jan 18 2017, 12:33 Baser Цитата(Alt.F4 @ Jan 18 2017, 14:33) Ну ка... Jan 18 2017, 14:06  RobFPGA Приветствую!
Цитата(Baser @ Jan 18 2017, ... Jan 18 2017, 15:08 aiwa Цитата(Alt.F4 @ Jan 17 2017, 23:45) RobFP... Jan 18 2017, 13:54 DASM Господа никогда не понимал таких споров. Процесс в... Jan 18 2017, 14:32 Baser Цитата(RobFPGA @ Jan 18 2017, 17:08) Прос... Jan 18 2017, 16:38 Укушенный воблой А если я работаю с переменной через указатель на н... Jan 18 2017, 18:31 jcxz Цитата(Укушенный воблой @ Jan 18 2017, 21... Jan 19 2017, 07:37 aiwa Цитата(Укушенный воблой @ Jan 18 2017, 20... Jan 18 2017, 22:36 Укушенный воблой Цитата(aiwa @ Jan 18 2017, 22:36) Правила... Jan 19 2017, 04:18  XVR Цитата(Укушенный воблой @ Jan 19 2017, 07... Jan 19 2017, 06:34   Укушенный воблой Цитата(XVR @ Jan 19 2017, 06:34) Нет. Ком... Jan 19 2017, 17:24    XVR Цитата(Укушенный воблой @ Jan 19 2017, 20... Jan 19 2017, 19:21     Укушенный воблой Цитата(XVR @ Jan 19 2017, 20:21) Так не б... Jan 19 2017, 19:42      XVR Цитата(Укушенный воблой @ Jan 19 2017, 22... Jan 19 2017, 19:52 jcxz Цитата(Alt.F4 @ Jan 19 2017, 09:54) Да и ... Jan 19 2017, 07:18 Сергей Борщ QUOTE (Alt.F4 @ Jan 19 2017, 08:54) Пока ... Jan 19 2017, 07:11 Alt.F4 ЦитатаОчевидно что Вы и читать исходники не умеете... Jan 19 2017, 07:32 Укушенный воблой Вы ошибаетесь.
Просто я не хочу обсуждать вкус уст... Jan 19 2017, 20:30 XVR Цитата(Укушенный воблой @ Jan 19 2017, 23... Jan 20 2017, 09:40  AHTOXA Цитата(XVR @ Jan 20 2017, 14:40) Требую п... Jan 20 2017, 11:19   zltigo Цитата(AHTOXA @ Jan 20 2017, 13:19) Ну вы... Jan 20 2017, 20:21 aiwa Цитата(Alt.F4 @ Jan 19 2017, 09:32) Я не ... Jan 20 2017, 04:17 jcxz Цитата(aiwa @ Jan 20 2017, 07:17) res_yes... Jan 20 2017, 10:03 Укушенный воблой Цитата(aiwa @ Jan 20 2017, 05:17) 2. втор... Jan 21 2017, 09:09  XVR Цитата(Укушенный воблой @ Jan 21 2017, 12... Jan 23 2017, 10:13 ViKo Побейтесь еще за пустой мешок! Jan 20 2017, 09:57 aiwa Цитата(jcxz @ Jan 20 2017, 12:03) Здесь к... Jan 20 2017, 10:28 sigmaN Цитата(Сергей Борщ @ Jan 19 2017, 10:11) ... Jan 22 2017, 17:59 Укушенный воблой Нет.
Если с умом подходить к разработке программ... Jan 25 2017, 15:51
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|