|
К знатокам, Локальные переменные. |
|
|
|
 |
Ответов
|
Sep 18 2007, 09:21
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Тут проскочила чья-то фраза, что компилятор лучше работает со структурами чем с массивами. И я решил проверить некоторые моменты моей проги. Выводы просты - казалось бы мелочи, но они имеют важнейшее значение. И, главное, если вдуматься и проанализировать, то всё это лежит на поверхности! Например я обрабатываю 6 шаговых двигателей. По каждому из шаговых двигателей имеется несколько значений типа положение/тек.положение,скорость/тек.скорость и т.д. В первой редакции проги всё выглядело примерно так uint16_t Speed[MAXDVG],SpeedReal[MAXDVG],State[MAXDVG],StateReal[MAXDVG]; Теперь переписал примерно так struct { uint16_t Speed, SpeedReal... } Dvg[MAXDVG]; там где идёт единичное обращение к конкретному полю конкретного двигателя, - естественно ничего не изменилось, но там где в цикле идёт работа с двигателями и сравниваются различные поля одного двигателя - там код уменьшился раза в два! Переписал таки же образом работу с АЦП. Если вдуматься, то это медленный дрейф к объектам и его свойствам и к С++ как дальнейшее развитие этих идей.  Похоже надо более полно изучать С++ и постепенно переходить.
|
|
|
|
|
Sep 18 2007, 10:45
|

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070

|
Цитата(SasaVitebsk @ Sep 18 2007, 13:21)  Тут проскочила чья-то фраза, что компилятор лучше работает со структурами чем с массивами. Вообще-то это была вольная цитата из документа: AVR035: Efficient C Coding for AVR: Цитата When global variables are required they should be collected in structures whenever appropriate. This makes it possible for the C compiler to address them indirectly. Для отдельных переменных компилятор каждый раз указывает полный адрес, тогда как для структуры достаточно загрузить адрес один раз, а затем использовать адресацию со смещением. Такая возможность определяется особенностями архитектуры AVR, а не самого языка Си.
|
|
|
|
|
Sep 18 2007, 13:35
|

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070

|
Цитата(rezident @ Sep 18 2007, 17:08)  Извиняюсь конечно, но косвенная адресация (т.н. вами "адресация со смещением") не только одной лишь "архитектуре AVR" присуща.  Не путаем два разных вида адресации. Косвенная (регистровая) - адрес равен значению регистра (пары регистров для AVR). Со смещением - сумме значения регистра (пары регистров) и константы (смещения). На примере PDP-11 (раз уж пошла речь о различных архитектурах): Косвенная: 011200 MOV (R2),R0 ; Содержимое слова по адресу, равному значению R2 поместить в R0 Со смещением: 016200 MOV 4(R2),R0 ; Содержимое слова по адресу, равному значению R2 плюс 4 поместить в R0 000004 Особенность архитектуры AVR состоит в том, что в ней значение смещения помещается в код команды, которая занимает одно слово, что дает преимущество перед абсолютной адресацией, которая требует 2 слова.
|
|
|
|
|
Sep 18 2007, 16:30
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(vmp @ Sep 18 2007, 16:35)  Особенность архитектуры AVR состоит в том, что в ней значение смещения помещается в код команды, которая занимает одно слово, что дает преимущество перед абсолютной адресацией, которая требует 2 слова. Все здорово, не затронут оказался компилятор. Как-то мне с трудом верится, что он оптимизирует так хорошо. Если бы он был таким умным, то мог бы вставлять команды с использованием смещения во время доступа к соседним ячейкам независимо от того, определены они как элементы структуры, или как разные переменные. А если ему нужно помогать, используя указатель на структуру, это значит, нужно самому программисту заниматься оптимизацией. Дальше только писать на ассемблере....
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Sep 18 2007, 17:13
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Dog Pawlowa @ Sep 18 2007, 20:30)  Все здорово, не затронут оказался компилятор. Как-то мне с трудом верится, что он оптимизирует так хорошо. Если бы он был таким умным, то мог бы вставлять команды с использованием смещения во время доступа к соседним ячейкам независимо от того, определены они как элементы структуры, или как разные переменные. К сожалению, разные переменные стоящие рядом в памяти могут оказаться переменными из разных единиц компиляции (разных С файлов) Цитата А если ему нужно помогать, используя указатель на структуру, это значит, нужно самому программисту заниматься оптимизацией. Дальше только писать на ассемблере.... Если хотите оптимизацию на данной конкретной платформе, то компилятору нужно несомненно помагать, НО, вне зависимости от вашей помощи, решение останется переносимым вне зависимости от используемой платформы...
|
|
|
|
Сообщений в этой теме
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 SasaVitebsk Лучше всех понял проблему Сергей Борщ. Я так и сде... Sep 6 2007, 11:27 scifi Цитата(SasaVitebsk @ Sep 6 2007, 15:27) В... Sep 6 2007, 13:05  SasaVitebsk Цитата(scifi @ Sep 6 2007, 16:05) Быстрее... Sep 6 2007, 19:45 Rst7 Цитата(SasaVitebsk @ Sep 6 2007, 14:27) К... Sep 8 2007, 10:49  SasaVitebsk Всем спасибо. Буду осмысливать и пробовать - экспе... Sep 9 2007, 14:54   Rst7 Цитата(SasaVitebsk @ Sep 9 2007, 17:54) В... Sep 10 2007, 06:10 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 alexander55 Цитата(SasaVitebsk @ Sep 18 2007, 13:21) ... Sep 18 2007, 09:49     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 страниц
1 2 >
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0
|
|
|