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

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

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

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

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

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

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

 
Опции темы

Keil C51 и volatile. Массив, изменяемый в обработчике прерывания - volatile?

Непрочитано 06.01.2017, 16:26  
ArtemKolesnikov
Прописка
 
Аватар для ArtemKolesnikov
 
Регистрация: 16.03.2007
Адрес: Невинномысск, STAVROPOL REGION (26)
Сообщений: 117
Сказал спасибо: 582
Сказали Спасибо 28 раз(а) в 15 сообщении(ях)
ArtemKolesnikov на пути к лучшему
По умолчанию Keil C51 и volatile. Массив, изменяемый в обработчике прерывания - volatile?

Всем привет.
Имеется официальный код примера на чип-трансивер nrf24LE1 от Nordic.
Keil C51
Код:
// Global variables
uint8_t payload[3];
 
// Radio interrupt
NRF_ISR() //Обработчик прерывания, макросс #define NRF_ISR()       void nrf_isr(void)      interrupt 8   // RF interrupt (0x4b)
{
...
    // Read payload
...
      hal_nrf_read_rx_payload(payload);
...
}
Функция hal_nrf_read_rx_payload(payload) принимает аргумент-указатель и читает данные из буфера обмена чипа в этот массив.
Кто-нибудь, пожалуйста, объясните, почему в этом коде программисты глобальный массив uint8_t payload[3] не объявили как volatile ???
Уже 4 часа не могу вкурить.
На форуме Keil пишут, что надо.
http://www.keil.com/forum/3380/
Спасибо!
Реклама:

Последний раз редактировалось ArtemKolesnikov; 06.01.2017 в 16:31. Причина: ссылка на форум keil
ArtemKolesnikov вне форума  
Непрочитано 06.01.2017, 17:12  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Keil C51 и volatile. Массив, изменяемый в обработчике прерывания - volatile?

volatile - рекомендация компилятору не оптимизировать (не изменять по своему усмотрению) работу с этими переменными, когда включается оптимизация, и компилятор вдруг может обнаружить возможность оптимизации (сокращения, ускорения) операций. "Может", но не "обязан".
NewWriter вне форума  
Сказали "Спасибо" NewWriter
ArtemKolesnikov (06.01.2017)
Непрочитано 07.01.2017, 23:03  
ArtemKolesnikov
Прописка
 
Аватар для ArtemKolesnikov
 
Регистрация: 16.03.2007
Адрес: Невинномысск, STAVROPOL REGION (26)
Сообщений: 117
Сказал спасибо: 582
Сказали Спасибо 28 раз(а) в 15 сообщении(ях)
ArtemKolesnikov на пути к лучшему
По умолчанию Re: Keil C51 и volatile. Массив, изменяемый в обработчике прерывания - volatile?

Тут прочитал информацию, что оптимизация массива (не volatile) не будет производиться, если этот массив передается в функцию. Как раз мой случай. Прочитал в комментариях на хабрахабре. Эти слова имеют законное основание?
ArtemKolesnikov вне форума  
Непрочитано 07.01.2017, 23:14  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Keil C51 и volatile. Массив, изменяемый в обработчике прерывания - volatile?

Сообщение от ArtemKolesnikov Посмотреть сообщение
почему в этом коде программисты глобальный массив uint8_t payload[3] не объявили как volatile ???
Вообще-то, если в тексте программы есть прямое явное обновление данных массива, то он не должен подвергаться оптимизации. Вот если заполнение идет через ПДП от периферии, то компилятор запросто может посчитать, что объявленный массив содержит нули и он просто не нужен.
Но это теоретически. Практически - я уже ходил по этим граблям: что и как расценит компилятор - и разработчик не всегда скажет. "Лучше перебздеть, чем недобдеть"(с) Кстати, то же относится к неявным преобразованиям типов.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Сказали "Спасибо" akegor
ArtemKolesnikov (08.01.2017)
 
Опции темы

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

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

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


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


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