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

 
 
9 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> К знатокам, Локальные переменные.
SasaVitebsk
сообщение Sep 9 2007, 14:54
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #17


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

Группа: Модераторы
Сообщений: 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 18 2007, 09:21
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 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];

там где идёт единичное обращение к конкретному полю конкретного двигателя, - естественно ничего не изменилось, но там где в цикле идёт работа с двигателями и сравниваются различные поля одного двигателя - там код уменьшился раза в два!

Переписал таки же образом работу с АЦП.

Если вдуматься, то это медленный дрейф к объектам и его свойствам и к С++ как дальнейшее развитие этих идей. smile.gif

Похоже надо более полно изучать С++ и постепенно переходить.
Go to the top of the page
 
+Quote Post
alexander55
сообщение Sep 18 2007, 09:49
Сообщение #19


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(SasaVitebsk @ Sep 18 2007, 13:21) *
Похоже надо более полно изучать С++ и постепенно переходить.

Вы правы. Я шел к С++ так.
Ассемблеры - С - С с структурами - С++ (структуры с функциями) - С++(наследование, скрытие данных, полиформизм).
4 кита (шаблоны) я пока не очень понимаю, зачем он нужен.
Могу порекомендовать книги Шилда (это просто и четко).
Go to the top of the page
 
+Quote Post
vmp
сообщение Sep 18 2007, 10:45
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 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, а не самого языка Си.
Go to the top of the page
 
+Quote Post
rezident
сообщение Sep 18 2007, 13:08
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(vmp @ Sep 18 2007, 16:45) *
Для отдельных переменных компилятор каждый раз указывает полный адрес, тогда как для структуры достаточно загрузить адрес один раз, а затем использовать адресацию со смещением. Такая возможность определяется особенностями архитектуры AVR, а не самого языка Си.

Извиняюсь конечно, но косвенная адресация (т.н. вами "адресация со смещением") не только одной лишь "архитектуре AVR" присуща. wink.gif
Go to the top of the page
 
+Quote Post
vmp
сообщение Sep 18 2007, 13:35
Сообщение #22


Местный
***

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



Цитата(rezident @ Sep 18 2007, 17:08) *
Извиняюсь конечно, но косвенная адресация (т.н. вами "адресация со смещением") не только одной лишь "архитектуре AVR" присуща. wink.gif

Не путаем два разных вида адресации. Косвенная (регистровая) - адрес равен значению регистра (пары регистров для AVR). Со смещением - сумме значения регистра (пары регистров) и константы (смещения). На примере PDP-11 (раз уж пошла речь о различных архитектурах):
Косвенная:
011200 MOV (R2),R0 ; Содержимое слова по адресу, равному значению R2 поместить в R0
Со смещением:
016200 MOV 4(R2),R0 ; Содержимое слова по адресу, равному значению R2 плюс 4 поместить в R0
000004
Особенность архитектуры AVR состоит в том, что в ней значение смещения помещается в код команды, которая занимает одно слово, что дает преимущество перед абсолютной адресацией, которая требует 2 слова.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Sep 18 2007, 16:30
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(vmp @ Sep 18 2007, 16:35) *
Особенность архитектуры AVR состоит в том, что в ней значение смещения помещается в код команды, которая занимает одно слово, что дает преимущество перед абсолютной адресацией, которая требует 2 слова.

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


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 18 2007, 17:13
Сообщение #24


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(Dog Pawlowa @ Sep 18 2007, 20:30) *
Все здорово, не затронут оказался компилятор. Как-то мне с трудом верится, что он оптимизирует так хорошо. Если бы он был таким умным, то мог бы вставлять команды с использованием смещения во время доступа к соседним ячейкам независимо от того, определены они как элементы структуры, или как разные переменные.
К сожалению, разные переменные стоящие рядом в памяти могут оказаться
переменными из разных единиц компиляции (разных С файлов)
Цитата
А если ему нужно помогать, используя указатель на структуру, это значит, нужно самому программисту заниматься оптимизацией.
Дальше только писать на ассемблере....
Если хотите оптимизацию на данной конкретной платформе, то компилятору нужно
несомненно помагать, НО, вне зависимости от вашей помощи, решение останется переносимым вне
зависимости от используемой платформы...
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Sep 18 2007, 18:07
Сообщение #25


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Dog Pawlowa @ Sep 18 2007, 19:30) *
Все здорово, не затронут оказался компилятор. Как-то мне с трудом верится, что он оптимизирует так хорошо. Если бы он был таким умным, то мог бы вставлять команды с использованием смещения во время доступа к соседним ячейкам независимо от того, определены они как элементы структуры, или как разные переменные.
А если ему нужно помогать, используя указатель на структуру, это значит, нужно самому программисту заниматься оптимизацией.
Дальше только писать на ассемблере....

Если речь зашла о компиляторе IAR, то ему как раз и не нужно помогать рассовывая локальные (да и не только) переменные по структурам или массивам. Он и сам это прекрасно делает если ему задать оптимизацию Clustering of variables.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 18 2007, 18:41
Сообщение #26


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(SasaVitebsk @ Sep 18 2007, 13:21) *
Если вдуматься, то это медленный дрейф к объектам и его свойствам и к С++ как дальнейшее развитие этих идей. smile.gif
Похоже надо более полно изучать С++ и постепенно переходить.
А вот здесь я бы на Вашем месте сильно не спешил.
Дело в том, что любой код на С++ может быть преренесен на С без потери скорости/компактности,
а обратное к сожалению не верно, те код на С перенесенный на С++ гарантированно будет
не меньше/не быстрее чем исходный.
Собственно часть компиляторов так и работает, считая код на С++ препроцессорной
надстройкой над С...
Хотя конечно иногда удобно, тока нужно четко себе представлять в каком месте будет оверхед.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 18 2007, 19:34
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(singlskv @ Sep 18 2007, 21:41) *
Собственно часть компиляторов так и работает, считая код на С++ препроцессорной
надстройкой над С...

Загнули smile.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 18 2007, 19:47
Сообщение #28


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Sep 18 2007, 23:34) *
Загнули smile.gif.
Неа, ни разу,
лет 15 назад на юниксах именно так и осуществлялась компиляция из С++ в С.
Да и по сути, современные компиляторы делают тоже самое, тока они нам уже
не показывают промежуточного результата в виде С листинга.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 18 2007, 19:57
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(singlskv @ Sep 18 2007, 22:47) *
лет 15 назад..

Дела давно минувших дней, допустим, какие-то компиляторы, которые авторы решили назвать С++...
Цитата
код на С перенесенный на С++ гарантированно будет
не меньше/не быстрее чем исходный.

Допустим, что именно "препроцессор", тогда с какой стати 'C' исходник откомпилированый таким "плюсовым" компилятором код будет хоть чем-то отличаться smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 18 2007, 20:16
Сообщение #30


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Sep 18 2007, 23:57) *
Дела давно минувших дней, допустим, какие-то компиляторы, которые авторы решили назвать С++...
Операционка там была IRIX(это на основе BSD), а компутеры были Silicon Graphics, ну
это те, которые еще плюшками балуются (суперкомпутерами) время от времени.
Может быть это конечно и не был С++ компилятор, но так назывался... biggrin.gif
Цитата
Допустим, что именно "препроцессор", тогда с какой стати 'C' исходник откомпилированый таким "плюсовым" компилятором код будет хоть чем-то отличаться smile.gif
А вот этого я и не утверждал,
имелась в виду не компиляция С исходника компилятором С++, а именно перенос алгоритма
на модель С++, и вот там оверхед неизбежен...
Go to the top of the page
 
+Quote Post

9 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:52
Рейтинг@Mail.ru


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