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

 
 
 
Reply to this topicStart new topic
> WinAVR, Вопрос по оптимизации
EugeNNe
сообщение Jul 3 2008, 06:32
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 424
Регистрация: 6-03-06
Из: Н.Новгород
Пользователь №: 14 997



Можно ли как то указать компилятору что данный участок кода не нужно оптимизировать?
Go to the top of the page
 
+Quote Post
aesok
сообщение Jul 3 2008, 06:38
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(BigBolt @ Jul 3 2008, 10:32) *
Можно ли как то указать компилятору что данный участок кода не нужно оптимизировать?


Нет.

Анатолий.
Go to the top of the page
 
+Quote Post
EugeNNe
сообщение Jul 3 2008, 06:58
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 424
Регистрация: 6-03-06
Из: Н.Новгород
Пользователь №: 14 997



Жаль. Придётся на асме отдельный кусок лепить...
Go to the top of the page
 
+Quote Post
aesok
сообщение Jul 3 2008, 07:01
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(BigBolt @ Jul 3 2008, 10:58) *
Жаль. Придётся на асме отдельный кусок лепить...


А может вначале расказать в чем проблемма, может Вам подскажут более простое решение?

Анатолий.
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Jul 3 2008, 07:31
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(BigBolt @ Jul 3 2008, 10:32) *
Можно ли как то указать компилятору что данный участок кода не нужно оптимизировать?

Выделить этот участок в отдельный файл. Ну и далее - O0...
Go to the top of the page
 
+Quote Post
EugeNNe
сообщение Jul 3 2008, 08:41
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 424
Регистрация: 6-03-06
Из: Н.Новгород
Пользователь №: 14 997



Цитата(aesok @ Jul 3 2008, 11:01) *
А может вначале расказать в чем проблемма, может Вам подскажут более простое решение?
Анатолий.



При оптимизации -0s функция компилится не так как бы этого хотелось. Переменная которая изменяется в прерывании в данной функции не обновляется даже с использованием volatile. Если компилить при опции -О0 то всё нормально...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 3 2008, 08:49
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(BigBolt @ Jul 3 2008, 11:41) *
Переменная которая изменяется в прерывании в данной функции не обновляется даже с использованием volatile.
Раз код настолько секретный, что даже кусочек его показать нельзя, рискну телепатировать, что переменная - указатель. И объявлена как-то вроде volatile char * Variable. Угадал?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
EugeNNe
сообщение Jul 3 2008, 09:04
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 424
Регистрация: 6-03-06
Из: Н.Новгород
Пользователь №: 14 997



Цитата(Сергей Борщ @ Jul 3 2008, 12:49) *
Раз код настолько секретный, что даже кусочек его показать нельзя, рискну телепатировать, что переменная - указатель. И объявлена как-то вроде volatile char * Variable. Угадал?


Да нет не секретный, уже всё переделал. Структура, доступ к которой происходит через указатель. В цикле проверки обращениее к ней происходит один раз, при входе в цикл ожидания. А потом проверяется одно и тоже значение. Естественно сообщение о том что произошло некое событие не фиксируется.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 3 2008, 10:07
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(BigBolt @ Jul 3 2008, 12:04) *
Да нет не секретный, уже всё переделал.
Ну так покажите. На словах тяжело воспринимается. У вас скорее всего как volatile был объявлен сам указатель, а не то, на что он указывет. Или наоборот. Отсюда и проблемы.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
777777
сообщение Jul 5 2008, 18:10
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(BigBolt @ Jul 3 2008, 13:04) *
Да нет не секретный, уже всё переделал. Структура, доступ к которой происходит через указатель. В цикле проверки обращениее к ней происходит один раз, при входе в цикл ожидания. А потом проверяется одно и тоже значение. Естественно сообщение о том что произошло некое событие не фиксируется.


Прочитав предложение #3 я предположил, что где-то не хватает volatile. Оказалось, и в самом деле.
Go to the top of the page
 
+Quote Post
r301
сообщение Jul 17 2008, 15:50
Сообщение #11





Группа: Участник
Сообщений: 13
Регистрация: 20-10-07
Пользователь №: 31 533



Цитата(Сергей Борщ @ Jul 3 2008, 14:07) *
Ну так покажите. На словах тяжело воспринимается. У вас скорее всего как volatile был объявлен сам указатель, а не то, на что он указывет. Или наоборот. Отсюда и проблемы.


bb-offtopic.gif
может покажите как правильно объявлять указатель на volatile, а как указатель с квалификатором volatile. Недавно столкнулся с этим вопросом, ничего толкового не нашел ((
bb-offtopic.gif
Go to the top of the page
 
+Quote Post
aesok
сообщение Jul 17 2008, 16:10
Сообщение #12


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(r301 @ Jul 17 2008, 19:50) *
bb-offtopic.gif
может покажите как правильно объявлять указатель на volatile, а как указатель с квалификатором volatile. Недавно столкнулся с этим вопросом, ничего толкового не нашел ((
bb-offtopic.gif


Для volatile аналогично.

Цитата
Код
const Pointers

The keyword const for pointers can appear before the type, after the type, or in both places. The following are legal declarations:

const int * ptr1;       /* A pointer to a constant integer:
                             the value pointed to cannot be changed  */
int * const ptr2;       /* A constant pointer to integer:
                             the integer can be changed, but ptr2
                             cannot point to anything else           */
const int * const ptr3; /* A constant pointer to a constant integer:
                             neither the value pointed to
                             nor the pointer itself can be changed   */

Declaring an object to be const means that the this pointer is a pointer to a const object. A const this pointer can by used only with const member functions.


Анатолий.

Сообщение отредактировал aesok - Jul 17 2008, 16:13
Go to the top of the page
 
+Quote Post

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

 


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


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