[an error occurred while processing this directive]
|
Есть переменная - указатель буфера передачи для USART.
Обработчик прерывания использует ее для получения байта.
Байт в буфер кладется функция, вызываемая из основной программы. Если при ее вызове буфер был пустой, она разрешает прерывание.
Первоначально указатель буфера был объявлен static volatile. Компилятор в начале функции копирует указатель буфера в регистр и записывает его на место перед return. В результате в момент возникновения прерывания буфер остается пустым.
Если убрать из объявления static - все работает правильно, новое значение буфера сразу записывается в память.
Но самое интересное, если убрать volatile ничего не меняется, то есть
от volatile ничего не зависит!
Компилятор вызывался из командной строки, оптимизация по умолчанию.
E-mail: info@telesys.ru