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

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

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

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

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

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

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

 
Опции темы
Непрочитано 06.01.2017, 16:26  
ArtemKolesnikov
Прописка
 
Аватар для ArtemKolesnikov
 
Регистрация: 16.03.2007
Адрес: Невинномысск, STAVROPOL REGION (26)
Сообщений: 118
Сказал спасибо: 583
Сказали Спасибо 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.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,504
Сказал спасибо: 401
Сказали Спасибо 2,217 раз(а) в 1,315 сообщении(ях)
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)
Сообщений: 118
Сказал спасибо: 583
Сказали Спасибо 28 раз(а) в 15 сообщении(ях)
ArtemKolesnikov на пути к лучшему
По умолчанию Re: Keil C51 и volatile. Массив, изменяемый в обработчике прерывания - volatile?

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

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

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

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

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

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


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


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