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

 
 
> К знатокам, Локальные переменные.
SasaVitebsk
сообщение Sep 6 2007, 00:58
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Пишу достаточно простую прогу. Пытаюсь оптимизировать.

Столкнулся с одной бедой. Попробую описать.

Построено на прерываниях. Между прерываниями разные промежутки. Есть короткие, есть длинные. Как назло именно короткое прерывание сильно загружено. Дабы разгрузить его я пытаюсь часть вычислений вынести в предыдущее не загруженное прерывание. Уже полностью перешёл на указатели, но всё равно шляпа получается.

Проблема в том, что я не могу ввести локальные переменные на два прерывания. Таким образом я ввожу статик. Но тогда во втором прерывании компилятор пытается сохранить значения. А мне это не надо ни капельки. Чтобы этого избежать я ввёл локальные переменные и во втором прерывании выполнил присваивание локальным статик. Код получился значительно компактнее, но всё равно выполняется никому не нужное присваивание. А это 6 указателей!

Теперь сам вопрос.
Могу ли я указать компилятору что можно разрушать переменные в данном прерывании. То есть что не надо их хранить. Или как это сделать. Надо типа переобъявить статические переменные локальными. Не знаю как выразится. Надеюсь поняли.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Sep 6 2007, 11:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Лучше всех понял проблему Сергей Борщ. Я так и сделал. Но всё равно есть лишние операции. Хотелось бы от них избавится. Приведу код с пояснениями.
Код
__no_init    uint8_t        static    *uFaz1,*uFaz2,*uFaz3,
                                *uFaz4,*uFaz5,*uFaz6;    // Вспомогательный. Указатель на текущую фазу двигателя

Это объявление по сути в этих переменных нет необходимости. Чисто чтобы одну операцию разбить на два прерывания.
Код
// Обработка Шима тех каналов (двигателей) которые отрабатывают угол 45
// вывод уровня 0.707 уровень 2
#pragma    vector=TIMER1_COMPB_vect
__interrupt    static void    pvPWWLvl2(void)
{
// Вывод предварительно расчитанных значений портов
PORTE = bOportE[2];
PORTA = bOportA[2];
PORTC = bOportC[2];
// Предварительный расчёт фаз двигателей. Требуется для фазы C
uint8_t    bFaz;
bFaz = (wStateReal[0] & (MAXFAZ-1))>>2;                // Выделить фазу одного двигателя порта
uFaz1 = &bfPortSh1[0][0]+bFaz;
bFaz = (wStateReal[1] & (MAXFAZ-1))>>2;                // Выделить фазу одного двигателя порта
uFaz2 = &bfPortSh2[0][0]+bFaz;
bFaz = (wStateReal[2] & (MAXFAZ-1))>>2;                // Выделить фазу одного двигателя порта
uFaz3 = &bfPortSh3[0][0]+bFaz;
bFaz = (wStateReal[3] & (MAXFAZ-1))>>2;                // Выделить фазу одного двигателя порта
uFaz4 = &bfPortSh4[0][0]+bFaz;
bFaz = (wStateReal[4] & (MAXFAZ-1))>>2;                // Выделить фазу одного двигателя порта
uFaz5 = &bfPortSh5[0][0]+bFaz;
bFaz = (wStateReal[5] & (MAXFAZ-1))>>2;                // Выделить фазу одного двигателя порта
uFaz6 = &bfPortSh6[0][0]+bFaz;
}

Это первое прерывание с места где "Предварительный ..." идёт подготовка инфы для следующего прерывания

Код
// Обработка Шима тех каналов (двигателей) которые отрабатывают угол 67.5. Расчёт предустановленных значений портов.
// вывод уровня 0.9239 уровень 3
#pragma    vector=TIMER1_COMPC_vect
__interrupt    static void    pvPWWLvl3(void)
{
// Вывод предварительно расчитанных значений портов
PORTE = bOportE[3];
PORTA = bOportA[3];
PORTC = bOportC[3];
// Расчёт предустановленных значений портов.
uint8_t    i, *faz1,*faz2,*faz3,*faz4,*faz5,*faz6;
faz1=uFaz1;
faz2=uFaz2;
faz3=uFaz3;
faz4=uFaz4;
faz5=uFaz5;
faz6=uFaz6;
for(i=0;i<MAXLVLPWW;i++)
{
   bOportE[i] = *faz1++ | *faz2++;                    // сформировать значение порта
   bOportA[i] = *faz3++ | *faz4++;                    // сформировать значение порта
   bOportC[i] = *faz5++ | *faz6++;                    // сформировать значение порта
};
}


Здесь вы видите локальные переменные которые введены чтобы избавится от сохранения uFaz. Но суть в том, что сохранять то мне не надо. В следующем цикле эти значения будут высчитаны заново. Введение локальных переменных Дало самый оптимальный код, но может всё таки кто-нибудь из опыта подскажет другое решение. Важно быстродействие последнего прерывания
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 8 2007, 10:49
Сообщение #3


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(SasaVitebsk @ Sep 6 2007, 14:27) *
Код
// Обработка Шима тех каналов (двигателей) которые отрабатывают угол 67.5. Расчёт предустановленных значений портов.
// вывод уровня 0.9239 уровень 3
#pragma    vector=TIMER1_COMPC_vect
__interrupt    static void    pvPWWLvl3(void)
{
// Вывод предварительно расчитанных значений портов
PORTE = bOportE[3];
PORTA = bOportA[3];
PORTC = bOportC[3];
// Расчёт предустановленных значений портов.
uint8_t    i, *faz1,*faz2,*faz3,*faz4,*faz5,*faz6;
faz1=uFaz1;
faz2=uFaz2;
faz3=uFaz3;
faz4=uFaz4;
faz5=uFaz5;
faz6=uFaz6;
for(i=0;i<MAXLVLPWW;i++)
{
   bOportE[i] = *faz1++ | *faz2++;                    // сформировать значение порта
   bOportA[i] = *faz3++ | *faz4++;                    // сформировать значение порта
   bOportC[i] = *faz5++ | *faz6++;                    // сформировать значение порта
};
}


Здесь вы видите локальные переменные которые введены чтобы избавится от сохранения uFaz. Но суть в том, что сохранять то мне не надо. В следующем цикле эти значения будут высчитаны заново. Введение локальных переменных Дало самый оптимальный код, но может всё таки кто-нибудь из опыта подскажет другое решение. Важно быстродействие последнего прерывания


Тут вообще много кода генерит иар. Так как проц у вас с немалым флешем, я думаю можно особо память программ не экономить. Посему предлагаю такой вариант:

Код
//Заменяем массивы на просто переменные
char bOportE0;
char bOportE1;
char bOportE2;
char bOportE3;
char bOportA0;
char bOportA1;
char bOportA2;
char bOportA3;
char bOportC0;
char bOportC1;
char bOportC2;
char bOportC3;
#pragma    vector=TIMER1_COMPC_vect
__interrupt    static void    pvPWWLvl3(void)
{
  PORTE = bOportE3;
  PORTA = bOportA3;
  PORTC = bOportC3;
  uint8_t *faz1,*faz2;
  
  faz1=uFaz1;
  faz2=uFaz2;
  bOportE0=*faz1++|*faz2++;
  bOportE1=*faz1++|*faz2++;
  bOportE2=*faz1++|*faz2++;
  bOportE3=*faz1++|*faz2++;

  faz1=uFaz3;
  faz2=uFaz4;
  bOportA0=*faz1++|*faz2++;
  bOportA1=*faz1++|*faz2++;
  bOportA2=*faz1++|*faz2++;
  bOportA3=*faz1++|*faz2++;
  
  faz1=uFaz5;
  faz2=uFaz6;
  bOportC0=*faz1++|*faz2++;
  bOportC1=*faz1++|*faz2++;
  bOportC2=*faz1++|*faz2++;
  bOportC3=*faz1++|*faz2++;

}


и отключаем для этого модуля кластеризацию переменных. Это освободит один индексный регистр и здорово сократит код. А вообще, наверное надо копать не от финальных процедур, а чуть выше, возможно, пересмотрев алгоритм генерации данных, можно будет сильно улучшить производительность... Если есть возможность, расскажите, какие данные вам надо лить в порты, попробуем придумать что-то оригинальное...


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Sep 9 2007, 14:54
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Всем спасибо. Буду осмысливать и пробовать - экспериментировать.

Цитата(Rst7 @ Sep 8 2007, 13:49) *
и отключаем для этого модуля кластеризацию переменных. Это освободит один индексный регистр и здорово сократит код. А вообще, наверное надо копать не от финальных процедур, а чуть выше, возможно, пересмотрев алгоритм генерации данных, можно будет сильно улучшить производительность... Если есть возможность, расскажите, какие данные вам надо лить в порты, попробуем придумать что-то оригинальное...


biggrin.gif Ещё раз спасибо за альтруизм и желание помочь, но я тогда что буду делать и за что деньги получать? Спасибо итак. Честно скажу есть у меня мысли. Появились точнее. Вас пока нагружать не буду, как "золотой запас". smile.gif
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 10 2007, 06:10
Сообщение #5


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(SasaVitebsk @ Sep 9 2007, 17:54) *
Всем спасибо. Буду осмысливать и пробовать - экспериментировать.
biggrin.gif Ещё раз спасибо за альтруизм и желание помочь, но я тогда что буду делать и за что деньги получать? Спасибо итак. Честно скажу есть у меня мысли. Появились точнее. Вас пока нагружать не буду, как "золотой запас". smile.gif


Ну так пришли же с вопросом, чего бы не помочь. А, глядишь, другим идея пригодится...


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SasaVitebsk   К знатокам   Sep 6 2007, 00:58
- - dxp   Все равно как-то туманно. Вы бы псевдокод привели,...   Sep 6 2007, 04:33
- - alexander55   Цитата(SasaVitebsk @ Sep 6 2007, 04:58) П...   Sep 6 2007, 04:53
- - Сергей Борщ   Да, действительно мутновато. Если я правильно поня...   Sep 6 2007, 05:02
- - MALLOY2   Можно еще все нужные переменные загнать в 1 структ...   Sep 6 2007, 05:49
- - Dog Pawlowa   Цитата(SasaVitebsk @ Sep 6 2007, 03:58) П...   Sep 6 2007, 07:51
|- - alexander55   Цитата(Dog Pawlowa @ Sep 6 2007, 11:51) Я...   Sep 6 2007, 09:20
|- - scifi   Цитата(SasaVitebsk @ Sep 6 2007, 15:27) В...   Sep 6 2007, 13:05
||- - SasaVitebsk   Цитата(scifi @ Sep 6 2007, 16:05) Быстрее...   Sep 6 2007, 19:45
- - vmp   Похоже, здесь основная проблема - это ограничения ...   Sep 7 2007, 13:42
|- - dxp   Цитата(vmp @ Sep 7 2007, 20:42) Похоже, з...   Sep 8 2007, 10:12
|- - Сергей Борщ   Цитата(dxp @ Sep 8 2007, 13:12) Там (в EW...   Sep 8 2007, 11:39
- - mdmitry   Возможно, поможет сократить время выполнения генер...   Sep 8 2007, 22:28
- - SasaVitebsk   Тут проскочила чья-то фраза, что компилятор лучше ...   Sep 18 2007, 09:21
|- - alexander55   Цитата(SasaVitebsk @ Sep 18 2007, 13:21) ...   Sep 18 2007, 09:49
|- - vmp   Цитата(SasaVitebsk @ Sep 18 2007, 13:21) ...   Sep 18 2007, 10:45
||- - rezident   Цитата(vmp @ Sep 18 2007, 16:45) Для отде...   Sep 18 2007, 13:08
||- - vmp   Цитата(rezident @ Sep 18 2007, 17:08) Изв...   Sep 18 2007, 13:35
||- - Dog Pawlowa   Цитата(vmp @ Sep 18 2007, 16:35) Особенно...   Sep 18 2007, 16:30
||- - singlskv   Цитата(Dog Pawlowa @ Sep 18 2007, 20:30) ...   Sep 18 2007, 17:13
||- - IgorKossak   Цитата(Dog Pawlowa @ Sep 18 2007, 19:30) ...   Sep 18 2007, 18:07
|||- - Rst7   Цитата(IgorKossak @ Sep 18 2007, 21:07) Е...   Sep 19 2007, 05:23
|||- - alexander55   Цитата(Rst7 @ Sep 19 2007, 09:23) А вот C...   Sep 19 2007, 05:57
|||- - dxp   Цитата(Rst7 @ Sep 19 2007, 12:23) А вот C...   Sep 19 2007, 12:18
|||- - Rst7   Цитата(dxp @ Sep 19 2007, 15:18) Отнюдь. ...   Sep 19 2007, 12:34
|||- - alexander55   Цитата(Rst7 @ Sep 19 2007, 16:34) ключево...   Sep 19 2007, 12:54
|||- - dxp   Цитата(Rst7 @ Sep 19 2007, 19:34) Хуже бу...   Sep 19 2007, 13:21
|||- - SasaVitebsk   Цитата(dxp @ Sep 19 2007, 16:21) C++ - эт...   Sep 21 2007, 18:26
|||- - singlskv   Цитата(SasaVitebsk @ Sep 21 2007, 22:26) ...   Sep 21 2007, 18:54
||- - SasaVitebsk   Цитата(Dog Pawlowa @ Sep 18 2007, 19:30) ...   Sep 18 2007, 23:46
|- - singlskv   Цитата(SasaVitebsk @ Sep 18 2007, 13:21) ...   Sep 18 2007, 18:41
|- - zltigo   Цитата(singlskv @ Sep 18 2007, 21:41) Соб...   Sep 18 2007, 19:34
||- - singlskv   Цитата(zltigo @ Sep 18 2007, 23:34) Загну...   Sep 18 2007, 19:47
||- - zltigo   Цитата(singlskv @ Sep 18 2007, 22:47) лет...   Sep 18 2007, 19:57
||- - singlskv   Цитата(zltigo @ Sep 18 2007, 23:57) Дела ...   Sep 18 2007, 20:16
|- - dxp   Цитата(singlskv @ Sep 19 2007, 01:41) А в...   Sep 19 2007, 04:18
|- - singlskv   Цитата(dxp @ Sep 19 2007, 08:18) С++ на ...   Sep 19 2007, 19:59
|- - zltigo   Цитата(singlskv @ Sep 19 2007, 22:59) Оче...   Sep 19 2007, 21:03
||- - singlskv   Цитата(zltigo @ Sep 20 2007, 01:03) Оба э...   Sep 19 2007, 21:27
||- - alexander55   Цитата(singlskv @ Sep 20 2007, 01:27) Пов...   Sep 20 2007, 04:58
||- - Непомнящий Евгений   Цитата(alexander55 @ Sep 20 2007, 08:58) ...   Sep 20 2007, 11:42
||- - singlskv   Цитата(Непомнящий Евгений @ Sep 20 2007, 15...   Sep 20 2007, 16:13
||- - dxp   Цитата(singlskv @ Sep 20 2007, 23:13) При...   Sep 21 2007, 03:49
||- - Непомнящий Евгений   Цитата(singlskv @ Sep 20 2007, 20:13) А н...   Sep 21 2007, 04:36
||- - dxp   Цитата(Непомнящий Евгений @ Sep 21 2007, 11...   Sep 21 2007, 05:50
||- - Непомнящий Евгений   Цитата(dxp @ Sep 21 2007, 09:50) P.S. В т...   Sep 21 2007, 06:49
|||- - dxp   Цитата(Непомнящий Евгений @ Sep 21 2007, 13...   Sep 21 2007, 07:14
|||- - Maddy   Цитата(dxp @ Sep 21 2007, 11:14) Ну, не з...   Sep 21 2007, 08:46
|||- - dxp   Цитата(Maddy @ Sep 21 2007, 15:46) Не фле...   Sep 21 2007, 09:12
|||- - Maddy   2 dxp - Thanks   Sep 21 2007, 09:31
||- - alexander55   Цитата(dxp @ Sep 21 2007, 09:50) P.S. В т...   Sep 21 2007, 06:51
||- - singlskv   Цитата(dxp @ Sep 21 2007, 09:50) Под джит...   Sep 21 2007, 20:44
||- - dxp   Цитата(singlskv @ Sep 22 2007, 03:44) джи...   Sep 22 2007, 16:52
||- - singlskv   Цитата(dxp @ Sep 22 2007, 20:52) , давайт...   Sep 22 2007, 17:49
||- - zltigo   Цитата(singlskv @ Sep 22 2007, 20:49) Кон...   Sep 22 2007, 18:11
|||- - singlskv   Цитата(zltigo @ Sep 22 2007, 22:11) Это в...   Sep 22 2007, 19:21
|||- - zltigo   Цитата(singlskv @ Sep 22 2007, 22:00) Вот...   Sep 22 2007, 19:33
||||- - singlskv   Цитата(zltigo @ Sep 22 2007, 23:33) Если ...   Sep 22 2007, 20:09
||||- - zltigo   Цитата(singlskv @ Sep 22 2007, 23:09) Вы ...   Sep 22 2007, 20:39
||||- - singlskv   Цитата(zltigo @ Sep 23 2007, 00:39) - 16b...   Sep 22 2007, 21:13
||||- - zltigo   Цитата(singlskv @ Sep 23 2007, 00:13) Да,...   Sep 22 2007, 21:36
||||- - singlskv   Да, далеко мы уже удалились... от темы, единствен...   Sep 22 2007, 21:47
||||- - zltigo   Цитата(singlskv @ Sep 23 2007, 00:47) Т.к...   Sep 22 2007, 22:22
|||- - dxp   Цитата(singlskv @ Sep 23 2007, 02:21) Это...   Sep 23 2007, 08:59
|||- - singlskv   Цитата(dxp @ Sep 23 2007, 12:59) А если п...   Sep 23 2007, 14:35
|||- - dxp   Цитата(singlskv @ Sep 23 2007, 21:35) Хор...   Sep 23 2007, 16:10
||||- - singlskv   Цитата(dxp @ Sep 23 2007, 20:10) То, что ...   Sep 23 2007, 17:20
||||- - dxp   Цитата(singlskv @ Sep 24 2007, 00:20) Ну ...   Sep 24 2007, 03:38
|||- - zltigo   Цитата(singlskv @ Sep 23 2007, 17:35) zlt...   Sep 23 2007, 19:21
|||- - singlskv   Цитата(zltigo @ Sep 23 2007, 23:21) Такие...   Sep 23 2007, 21:00
|||- - zltigo   Цитата(singlskv @ Sep 24 2007, 00:00) Zlt...   Sep 23 2007, 21:52
|||- - singlskv   Цитата(zltigo @ Sep 24 2007, 01:52) Дело ...   Sep 23 2007, 22:50
||- - dxp   Цитата(singlskv @ Sep 23 2007, 00:49) Дав...   Sep 22 2007, 18:56
|- - dxp   Цитата(singlskv @ Sep 20 2007, 02:59) Вы ...   Sep 20 2007, 03:19
- - SasaVitebsk   Большое спасибо за развёрнутый совет. Похоже надо ...   Sep 22 2007, 17:17
|- - dxp   Цитата(SasaVitebsk @ Sep 23 2007, 00:17) ...   Sep 23 2007, 13:52
- - SasaVitebsk   Попробую я вмешаться. Я тоже делал много изделий с...   Sep 23 2007, 21:36
- - Rst7   Лично я в данном моменте (обмен по RSу, например) ...   Sep 24 2007, 07:05
|- - Непомнящий Евгений   Цитата(Rst7 @ Sep 24 2007, 11:05) Теперь ...   Sep 24 2007, 08:35
|- - Rst7   Цитата(Непомнящий Евгений @ Sep 24 2007, 11...   Sep 24 2007, 08:51
|- - alexander55   Цитата(Rst7 @ Sep 24 2007, 12:51) Неужели...   Sep 24 2007, 09:28
|- - Непомнящий Евгений   Вдогонку Цитата(Rst7 @ Sep 24 2007, 12:51...   Sep 24 2007, 09:51
|- - Rst7   Цитата(Непомнящий Евгений @ Sep 24 2007, 12...   Sep 24 2007, 10:14
- - Непомнящий Евгений   Мой класс TCanal посылает запрос, ждет получения о...   Sep 24 2007, 09:25
|- - Rst7   Цитата(Непомнящий Евгений @ Sep 24 2007, 12...   Sep 24 2007, 09:39
|- - Непомнящий Евгений   Цитата(Rst7 @ Sep 24 2007, 13:39) Или тут...   Sep 24 2007, 10:38
- - Rst7   Цитата3. У меня логика посылки\повтора посылк...   Sep 24 2007, 11:14
- - dxp   Цитата(Rst7 @ Sep 24 2007, 18:14) Слова. ...   Sep 24 2007, 11:28
|- - Rst7   Цитата(dxp @ Sep 24 2007, 14:28) Я что-то...   Sep 24 2007, 11:53
|- - dxp   Цитата(Rst7 @ Sep 24 2007, 18:53) Ну да.....   Sep 24 2007, 12:06
|- - Непомнящий Евгений   Цитата(Rst7 @ Sep 24 2007, 15:53) Моя пра...   Sep 24 2007, 12:08
- - Непомнящий Евгений   Цитата(Rst7 @ Sep 24 2007, 15:14) У меня ...   Sep 24 2007, 11:53
- - Rst7   Цитата(Непомнящий Евгений @ Sep 24 2007, 14...   Sep 24 2007, 12:23
- - dxp   Цитата(Rst7 @ Sep 24 2007, 19:23) Не прос...   Sep 24 2007, 12:49
- - Непомнящий Евгений   Цитата(Rst7 @ Sep 24 2007, 16:23) А вам -...   Sep 24 2007, 12:59
- - dxp   Цитата(Непомнящий Евгений @ Sep 24 2007, 19...   Sep 24 2007, 13:35
2 страниц V   1 2 >


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

 


RSS Текстовая версия Сейчас: 9th August 2025 - 09:05
Рейтинг@Mail.ru


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