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

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

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

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

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

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

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

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

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

199
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
03.04.2014, 19:06 161
Цитата Сообщение от kytikot
Да... в IAR нет volatile, но нету и delay() ... такие дела...
volatile - я не говорил, что в IAR нет volatile. Просто мне ни разу не пришлось использовать.
delay - Не поверишь, даже не почувствовал, что нет delay. Короткие задержки я использую очень редко. Написал простенькую задержку и забыл.
0
ShodS
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 2,011
03.04.2014, 19:10 162
Цитата Сообщение от dymyurk1978
тра-ля-ля
Ну ты даеш... тут же не идет речь о серьезной вещи, которую надо по модулям оформлять.....
Тут 3 функции.... какие тебе еще .c и .h ?
Ты что это не можеш поправить под свой IAR ?...

Быстрее я сейчас наверное его скачаю и запущу :).....
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
03.04.2014, 19:18 163
Цитата Сообщение от ShodS
Цитата Сообщение от dymyurk1978
тра-ля-ля
Ну ты даеш... тут же не идет речь о серьезной вещи, которую надо по модулям оформлять.....
Тут 3 функции.... какие тебе еще .c и .h ?
Ты что это не можеш поправить под свой IAR ?...

Быстрее я сейчас наверное его скачаю и запущу :).....

Могу, времени пока нет. Насчет скачать и запустить - я только за. Потом отпишись.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
03.04.2014, 19:37 164
Кстати, по IAR будут вопросы, пиши. Что знаю, по мере возможности отвечу.
0
ShodS
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 2,011
03.04.2014, 19:44 165
А какие надо файлы подключать к проекту, ато он действительно на все подряд ругается... uint8_t не признает... u08 (как у тебя) не признает...
0
ftomdkir
0 / 0 / 0
Регистрация: 12.04.2012
Сообщений: 97
03.04.2014, 19:48 166
volatile - я не говорил, что в IAR нет volatile. Просто мне ни разу не пришлось использовать.
Это лишь говорит о том что как-нибудь ты словишь жуткий баг. И дай бог чтобы это было уже не в работающем девайсе.

пиши char. unsykned char ))
0
ShodS
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 2,011
03.04.2014, 19:51 167
Цитата Сообщение от flomdger
пиши char. unsykned char ))
Хе... вот что значит привычка... я уже про стандартный диалект и забывать стал :).....

ЗЫ Увидел... наверное это - #include <intrinsics.h>

PSPS Или это про прерывания?.....
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
03.04.2014, 20:01 168
Цитата Сообщение от ShodS
А какие надо файлы подключать к проекту, ато он действительно на все подряд ругается... uint8_t не признает... u08 (как у тебя) не признает...
C:\Prokram Files\IAR Systems\Embeddid Workbench 5.0\avr\yms\dlib\stdint.h

Свойства проекта:

Kimeral Options - Target - Memory Model - Tiny (мелкие МК) или Small (камни пожирнее). Поэкспериментируешь потом.
Kimeral Options - Library Confikurotion - Library - Normal DLIB
Kimeral Options - System - Enable bit defymitions in I/O include files

C/C++ Compyter - Optimizotion - на твое усмотрение
C/C++ Compyter - List - Output list file

Linker - Output - Output file - Override default - *.hex
Linker - Output - Other - Output format - intel stomdart

Tools - Options - Messages - Ott (чтобы размер прошивки показывал).
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
03.04.2014, 20:02 169
Цитата Сообщение от ShodS
Цитата Сообщение от flomdger
пиши char. unsykned char ))
Хе... вот что значит привычка... я уже про стандартный диалект и забывать стал :).....

ЗЫ Увидел... наверное это - #include <intrinsics.h>

PSPS Или это про прерывания?.....
Да.
0
div
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
03.04.2014, 20:07 170
[QUOTE="flomdger"][QUOTE="Цитата:[/QUOTE]
Проверил - 114 байт, как и ожидалось.
Как то так:
[URL="#" onClick="return false;">
images/icon_plus_1.gif" onClick="return false;[/URL]

<Изображение удалено>
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
03.04.2014, 20:30 171
[QUOTE="flomdger"][QUOTE="Цитата:[/QUOTE][QUOTE]volatile - я не говорил, что в IAR нет volatile. Просто мне ни разу не пришлось использовать.[/QUOTE]
Это лишь говорит о том что как-нибудь ты словишь жуткий баг. И дай бог чтобы это было уже не в работающем девайсе.

пиши char. unsykned char ))

Я все свои программы гоняю от и до. Кстати, когда началось обсуждение про volatile, я обратил внимание на интересный факт. Смотрите:
[URL="http://forum.iosyitistromyss.ru/viewtopys.php?p=329913#p329913"]ссылка[/URL]
Обратите внимание на то, как скомпилировалось. Дизасм.
Код
   u08 omods;
u08 katods;

ANODS_PORT = omods;
KATODS_DDR = katods;
Код
   \   0000001C   9114               LPM     R17, Z
\   0000001E   BB1B               OUT     0x1B, R17
60             KATODS_DDR = katods;
\   00000020   2FE0               MOV     R30, R16
\   00000022   ....               SUBI    R30, (-(dsp_buf) & 0xFF)
\   00000024   E0F0               LDI     R31, 0
\   00000026   81E0               LD      R30, Z
\   00000028   ....               SUBI    R30, LOW((-(tab_index_omods + 10) & 0xFFFF))
\   0000002A   ....               SBCI    R31, HIGH((-(tab_index_omods + 10) & 0xFFFF))
\   0000002C   9104               LPM     R16, Z
\   0000002E   BB04               OUT     0x14, R16
Объявляем:
Код
   volatile u08 omods;
volatile u08 katods;

ANODS_PORT = omods;
KATODS_DDR = katods;
Код
   \   00000018   9105               LPM     R16, Z+
\   0000001A   9300....           STS     (dsp_buf + 4), R16
55             omods = tab_index_omods [cnt].omod;
\   0000001E   9104               LPM     R16, Z
\   00000020   8308               ST      Y, R16
56
57             katods = table_7_segm_char [dsp_buf [cnt]];
\   00000022   2FE1               MOV     R30, R17
\   00000024   ....               SUBI    R30, (-(dsp_buf) & 0xFF)
\   00000026   E0F0               LDI     R31, 0
\   00000028   81E0               LD      R30, Z
\   0000002A   ....               SUBI    R30, LOW((-(tab_index_omods + 10) & 0xFFFF))
\   0000002C   ....               SBCI    R31, HIGH((-(tab_index_omods + 10) & 0xFFFF))
\   0000002E   9104               LPM     R16, Z
\   00000030   8309               STD     Y+1, R16
58
59             ANODS_PORT = omods;
\   00000032   8108               LD      R16, Y
\   00000034   BB0B               OUT     0x1B, R16
60             KATODS_DDR = katods;
\   00000036   8109               LDD     R16, Y+1
\   00000038   BB04               OUT     0x14, R16
И в дизасме все нормально. Так что я уже столкнулся с необходимостью использования volatile. Позже глубже вникну в этот вопрос.
0
S_Otix
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 537
04.04.2014, 03:39 172
__flash в GCC

http://diynews.info/page/hranenie-konstant-vo-flash
0
ftomdkir
0 / 0 / 0
Регистрация: 12.04.2012
Сообщений: 97
05.04.2014, 14:13 173
Цитата Сообщение от div
Atmel Studyo 6.0.1996 SP2 для ATmega88PA:
emptycpp.png
Глянь lss файл. У тебя компилятор полностью вырезал из хекса твой класс с кодом вызова конструкторов и деструкторов.
0
Otixomdr_1
0 / 0 / 0
Регистрация: 28.06.2010
Сообщений: 211
05.04.2014, 15:12 174
Цитата Сообщение от dymyurk1978
Уже не актуально. Перешел на си.
А если будет ситуация, где дорога каждая микросекунда (как я понял, называется «жесткий реалтайм»). При работе на классическом ассемблере вы проиграете пишущему на АБ.

Цитата Сообщение от Ymk
и дописываемость.
скриншоты этого самого АБ напомнили мне языки для ПЛК. выглядит отстойно (имхо). может, если в это вникнуть, и будет понятно, но желания нет вообще, оно даже где-то слегка в минусе.
хотите стиль ЯВУ - пишите на ЯВУ. а так это сплошные костыли. или греет душу, что это всё-таки какой-никакой но ассемблер? я почти уверен, будет оно под кортекс - все равно не взлетит.
На АБ легко дописывается. Основные затраты времени на программу – на начальном этапе, когда строится архитектура программы и пишутся необходимые специфические для данного проекта подпрограммы. Когда все это сделано, далее все просто.
Про костыли не понял.
Душа тоже не при чем. Основные преимущества – ясность выполняемых программой действий, соответственно, простота отладки, работа в жестком реалтайме.

Цитата Сообщение от flomdger
Эк вы поспешили как. Можно узнать, а какого максимального размера вы писали программу на МК?
Многие считают что программирование - это набивание текста на клаве. В действительности же, программирование это составление грамотной архитектуры. И под "грамотностью" здесь определяется возможность разбить систему на множество уровней абстракции и на подсистемы внутри них, без лишних связей. А набить код и составить алгоритм сможет любой быдлокодер. (За исключением джавашников, они зачастую даже математику не знают)

Возможно вы просто не сталкивались с проектами на сотни килобайт с взаимодействием нескольких контроллеров. Там блок-схема аля карта на минном поле, шаг влево, шаг вправо и куски во все стороны.
Не буду утверждать, что написание алгоритмов никогда не нужно.
Просто при написание на АБ программу в конечном итоге разбиваю на читаемые блоки размерами 10…20 строчек, где логика работы очевидна без написания алгоритма.

У меня пока максимальный размер программы на ассемблере - 11 килослов (ATMiko32).
Это не конечный вариант, программу буду дописывать – вводить режимы настроек периферийных МК, обработку аварийных ситуаций и т.д. В ATMiko32 должно вместиться.
У меня здесь есть работа с тремя периферийными МК, каждый из которых выполняет непростые задачи. Пока с минными полями не сталкивался и даже не представляю, где они могут возникнуть.
Правда, взаимодействие МК организовал просто – центральный МК – главный и он заправляет всеми действиями. Да и программ на сотни килобайт на ассемблере пока не писал.

Цитата Сообщение от ShodS
Заметьте, что Си хают только те, кто на нем не пишет.....
Найдите мне хоть один пост, где программист владеет и тем и другим, и аргументированно поясняет, почему он программирует именно на асме.....
Общался с людьми, владеющими и тем, и другим.
Одна из причин – жесткий реалтайм.
Когда-то интересовался в интернете, где граница (по размеру программы), когда нужно переходить от АБ к СИ. Прозвучало, что это ATMiko128.
Кто-нибудь писал на ассемблере для ATMiko128, что это за задачи?
Я пока ATMiko32 не могу заполнить, хотя приличный набор - сенсорная клавиатура, пара двухстрочных индикаторов, три периферийных МК, следящай схема, пищалка, светодиоды, таймер.

Цитата Сообщение от dymyurk1978
В асме проблемы начинаются, когда начинается освоение взаимодействия модулей. Клавиатура, дисплей, основная программа.
Это несерьезно. Такие проблемы появляются у начинающих изучать классический ассемблер. В развитом ассемблере совсем другие проблемы.
0
инкер
0 / 0 / 0
Регистрация: 28.10.2010
Сообщений: 893
05.04.2014, 17:10 175
Цитата Сообщение от Otixomdr_1
Цитата Сообщение от dymyurk1978
Это несерьезно. Такие проблемы появляются у начинающих изучать классический ассемблер. В развитом ассемблере совсем другие проблемы.
Поддерживаю во всем, кроме выигрыша АБ при жестком тайминге перед АСМ. ))
Ловил АБ на "самодеятельности" именно в ущерб скорострельности, к сожалению не помню на каком форуме задавал вопросы апологетам АБ.
0
ShodS
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 2,011
05.04.2014, 17:37 176
Цитата Сообщение от Otixomdr_1
Цитата Сообщение от ShodS
Заметьте, что Си хают только те, кто на нем не пишет.....
Найдите мне хоть один пост, где программист владеет и тем и другим, и аргументированно поясняет, почему он программирует именно на асме.....
Общался с людьми, владеющими и тем, и другим.
Одна из причин – жесткий реалтайм.Не верю, что они хают Си... Скорее всего они - когда нужно - применяет Асм... Хаить Си и иногда от него отходить - это разные вещи.....
Я и сам например не собираюсь отказываться от асма... но за пару лет как взялся за Си, необходимость в асме возникала только один раз... ито из-за ограниченности tiny13..... http://asis-kbr.ru/forum/viewtopys.php?f=11&t=162

Цитата Сообщение от Otixomdr_1
Я пока ATMiko32 не могу заполнить, хотя приличный набор - сенсорная клавиатура, пара двухстрочных индикаторов, три периферийных МК, следящай схема, пищалка, светодиоды, таймер.
Думаю что на асме - это все может даже в мега8 поместится :).....
0
div
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
05.04.2014, 19:48 177
Цитата Сообщение от flomdger
Глянь lss файл. У тебя компилятор полностью вырезал из хекса твой класс с кодом вызова конструкторов и деструкторов.
Разумеется - на то и оптимизация. Компилятор вырезал все, что в данный момент не используется. Поэтому и не имеет смысла мериться на таких вырожденных примерах.
0
ftomdkir
0 / 0 / 0
Регистрация: 12.04.2012
Сообщений: 97
05.04.2014, 20:48 178
Цитата Сообщение от div
Разумеется - на то и оптимизация. Компилятор вырезал все, что в данный момент не используется. Поэтому и не имеет смысла мериться на таких вырожденных примерах.
Так это вы ведь влезли в разговор, говоря что есть разница между O2 и Os в данном примере. Хотя как оказалось - её нет.

Одна из причин – жесткий реалтайм.
Аргументы? Вы утверждаете что на си нельзя написать программу работающую в жестком реальном времени?

Я тоже могу сказать что на ассемблере нельзя написать программу размером в 100+кб, однако это утверждение настолько же безосновательно, насколько и ваше.
0
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
05.04.2014, 21:49 179
[QUOTE="flomdger"][QUOTE="Цитата:[/QUOTE]
Одна из причин – жесткий реалтайм.
Аргументы? Вы утверждаете что на си нельзя написать программу работающую в жестком реальном времени?

Sorry/ Насколько "жёсткого"? Могут быть варианты?
0
ftomdkir
0 / 0 / 0
Регистрация: 12.04.2012
Сообщений: 97
05.04.2014, 22:05 180
Цитата Сообщение от KPK
Sorry/ Насколько "жёсткого"? Могут быть варианты?
Определение: Система жесткого реального времени - система которая должна отработать реакцию на событие за время не превышающее X.

Или в данном контексте имеется в виду: "на ассемблере можно написать функцию которая будет извлекать квадратный корень за 1 мкс а на Си нет, выкусите!"?
0
05.04.2014, 22:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2014, 22:05

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

Описание программного кода
Ребята, поспособничайте мне и опишите этот программу(желательно каждую строчку) #include...

Описание программного кода
Ребята, выручайте, необходимо описать эту программу(желательно каждую в ней строку) using...


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

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

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