[an error occurred while processing this directive]
Ответ: ну например (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено DASM 17 июля 2006 г. 23:46
В ответ на: вот-вот, уже горячее. про первый случай я знал, а вот про второй - нет. хотя уже ткнулся носом в то что статик не может быть экстерном. про volatile я так и не понял где когда и как его нужно объявлять. отправлено LordN 17 июля 2006 г. 23:39

есть у нас прерывание таймера и переменная bool bT;
допустим мы в основной программе через эту переменную хотим узнать, было ли это прерывание.


interrupt TimerInt :
bT = true;

main:
while (!bT)
; // ждем пока свершится прерывание


Так вот если volatile не поставить, то может случится вот что -
bT лежит в ОЗУ. Процессор на входе в while считает значение в свой регистр, и будет ждать изменения регистра, а не ячейки ОЗУ. Соптимизирует так сказать. Понятно, что не дождется никогда.
А если она будет volatile, то оптимизацию выполнять он не будет, и будет постоянно считывать значение из памяти, что нам и требуется

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание