[an error occurred while processing this directive]
Не работает volatile в IAR C для MSP430
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено smav 04 февраля 2003 г. 17:21

Есть переменная - указатель буфера передачи для USART.
Обработчик прерывания использует ее для получения байта.
Байт в буфер кладется функция, вызываемая из основной программы. Если при ее вызове буфер был пустой, она разрешает прерывание.
Первоначально указатель буфера был объявлен static volatile. Компилятор в начале функции копирует указатель буфера в регистр и записывает его на место перед return. В результате в момент возникновения прерывания буфер остается пустым.
Если убрать из объявления static - все работает правильно, новое значение буфера сразу записывается в память.
Но самое интересное, если убрать volatile ничего не меняется, то есть
от volatile ничего не зависит!
Компилятор вызывался из командной строки, оптимизация по умолчанию.

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

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru