Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
vtodymyr17m
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 27
#1

Определение эффективности программного кода. - Atmega AVR микроконтроллер

04.03.2014, 00:15. Просмотров 39751. Ответов 199
Метки нет (Все метки)

Всем привет, собственно вопрос в заголовке, есть ли какие-нибудь методы, которые позволят определить на сколько та или иная функция или вся программа целиком, написана эффективно т.е. соответствует минимальному количеству занимаемой памяти программ и тактов процессора, необходимых для выполнение программы, которой в свою очередь предъявляется некоторый список требований?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2014, 00:15
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Определение эффективности программного кода. (Atmega AVR микроконтроллер):

Организация тестирования программного кода для МК
Привет народ. Я работаю в фирме производящей счётчики электроэнергии в отделе...

Определение времени работы кода для ATmega128
Здравствуйте. Подскажите как можно узнать время работы кода для контроллера...

Разработка программного модуля
Если содержимое ячейки внутреннего ОЗУ (DSEG) с адре-сом 40h больше #A0h,...

Разработка программного модуля
Ребят прошу вас помощи, нужно разработать программный модуль:

Разработка аппаратно-программного комплекса
дали курсовую работу... Но незнаю счего все начать.. помогите.. Тематика...

Экспериментальное определение эффективности сортировки
Здравствуйте, у меня возникла такая проблема, мне нужно определить, сколько в...

199
okotimiv
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
07.03.2014, 02:20 #21
Цитата Сообщение от KPK
Вы это скажите разработчикам ядра Kolibri OS. А один из языков используемых в этом проекте C--
Проект данной оси, кстати, вошёл в программу финансировния студенческого GSOC 2014
Хорошее занятие. Для студентов. Больше этим особенно никто не интересуется, потому что люди решают несуществующую проблему. Времена, когда рабочее время программистов стоило меньше машинного времени, давно миновали.

Что касается Влидимира, то для него гораздо важнее получить навык эффективного программирования, чем освоить ассемблер (которым он просто не будет пользоваться, во всяком случае если собирается решать реальные задачи).

Для понимания принципов работы процессора нужно изучать системотехнику, а не ассемблер. Ассемблер в этом смысле мало чем отличается от С.
0
oomomstir
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
07.03.2014, 02:39 #22
KPK, нельзя на ночь такое упоминать.
Это ж даже непонятно как в VCS класть, не говоря уж о читабельности (занимаемое место по сравнению с псевдокодом) и провоцированием превращения программы в клубок спагетти.

Пойду лучше квартус поизучаю. Или, напротив, хаскель.
0
Pojotit
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 461
07.03.2014, 04:22 #23
...вот зацепились :) ..извечный безсмысленный спор ;) ...человек спросил как ему лучше структруировать код, а вы ему сразу - пиши на Си и всё будет путём :)
Меня тоже такой вопрос интересует, потому что пишу на асм. Ну вот интересно мне всё по тактам распихивать и компактно делать и иметь тотальный контроль над всем в мк. А проблема при этом действительно имеется когда код разрастается - разобратся, что натворил, допустем через пол года уже занимает время. Было бы классно, чтоб была какая прога допустим, что вкинул в неё свой код, а она разрисовала графически по меткам, что от чего пляшет, куда прыгает и т.д. Ну чтот вроде дисасемблера ток ещё в графике и учитывая названия твоих меток, подпрограмм и т.д. Ну как то так :)
0
Ymk
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
07.03.2014, 04:54 #24
на счет боязни стандартных (да и любых вообще) библиотек: НЕ НУЖНО знать как они работают внутри, нужно знать их ПОВЕДЕНИЕ. это описано в доках. если что-то в доке не описано - нельзя на это рассчитывать. если же вы заточились на неописанную особенность библиотеки - вы ухудшили "правильность" программы, за что непременно ответите потерянным временем в дальнейшем:)

Цитата Сообщение от Pojotit
А проблема при этом действительно имеется когда код разрастается - разобратся, что натворил, допустем через пол года уже занимает время.
это так и есть, и ничего глобально с этим не сделать. даже комментарии, даже подробные, не сильно помогут, если кода много. можно лишь попытаться немного улучшить ситуацию, разбив все на конечные небольшие части и описав их. должно получиться что-то типа основной программы с кучей вызовов подпрограмм. тогда будет виден алгоритм. сами подпрограммы смотрятся только тогда, когда в них надо вникать (их поведение должно быть описано, т.е. что на входе, что на выходе, что меняет). но и здесь должен быть компромисс:) можно так наразделять, заколебешься потом ползать по коду и выискивать что куда (не говоря о накладных расходах на вызовы).

подобная проблема возникает в любых языках, т.к. на любом можно писать большие программы. но тогда здесь уже начинает играть роль удобный синтаксис. когда, например, добавление элементов в массив делается через херпоймикакие функции/библиотеки/набор заклинаний - это плохо. на другом языке это будет просто что-то типа myarray.add(blabla). это сокращает исходный код, улучшая читабельность (поддерживаемость) исходника.

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

п.с. форт в топку сразу!
0
Pojotit
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 461
07.03.2014, 05:24 #25
Цитата Сообщение от Ymk
ну и про больший риск ошибок в асм коде не надо говорить, да?
...ну когда чёт придуманное пишешь, как бы проблем у меня не возникает - обычно начинает работать сразу и без запинок. Для меня допустим очь много времени занимает придумать как оно должно работать... а воплотить алгоритм в код это быстро. И когда месяц допустим выщитываешь этот самый алгоритм, то потом само написание по времени как бы особой разницы не имеет, что я потрачу допустим день на асм или 2 часа на Си. Другое дело, как и писал выше, что когда надо чёт к уже готовому и написанному ранее(и подзабытому уже) допилить какую новую фишку, вот тут да - можно и день потртить чтобы разобраться - а как же я, дурья башка тут то замутил всё это.... :))
0
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
07.03.2014, 10:19 #26
Цитата Сообщение от Pojotit
.. Было бы классно, чтоб была какая прога допустим, что вкинул в неё свой код, а она разрисовала графически по меткам, что от чего пляшет, куда прыгает и т.д. Ну чтот вроде дисасемблера ток ещё в графике и учитывая названия твоих меток, подпрограмм и т.д. Ну как то так :)
Реализовать такую "задумку" мне хочется уже давно и есть определённые мысли и предпосылки для её реализации.
В бытность програмирования на ассемблере для PDP-11 использовал инструментарий ffpdp где "придумывание" меток не было (обычные структурные операторы IF ELSE WHILE REPEAT CASE ...), а также была возможность записывать ассемблерную программу в строковом виде и конструировать "произвольную" систему команд и гибко макросы управляющие процессом трансляции программы в бинарный код.

P.S. В оригинальной версии данного инструментария изначально есть поддержка ассемблера AVR по описанным возможностям. (авторская страничка данной IDE не доступна, но можно найти данный инструментарий обкатанный на AVR 128 на одном радиолюбительском форуме где в него для AVR были внесены некоторые расширения)
0
Pojotit
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 461
07.03.2014, 15:44 #27
..ну не много не то, как я себе представляю, как оно должно обрабатывать код, хотя как говориться лучше один раз увидеть...:)
Суть то в чём - когда пишешь код, как бы проблем нету, всё в голове держится, всё учитываешь, всё нормально получается. А вот описать сделанное, да бы потом, спустя время, легко было понять что я тут делаю - это проблема. Иногда, когда придумываю какой сложный алгоритм, я его разрисовываю на бумажке - потом в код, в этом случае потом легче - глянул на листок и всё понятно - тут вошло, тут таким макаром пересчиталось, тут чёт там подключилось\сравнилось, тут результат.... Но как часто бывает, чтость стрельнуло - быстро реализовал в коде, проверил - работает и побежал дальше(даж в тексте бывает никаких пояснений не сделаешь) - а потом разобраться.... уууу, тоска...:))
В “Algorithm Builder" допустим, всё вродь и не плохо сделано, но писать код в нём мне не удобно, хотя разбираться в уже написанном в этой среде, легче чем просто в асм. Но "чужой" код(написанный не в нём) в него не запихивается.
0
oomomstir
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
07.03.2014, 17:34 #28
Ну просто надо приучаться к тому, что функция - это чёрный ящик. Есть краткое описание результата, а внутрь смотреть уже не требуется. В этом плане очень хорошо дисциплинирцет написание юнит-тестов.

Да, порой теряешь в эффективности (например, на асме начинаешь в подпрограммах сохранять все модифицированные регистры в стек, а порой их изменение никому не мешает), зато для работы не надо держать в голове весь проект, достаточно текущей функции. Ну и описание функций короче - не надо побочные эффекты описывать.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
07.03.2014, 18:27 #29
2 Pojotit. Для того, чтобы код был читабельным, его изначально нужно сделать читабельным. Никаких нигических чисел, вменяемые названия переменных, функций, ввода-вывода.
Скажем:

tid_on, tid_off

воспринимается гораздо читабельнее, чем

ldi r16, 0b00000001
out PORTD, r16

Мало того, если в коде несколько таких записей, то замаешься потом по проекту искать, где менять эти биты.

Комментарии, опять же, никто не отменял.
0
Pojotit
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 461
07.03.2014, 18:38 #30
...так всё правильно, так и делаю, и ещё по всякому, типа какие то свои "стандартизированные" описания подпрограмм и т.д. ... но как было бы классно - вкинул код в какую прогу, а она те раз и в графике структурку то и забацала. Думаю, что сделать такую программу довольно таки реально, но видать спроса не будет - все нормальные пишут на Си. Кстать для того же Си тож была бы такая прога не лишней... хм, а может есть чего подобного, просто не знаю?
0
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
07.03.2014, 18:53 #31
Цитата Сообщение от Pojotit
.. Кстать для того же Си тож была бы такая прога не лишней... хм, а может есть чего подобного, просто не знаю?
Для Си есть разные варианты в частности NG Source Navigator,
но по мне так это тоже не то как хотелось бы видеть подобный продукт.
0
oomomstir
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
07.03.2014, 22:19 #32
Для Си включать в схему несколько процедур - неразумно (нарушается принцип "черного чщика" для функции), а внутри функции просто берем запись "ёлочкой" и проводим вертикальные линии :-)

А вот для иерархий классов, взаимодействия между классами и для баз данных - инструменты есть.
0
Otixomdr_1
0 / 0 / 0
Регистрация: 28.06.2010
Сообщений: 211
07.03.2014, 22:26 #33
Цитата Сообщение от okotimiv
Рекомендация очень простая - перестать заниматься тем, чем вы там занимаетесь, и начать программировать. Ну, или перестать париться насчет читаемости, если ваши занятия имеют какую-то цель, кроме убийства времени.
Напрасно вы так, okotimiv, vlodymyr17m правильный вопрос задает.
Чтобы легко писать на ассемблере большие программы нужно выполнять следующее.
1 Использовать развитой ассемблер (например, АБ) с подпрограммами.
2 Использовать некоторые правила и методы написания больших программ. Это, наверное, вообще практически не описано, мало кто нормально работает, из-за этого проблемы с большими программами.
3 Использовать отладчик в реальном времени.
Думаю, при этих условиях работать на ассемблере будет проще, чем на СИ.
Точнее, написание программы, наверно, соизмеримо, а отладка на ассемблере проще.
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
07.03.2014, 23:15 #34
ассемблер (например, АБ)
Что это?
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
07.03.2014, 23:17 #35
[QUOTE="YTYOUT"][QUOTE="Цитата:[/QUOTE]
ассемблер (например, АБ)
Что это?Algorithm Builder.
0
Ymk
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
08.03.2014, 04:12 #36
Цитата Сообщение от Pojotit
И когда месяц допустим выщитываешь этот самый алгоритм
алгоритм не считается, т.к. эта часть присутствует и для си, и для асм. а вот главное различие - на асме надо делать еще и реализацию этого алгоритма. в том плане, что ты не просто пишешь "так, вот тут замути мне цикл, вот тут проверь сложное условие", а сам вручную все это делаешь, распределяя память, регистры, следя за стеком. и вот в этой-то части больше всего косяков. ассемблер тебе не укажет ни на неинициализированные переменные/регистры, ни на еще какие логические ошибки, он просто сделает так, как скажет человек, а человек ошибается. это первое.

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

не так давно, в свободное рабочее время (а у нас работа - поддержка многих тонн асм кода) мы решили провести эксперимент: взять небольшой модулёк на асме, переписать его на си и сравнить результаты. дело в том, что асм у нас - это частично политика, частично исторически так сложилось. в принципе, если не считать кучи багов и копипаста, то там все более менее кошерно, т.е. можно довольно просто понимать, что там делается (заточек на экономию памяти, увеличение скорости - нет, просто обычный код). вот мы переписали. с оптимизацией оно стало работать в 4 раза быстрее! (вот то, что накомпилилось - уже сложно понимать, но оно и не надо).
Цитата Сообщение от Pojotit
Было бы классно, чтоб была какая прога допустим, что вкинул в неё свой код, а она разрисовала графически по меткам, что от чего пляшет, куда прыгает и т.д. Ну чтот вроде дисасемблера ток ещё в графике и учитывая названия твоих меток, подпрограмм и т.д.
ida pro так делает) правда только дизасм.
0
Pojotit
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 461
08.03.2014, 05:07 #37
...всё что вы тут написали про Си и асм, я с этим согласен и возможно жизнь заставит со временм полностью пересесть так сказать... Но на данном этапе работаю с мк как с мегами таки с тиньками, вплоть до тиньки10-ой, а в них с Си делать нечего. Я просто вижу что народ вмещает в эти мк написав на Си и что у меня туда впихивается на асм. И также в моих приложениях огромную роль имеют чёткие тайминги процессов выдачи\приёма сигналов вплоть до микросекунд, что тоже на асме соблюдается как то наглядней и можно чётко прощитать при придумывании алгоритма. Да и просто, как и писал, нравиться иметь тотальный контроль - шаг в сторону, расстрел на месте :)
Про ida знаю, смотрел как работает по всяким видюшкам, но сам не пробовал с ней баловаться. Но как то этот дисасм не вдохновил - тупо как то, не наглядно так сказать, он дисассемблирует.
0
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
08.03.2014, 05:20 #38
Цитата Сообщение от Ymk
алгоритм не считается, т.к. эта часть присутствует и для си, и для асм. а вот главное различие - на асме надо делать еще и реализацию этого алгоритма. в том плане, что ты не просто пишешь "так, вот тут замути мне цикл, вот тут проверь сложное условие", а сам вручную все это делаешь, распределяя память, регистры, следя за стеком.
Это упрощённый взгляд на вещи. Ничто не мешает повысить контроль за написанием ассемблерного кода при необходимости.
Есть например HLA HLA assembler где нет каких то "страшилок" этого рода.

Цитата Сообщение от Ymk
и вот в этой-то части больше всего косяков. ассемблер тебе не укажет ни на неинициализированные переменные/регистры, ни на еще какие логические ошибки, он просто сделает так, как скажет человек, а человек ошибается. это первое.
А на сколько Warningoв Cи компилятора можно смело "забить" или плодить часть ошибок от необходимости объявления и преобраования типов?. Что в асм коде
никогда не возникает в силу специфики выбора соответствующих ветвлений обрабатываемым данным.

Цитата Сообщение от Ymk
второе. си умеет оптимизировать. он сам распределит регистры, вынесет что можно за пределы цикла, где-то сэкономит и упростит. ясное дело, что человек может сделать это круче, даже если архитектура очень сложная, но главное в этом, что сильнозаточенный асм код дальше сложно будет изменять. а вот си изменил - он опять все пересобрал и переоптимизировал.
Это больше относится, например, к Х86 (мало регистров) или ARM ("усложнённая" система команд) а AVR и на макро ассемблере можно эффективно программировать.

Цитата Сообщение от Ymk
вот мы переписали. с оптимизацией оно стало работать в 4 раза быстрее! (вот то, что накомпилилось - уже сложно понимать, но оно и не надо).
Сказав А нужно говорить и Б - какого типа была программа "математика" "логика принятия решений" ? (и какой процессор)
Так вот предположу что программа была из первой категории и Cи компилятор смог сделать "вынос" вне цикла вычислений.
А вот при умелом программировании на ассемблере задачи второго типа гораздо эффективней в реализации на асм.

P.S. Но всё таки да увлекаться программированием на ассемблере без соответствующих средств поддержки разработки неблагодарное занятие :)
0
Ymk
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
08.03.2014, 15:49 #39
Цитата Сообщение от KPK
Это упрощённый взгляд на вещи. Ничто не мешает повысить контроль за написанием ассемблерного кода при необходимости.
Есть например HLA HLA assembler где нет каких то "страшилок" этого рода.
ХА-ХА! диванный теоретик:))) все эти хай левел асмы - это пыль в глаза. именно с одним из них мы и работаем. и за годы практики я могу сказать только одно: макросы - зло, если ими злоупотреблять. все эти расширения, позволяющие писать на ассмеблере "без ассемблера" - это унылое говно по двум причинам: вы не видите, что происходит внутри макросов, какие регистры они юзают, что меняют, это порождает кучу ошибок (ога, потом сидишь в обнимку с отладчиком и листингами), и второй вопрос - нахрена городить огород, если ты не хочешь юзать ассемблер? а ты, получается, не хочешь, если хочешь писать макросами. а ими писать, кстати, менее эффективно, чем на си, ибо оптимизация.
Цитата Сообщение от KPK
А на сколько Warningoв Cи компилятора можно смело "забить" или плодить часть ошибок от необходимости объявления и преобраования типов?
ни на сколько нельзя забивать!!! типизация - это контроль! чего в ассемблере нет, а по сему можно случайно что-то попортить и никто даже не пикнет.
Цитата Сообщение от KPK
Это больше относится, например, к Х86 (мало регистров) или ARM ("усложнённая" система команд) а AVR и на макро ассемблере можно эффективно программировать.
это больше относится к программам из пары тыщ строк. когда кода переваливает за полсотни-сотню тыщ строк - начинается ужас, на любой архитектуре.
Цитата Сообщение от KPK
Сказав А нужно говорить и Б - какого типа была программа "математика" "логика принятия решений" ?
я и не собирался раскрывать детали. была работа со строками. и там в асме даже юзались команды проца для работы со строками (типа, всяко быстрее, чем городить велосипед), но написано это было тупо в лоб, без всяких оптимизаций, но зато понятно. вот я про что.
Цитата Сообщение от KPK
А вот при умелом программировании на ассемблере задачи второго типа гораздо эффективней в реализации на асм.
могу повториться:Ymk писал(а):
ясное дело, что человек может сделать это круче, даже если архитектура очень сложная, но главное в этом, что сильнозаточенный асм код дальше сложно будет изменять.
0
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
08.03.2014, 17:11 #40
Цитата Сообщение от Ymk
ХА-ХА! диванный теоретик:))) все эти хай левел асмы - это пыль в глаза. именно с одним из них мы и работаем. и за годы практики я могу сказать только одно: макросы - зло, если ими злоупотреблять. все эти расширения, позволяющие писать на ассмеблере "без ассемблера" - это унылое говно по двум причинам: вы не видите, что происходит внутри макросов, какие регистры они юзают, что меняют, это порождает кучу ошибок (ога, потом сидишь в обнимку с отладчиком и листингами), и второй вопрос - нахрена городить огород, если ты не хочешь юзать ассемблер? а ты, получается, не хочешь, если хочешь писать макросами. а ими писать, кстати, менее эффективно, чем на си, ибо оптимизация.
Из вышесказанного можно предположитьчто неумение работать индивидуально разработчиком ответственность несут все "мы" . И если "макросы" вызывают проблемы, то системой "макросов" нет нормального опыта пользования. Даже такое использование макросов в ассемблере AVR должно улучшить читаемость кода.
И в Си, следуя данной логике, макро-процессор Cи тоже следует запретить. И вера в непогрешимость и кошерность Си компилятора вне обсуждения. Я Вас умоляю.

Цитата Сообщение от Ymk
Цитата Сообщение от KPK
Это больше относится, например, к Х86 (мало регистров) или ARM ("усложнённая" система команд) а AVR и на макро ассемблере можно эффективно программировать.
это больше относится к программам из пары тыщ строк. когда кода переваливает за полсотни-сотню тыщ строк - начинается ужас, на любой архитектуре.
Это решается дисциплиной оформления и документирования кода и Аcм в этом отношении не сильно отличается от других языков программирования

P.S. Используя Форт (Forth) на проблемы Acм программирования уже смотрю как то "сбоку" :)
Ещё. Например в конструкторе программ HiAsm есть разработанный пакет для генерации исполняемого кода (после предварительного разбора графической схемы программы) при использовании системы системы макросов FASM ассемблера в стиле "ООП", но это уже "немного" за гранью понимания для "неподготовленного" ума. Был поражён уровнем владения и использования FASM макросов для решения задачи автоматической кодогенерации. Незнаю насколько макро возможноти AVR ассемблера сравнимы с макро возможностями FASM ассемблера.
Неплохо бы темы затрагивающие обсуждение использование Асм как то оформить на форуме. в какой то форме. Может дополнительным словом Асм в названии топика.
0
08.03.2014, 17:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2014, 17:11
Привет! Вот еще темы с решениями:

Оценка эффективности кода
Нужно сравнить эффективность двух алгоритмов. Первое что пришло в голову -...

Повышение эффективности кода: использование указателя на функцию
Решил всё-таки наконец добить тему с "Динамическим приложением, использующим...

Определение иерархии программного обеспечения
Здравствуйте. в программировании на java я новичок (написала пару простых...

Доработка программного кода
Здравствуйте,уважаемые программисты..Срочно нужна ваша помощь. У меня есть уже...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru