реклама на сайте
подробности

 
 
> Странная работа оптимизатора MPLAB C32, Вроде бы проще некуда...
Slonic
сообщение Feb 16 2010, 20:38
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 3-10-05
Из: Москва-Троицк
Пользователь №: 9 174



Имеется процессор PIC32MX340, компилятор MPLAB C32 и следующий фрагмент программы:

Код
BYTE flag;

В функции main()

flag = 1;           // заводим переменную и устанавливаем ее в 1
while(flag);        // стоим здесь, пока значение переменной не сбросится в 0
LED1 = 1;         // а потом зажигаем лампочку

Потом в функции по периодическому прерыванию:

flag = 0;           // сбрасываем флаг
LED2 = 1;         // и включаем другую лампочку


При отключенной оптимизации (level 0), все работает правильно. При включенной - программа вечно стоит в цикле while, при том что прерывание вызывается и светодиод LED2 горит! Поставил последнюю версию компилятора (1.10), все то же самое. Как бороться пока не знаю, наверное, придется локально отключать оптимизатор...

Сообщение отредактировал Slonic - Feb 16 2010, 20:44
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Feb 17 2010, 07:24
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Забавно, что именно таким образом многие узнают про volatile.
Это не странная, а абсолютно нормальная работа оптимизатора, и volatile нужен именно для этого.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 08:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.0126 секунд с 7
ELECTRONIX ©2004-2016