Ока в Новосибирске
http://www.oka-nsk.ru/forum/

Программирование: смена компилятора CVAVR>AVRSTUDIO
http://www.oka-nsk.ru/forum/viewtopic.php?f=20&t=1977
Страница 2 из 2

Автор:  olegzom [ 29 янв 2020, 17:46 ]
Заголовок сообщения:  Re: Программирование: смена компилятора CVAVR>AVRSTUDIO

oka275 писал(а):
Не совсем понял. Эти 6 байт есть непосредственная подготовка к вызову функции? Или сама функция занимает 6 байт вместо одного, как в макросе?
А вот теперь из области того, чего я пока не могу понять вообще: Если эти 6 байт сидят в самой функции, а непосредственный её вызов "ничего не стоит", то проигрыш в экономии места во флеши будет только, если этих вызывов будет менее шести. А дальше типа уже должна начинаться экономия (пусть в ущерб быстродействию, напряганию стека и тд). Нам на уроках информатики говорили, что если в коде несколько раз встречаются одинаковые фрагменты, то это серьезный повод для того, чтобы создать функцию с ним и вызывать её нужное количество раз. Мол, это ведет к сокращению и оптимизации программы. В Ваших трудах я пока что вижу обратное, без всяких вариантов. А если таких вызывов в программе будет 100, 200? Двести байт макросов против 6 байт функции. Что я неправильно понимаю?


Я писал, что сама функция занимает несколько больше 6 байт, посчитал по листингу - 50 байт. Но она сидит во флеши один раз. Это второй листинг в предидущем посте (void _PORTB (char pin, bool bit)). А 6 байт (первый листинг) - это 100, 200 вызовов функции void _PORTB (char pin, bool bit). Давайте посчитаем разницу. Ваших 200 вызовов умножаем на 6 байт плюс 50 байт тела функции равно 1250 байт. У меня: 200 вызовов умножаем на 2 байта равно 400 . Разница 1250 делим на 400 равно в 3.125 раза
Причем 50 байт тела функции , заметьте это тольки OUT порта PB . А у нас еще PA, PC, PD и т.д. А еще нужно и входа считывать.
И на это еще уйдет, на каждую функцию, еще по 50 байт приблизительно. А у меня нет даже этих 50 байт. У меня на каждую функцию работы с портом уходит всего 2 байта(это и подготовка и тело функции). Если непоняли мой ход мысли пишите.
Может что и упустил, извините. Просто когда писал, торопился. Правильное решение находся в обсуждении и дискусии. Но не в СПОРЕ.

Автор:  oka275 [ 29 янв 2020, 18:24 ]
Заголовок сообщения:  Re: Программирование: смена компилятора CVAVR>AVRSTUDIO

olegzom писал(а):
Разница 1250 делим на 400 равно в 3.125 раза

Да, убедительно! И впечатлительно. Видимо придётся мне всё прошивку ЗУ перелопачивать. И глядишь - освободится еще один приличный кусок места, которого хватит на завершение проекта в рамках данного МК. Там я старался использовать функции по максимуму. Например, вызов функции beep() (простой щелчок-отклик на действия пользователя) у меня происходит действительно раз 100, если не больше. А там включение порта, пауза 50мсек и выключение. То есть тоже самое управление портом, только с delay. Если прикинуть накладные расходы, то это полный "асисяй". Попробую сегодня, если будет время, позаменить все эти beep() на макросы и погляжу сколько освободится памяти. В прочем, в моем случае этой функции ничего не передаётся в качестве аргумента, а потому предполагаю, что накладных расходов будет не так много. Но все равно попробую.

olegzom писал(а):
Правильное решение находся в обсуждении и дискусии. Но не в СПОРЕ.

Правильно. Так никто вроде не спорил? )) Во всяком случае я точно нет. Просто хотел разобраться в вопросе и я нашел достаточно аргументов, чтобы согласиться с доводами. Если бы их было недостаточно, то я просто бы тихо остался при своём мнении и всё. :-[ :)

Автор:  olegzom [ 29 янв 2020, 19:07 ]
Заголовок сообщения:  Re: Программирование: смена компилятора CVAVR>AVRSTUDIO

Да я и неговорю что кто-то спорит. Все нормально. Это я так сказал в общем. А то подумаете что "ворвался" тут и жить-програмировать учит. Ни в коем случае. Я просто хотел помочь от всего сердца и поделится своим опытом и наработками. Я не программист. Ну можно сказать любитель-программист.
Алексей, тот же Codevision тоже генерит асмовский файлик. И там тоже можно анализировать некоторые алгоритмы по занимаемому месту, и по эргономичности, посмотрите. Темболее что Вы немного знакомы с асемблером. Кстати, я тоже начинал учить програмить с ZX-Spectrum. А что касаемо знания команд асемлера AVR, так их и ненужно знать идеально. Для анализа главные команды "ветвления", тоесть которые изменяют последовательность выполнения, такие, например, как rjmp, rcall и им подобных. Это безусловный переход. Правда есть и команды услоного перехода. Ну это мой подход. Может кто подскажет другой. Вобщем нужно все пробовать на деле.

Автор:  PSh [ 29 янв 2020, 19:45 ]
Заголовок сообщения:  Re: Программирование: смена компилятора CVAVR>AVRSTUDIO

Цитата:
В любом случае необходимо экспериментировать на примере конкретной здачи, единой рекомендации тут быть не может :)

Вот это точно. Я вообще такой человек, люблю когда все было по порядку, параллельно и перпендирулярно... Поэтому при написании отдельных участков программы, пробую разными способами реализовать эти участки. И какой способ наиболее практичный, тот и оставляю. И так по кусочкам программа и получается. Конечно больше времени на это уходит.

Страница 2 из 2 Часовой пояс: UTC + 7 часов
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/