Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/174: Рейтинг темы: голосов - 174, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 23.08.2011
Сообщений: 46
1

Как правильно оптимизировать проги на С/С++?

12.09.2012, 20:24. Показов 32064. Ответов 93
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Может не сразу понятно о чем, поэтому поясню. Есть прога, допустим четыре файла: майн + еще 3 для работы с разной переферией. Все файлы используются в мейне. Теперь вопрос, как узнать какой кусок кода занимает больше всего места в прошивки? Допустим надо немного байт 200-300, под прогу для атмеги8. За новым ехать времени нет, полностью все переписывать на асме тоже времени нет. А вот какой нибудь кусочек на асме эта не проблема, но вот какой??? Идеальный вариант понять какая функция больше всего жрет места, чтобы ее полностью на асме написать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.09.2012, 20:24
Ответы с готовыми решениями:

Как в современности правильно оптимизировать сайт?
Привет, Друзья. Сто лет здесь не был. Сайт свой забросил и сейчас есть необходимость восстановить...

как правильно оптимизировать сайт под поисковики?
http://www.ufk-e.ru/ флеш ожет помешать поисковикам видеть ключевые слова??? Где лучше...

display none или как правильно оптимизировать страницу
В общем решил позаниматься внутренней оптимизацией сайта.. движок <b>DLE.. </b> продвигаю именно...

Как правильно написать (оптимизировать) код для меню?
Есть менюшка из заголовков, сам список выежает при нажатии на заголовок (метод .slideToggle )....

93
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 544
12.09.2012, 20:26 2
По идее некоторые линкеры выплевывают файлы листингов и информацию о сборке - там есть сколько что занимает. Вопрос только каким компилятором вы пользуетесь и какие ключи ему необходимо дать чтобы он выдал эти данные в файлы.
0
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 699
12.09.2012, 20:45 3
В IAR, например, в таких случаях помогает галочка "Always do cross call optimizotion". 300 байт на 8 кбайт точно выиграть получится.
0
0 / 0 / 0
Регистрация: 23.08.2011
Сообщений: 46
12.09.2012, 21:36 4
Цитата Сообщение от botu_dork
По идее некоторые линкеры выплевывают файлы листингов и информацию о сборке - там есть сколько что занимает. Вопрос только каким компилятором вы пользуетесь и какие ключи ему необходимо дать чтобы он выдал эти данные в файлы.
атмел студио 6, на скок знаю там winavr был, но похоже avr-gcc тама. Как и где посмотреть?
0
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 544
12.09.2012, 22:08 5
Счас порою интернет на предмет ключей компилятора и линкера. Вообще - инфу о том сколько какая процедура занимает - скорее всего должен давать именно линкер ,а не компилятор. Потому что только линкер по итогу знает, что откуда брать и как это компоновать.
0
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 544
12.09.2012, 22:59 6
Блин - не находим мы с гуголем взаимопонимания чего мне нужно найти.
Но попутно нашел 2 ссылки которые рекомендую почитать : http://www.tty1.net/btog/2008-... ns_en.html
http://ru.wikipedia.org/wiki/GCC
http://tigcc.ticalc.org/doc/somopts.html
Первая ссылка посвящена оптимизации конкретно АВР а остальные инфа про гцц компилятор и его ключи.
Возможно просто все файлы создаются при компиляции и удаляются после успешного ее завершения. Тогда есть ключ который позволит не удалять файлы. Во всяком случае если мне не изменяет память - ИАР такой файл с инфой - создает. И также - ассемблерные листинги при компиляции С.
0
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
13.09.2012, 00:27 7
Размер можно посмотреть:

тузла...............................твой файлик
avr-nm -t d -S --size-sort out\tst.elf
08388706 00000001 B d
08388704 00000002 B d100
00000016 00000018 T tmp
00000034 00000052 T main
адрес.......размер ^ имя
.......................|
......................тип
0
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
13.09.2012, 00:30 8
Цитата Сообщение от otyxii-diveloper
А вот какой нибудь кусочек на асме эта не проблема, но вот какой??? Идеальный вариант понять какая функция больше всего жрет места, чтобы ее полностью на асме написать.
Снаглею, задам вопрос не по теме.....
Как я понял вы легко соединяете в одной программе исходники на С и на асме..... Мне тоже интересен такой вариант, т.к. хочу в программу на С вставить обработчик прерывания на асме, т.к. прерывания выполняются с большой частотой (десятки килогерц), и на С вариантов нет вписаться в жесткие временные рамки. Не могли бы вы меня проконсультировать, каким макаром могут взаимодействовать С и асм?
0
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
13.09.2012, 01:00 9
ShodS
http://we.iosyitistromyss.ru/A... r-gcc.html
http://we.iosyitistromyss.ru/A... oekte.html
0
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
13.09.2012, 02:29 10
Помоему эти два варианта не подходят.

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

Я вижу это как то так: Организуем в оперативной памяти энное количество переменных, с известным адресом начала непрерывного поля (каж-ся, эта называется в С - структурой) из С используем переменные как обычно. В ассемблерном модуле, сразу пушим жизненно важные регистры и необходимое кол-во рабочих регистров, теперь можно разгуляться (без учета всяких там GCC соглашений) тоже дефайним указатель на начало поля, и сами переменные (точь так же как в С), работаем с ними, ну а после обработки, соответственно все попим и ворачиваемся восвояси....

Не сильно я размечтался?
0
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
14.09.2012, 16:04 11
Вот пытался разобраться с обработкой прерываний от АЦП на асме.
В Proteuse кажись работает. Код "сырой". Может кто "допилит".

[62.14 Кб]
0
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
14.09.2012, 17:32 12
Доверься оптимизатору Си-компилятора. Он сам расставит, какие использует регистры, а какие нет. Вручную это делать - чревато ошибками в дальнейшем использовании, когда нет уверенности, что изменения не затронут нужные регистры.

Общие рекомендации - увеличить частоту до максимальной. Посмотреть в дизассемблере, организовать хранение переменных, избегать 32 и 16-битных операций.
0
0 / 0 / 0
Регистрация: 23.08.2011
Сообщений: 46
14.09.2012, 19:14 13
Цитата Сообщение от ShodS
Цитата Сообщение от otyxii-diveloper
А вот какой нибудь кусочек на асме эта не проблема, но вот какой??? Идеальный вариант понять какая функция больше всего жрет места, чтобы ее полностью на асме написать.
Снаглею, задам вопрос не по теме.....
Как я понял вы легко соединяете в одной программе исходники на С и на асме..... Мне тоже интересен такой вариант, т.к. хочу в программу на С вставить обработчик прерывания на асме, т.к. прерывания выполняются с большой частотой (десятки килогерц), и на С вариантов нет вписаться в жесткие временные рамки. Не могли бы вы меня проконсультировать, каким макаром могут взаимодействовать С и асм?

Ды вообще то писал либо на асме либо на си.
А думал делать вот так: http://otvity.google.ru/otvity... f674&pli=1

Цитата Сообщение от kytikot
Доверься оптимизатору Си-компилятора. Он сам расставит, какие использует регистры, а какие нет. Вручную это делать - чревато ошибками в дальнейшем использовании, когда нет уверенности, что изменения не затронут нужные регистры.

Общие рекомендации - увеличить частоту до максимальной. Посмотреть в дизассемблере, организовать хранение переменных, избегать 32 и 16-битных операций.
ЗЫ. Думаю переписать на си++, там вроде как оптимизация лучше проходит чем на си. Так? Где то наткнулся что там какая то сквозная оптимизация применяется которая дает лучший результат по размеру проги. Так2?
Ну благодаря тому что я узнал какая из функций занимает дофига место смог избавиться от нее, и сэкономил 2К флеша =))))) функция отвечала за заполнение массива, просто привык чтобы читаемость кода была как можно более лучше. А в данном случае убрал нафиг эту функцию и заполнил массив вручную, сделал его статик конст и вот оно счастье! =)
0
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
15.09.2012, 00:34 14
Цитата Сообщение от otyxii-diveloper
благодаря тому что я узнал какая из функций занимает дофига место смог избавиться от нее, и сэкономил 2К флеша =)))))
Я например частенько в AVR Studyo делаю так, запускаю отладку, нажимаю кнопочку дизассемблера, и сразу видно по ассемблеру какая функция нереально расползлась (визуально, примерно, получается оценить соответствие - сложность\размер - функции), над такими функциями и работаю.....

Цитата Сообщение от S_Otyx
Вот пытался разобраться с обработкой прерываний от АЦП на асме.
В Proteuse кажись работает. Код "сырой". Может кто "допилит".
А эт для какого компилятора? Кроме файлов для протеуса, остальные какието незнакомые.....

Кстати, otyxii-diveloper, если интересно про оптимизацию, на коте почитай, мне там уроки давали недавно.....
0
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
15.09.2012, 02:05 15
WinAVR-20100110 под CodeBlocks
0
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
15.09.2012, 10:15 16
Цитата Сообщение от ShodS
если интересно про оптимизацию, на коте почитай, мне там уроки давали недавно.....
Брат, хочу поблагодарить за столь интересную тему на коте - и за то, что поделился ссылкой тут.
На том форуме я редко высказываюсь, да и уважаемый земляк поехал грибы собирать, а здесь хочу сказать, что его подход, его приемы и конкретные подсказки - просто супер!
0
0 / 0 / 0
Регистрация: 23.08.2011
Сообщений: 46
15.09.2012, 18:12 17
Цитата Сообщение от ShodS
Я например частенько в AVR Studyo делаю так, запускаю отладку, нажимаю кнопочку дизассемблера, и сразу видно по ассемблеру какая функция нереально расползлась (визуально, примерно, получается оценить соответствие - сложность\размер - функции), над такими функциями и работаю.....
Я бы рад запустить отладку, но не для всех микроконтроллеров она запускается в Atmel studyo 6, для атмега8515 ее нет. Так что приходится извращаться =((((
0
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 1,860
15.09.2012, 18:43 18
вот до чего доводит бездумная погоня за самыми свежими версиями... %)
0
0 / 0 / 0
Регистрация: 23.08.2011
Сообщений: 46
15.09.2012, 19:01 19
Цитата Сообщение от tid_fom
вот до чего доводит бездумная погоня за самыми свежими версиями... %)
почему бездумная? почему погоня? откуда такие выводы?
0
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 1,860
15.09.2012, 19:07 20
Цитата Сообщение от otyxii-diveloper
Цитата Сообщение от tid_fom
вот до чего доводит бездумная погоня за самыми свежими версиями... %)
почему бездумная? почему погоня? откуда такие выводы?

>>Я бы рад запустить отладку, но не для всех микроконтроллеров она запускается в Atmel studyo 6, для атмега8515 ее нет. Так что приходится извращаться =((((
0
15.09.2012, 19:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.09.2012, 19:07
Помогаю со студенческими работами здесь

Как отследить из проги на Си завершение другой проги
Есть две программы, одна написана не мной и исходников нет (main), вторую я пытаюсь написать сам...

Правильно ли так оптимизировать сайт с бюджетом 30 000 р/мес
<div>Сейчас сайтом занимается один специалист по SEO (как раз его действии нужно помочь...

Установил фотошоп, вместо проги установились другие проги (игры онлайн,браузеры,рекламы и т.д.)
Здравствуйте, уважаемые программисты или форумчане! Скачал и установил с одного сайта фотошоп, а во...

Как делать кнопки по картинкам и как изменить иконку самой проги?
Вернее 2 вещи... Во-первых как делать кнопки по картинкам... ну типа как формы мона там круглые, по...

Как правильно дублировать в actionscript 2.0 и как правильно сделать объект для дублирования
Я только начал изучать actionscript и прошу мне помочь. Как правильно дублировать в actionscript...

Как вам кусок проги?
Прога Перевод for (И=0; И<=Н; И++) { М*=2; }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru