0 / 0 / 0
Регистрация: 23.08.2011
Сообщений: 46
|
|
1 | |
Как правильно оптимизировать проги на С/С++?12.09.2012, 20:24. Показов 32064. Ответов 93
Метки нет (Все метки)
Может не сразу понятно о чем, поэтому поясню. Есть прога, допустим четыре файла: майн + еще 3 для работы с разной переферией. Все файлы используются в мейне. Теперь вопрос, как узнать какой кусок кода занимает больше всего места в прошивки? Допустим надо немного байт 200-300, под прогу для атмеги8. За новым ехать времени нет, полностью все переписывать на асме тоже времени нет. А вот какой нибудь кусочек на асме эта не проблема, но вот какой??? Идеальный вариант понять какая функция больше всего жрет места, чтобы ее полностью на асме написать.
0
|
12.09.2012, 20:24 | |
Ответы с готовыми решениями:
93
Как в современности правильно оптимизировать сайт? как правильно оптимизировать сайт под поисковики? display none или как правильно оптимизировать страницу Как правильно написать (оптимизировать) код для меню? |
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
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 |
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
Как я понял вы легко соединяете в одной программе исходники на С и на асме..... Мне тоже интересен такой вариант, т.к. хочу в программу на С вставить обработчик прерывания на асме, т.к. прерывания выполняются с большой частотой (десятки килогерц), и на С вариантов нет вписаться в жесткие временные рамки. Не могли бы вы меня проконсультировать, каким макаром могут взаимодействовать С и асм? Ды вообще то писал либо на асме либо на си. А думал делать вот так: http://otvity.google.ru/otvity... f674&pli=1
Сообщение от kytikot
Ну благодаря тому что я узнал какая из функций занимает дофига место смог избавиться от нее, и сэкономил 2К флеша =))))) функция отвечала за заполнение массива, просто привык чтобы читаемость кода была как можно более лучше. А в данном случае убрал нафиг эту функцию и заполнил массив вручную, сделал его статик конст и вот оно счастье! =)
0
|
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
|
|
15.09.2012, 00:34 | 14 |
Сообщение от otyxii-diveloper
Сообщение от S_Otyx
Кстати, 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
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
>>Я бы рад запустить отладку, но не для всех микроконтроллеров она запускается в Atmel studyo 6, для атмега8515 ее нет. Так что приходится извращаться =((((
0
|
15.09.2012, 19:07 | |
15.09.2012, 19:07 | |
Помогаю со студенческими работами здесь
20
Как отследить из проги на Си завершение другой проги Правильно ли так оптимизировать сайт с бюджетом 30 000 р/мес Установил фотошоп, вместо проги установились другие проги (игры онлайн,браузеры,рекламы и т.д.) Как делать кнопки по картинкам и как изменить иконку самой проги? Как правильно дублировать в actionscript 2.0 и как правильно сделать объект для дублирования Как вам кусок проги? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |