Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » FAQ по Bascom AVR и МК » Скорость выполнения программы (фрагментов)


Скорость выполнения программы (фрагментов)

Сообщений 1 страница 30 из 31

1

Думаю, All не будет против, если кто-то изложит способ измерения скорости выполнения программы или её фрагментов.
Хотя бы на уровне "тактов на фрагмент"... ;)

Путь дизассемблирования с последующим (практически) ручным подсчетом не самый удобный.

0

2

portB.0 = 1
код
portB.0 = 0

замеряем время между фронтом и спадом.

0

3

Александр Д. написал(а):

замеряем время между фронтом и спадом.

Секундомером ? ;)
Без обид, плз...

Например:
For A = 1 To 10
    B = B + A
Next A

Количество тактов на выполнение данного цикла ?
Сколько ?
Не время (мксек, мсек и т.п.), а - количество тактов МК.

Отредактировано Nord (2019-07-21 22:20:15)

-1

4

Nord написал(а):

Александр Д. написал(а):

    замеряем время между фронтом и спадом.

Секундомером ? ;)
Без обид, плз...

С логическим анализатором.
570р. с доставкой.

496,82 руб.  6%СКИДКА | USB Logic SCM 24 МГц 8 каналов 24 м/секунд логический анализатор отладок для ARM FPGA логический анализатор логика 24 м 8CH
https://s.click.aliexpress.com/e/K56FyPY

Отредактировано EdGull (2019-07-21 22:28:32)

+1

5

EdGull написал(а):

С логическим анализатором.570р. с доставкой.

ЛА есть, но речь об другом.

Я про подобные расчеты:
Вставки на ASM AVR (ассемблер)

Как это сделать максимально эффективно имеющимися программными средствами ?

Отредактировано Nord (2019-07-21 22:34:51)

0

6

Норд, глупый вопрос для электронщика.
Я из "старых", мне проще глянуть тем же логером, чем считать циклы. За годы работы ни разу не считал, достаточно глянуть логгером/осциллографом.

0

7

Nord написал(а):

если кто-то изложит способ измерения скорости выполнения программы или её фрагментов.

Таймером измерять. Производительность МК

Отредактировано Пётр (2019-07-21 22:50:58)

+1

8

Nord написал(а):

Секундомером ?
Количество тактов на выполнение данного цикла ?
Сколько ?
Не время (мксек, мсек и т.п.), а - количество тактов МК.

Собственно, а в чём проблема ?

0

9

sasha_1973 написал(а):

Собственно, а в чём проблема ?

Поиск информации о времени выполнения операторов Bascom.
Про ASM практически понятно, есть таблицы в даташитах и Справке.
По операторам Bascom такой информации не нашел...

К примеру:
Вставки на ASM AVR (ассемблер)

Исполнение на Bascom
' Время выполнения команд 39 тактов, если меньше или равно, иначе 43 такта
......
Исполнение на ASM AVR
' Время выполнения команд 19 тактов, если меньше или равно, иначе 21 такт


Пока единственный путь, мной найденный - дизассемблирование полученного HEX и ручной подсчет. ;)

Предложенные аппаратные способы - не совсем то, особенно, если проект еще только в компе...

0

10

Nord написал(а):

Предложенные аппаратные способы - не совсем то, особенно, если проект еще только в компе

Запустить прошивку в протеусе и посмотреть за сколько тактов будет выполнен участок кода.
Ручной подсчет требует больше времени и велика вероятность ошибиться в подсчетах.

0

11

Пётр написал(а):

Запустить прошивку в протеусе и посмотреть за сколько тактов будет выполнен участок кода.

Что-то я недочитал в хелпах Протеуса... ;)
Как реализуется или с какого места читать ?

0

12

Я чуть выше дал ссылку Производительность МК где есть код на баскоме с измерением числа тактов фрагментов. Вывод результата через USART. В протеусе создаете простую схему с МК и терминалом. Загружаете прошивку, запускаете и в терминале смотрите за сколько тактов был выполнен фрагмент.

+1

13

Пётр написал(а):

Я чуть выше дал ссылку

Биг сенкс, будем рыть... ;)

0

14

Nord написал(а):

Биг сенкс, будем рыть...


Трактора подтянулись... !

делаешь исходник, например:

!nop

For A = 1 To 10
    B = B + A
Next A

!nop

ставишь частоту симки и исходника = 1 МГц
на !nop остановки
время между ними в мксек = кол.тактов

+1

15

Попробовал оба способа...

For A = 1 To 1
    Incr B
Next A

Протеус показал 40 тактов.
Симулятор Bascom - 34 такта.

0

16

чудес не бывает, мы-же взрослые дядьки !

0

17

Nord написал(а):

Попробовал оба способа...

For A = 1 To 1
    Incr B
Next A

Протеус показал 40 тактов.
Симулятор Bascom - 34 такта.


а на ASM будет 5 тактов

0

18

sasha_1973 написал(а):

чудес не бывает, мы-же взрослые дядьки !

Хотелось бы поточнее иметь значения... ;)
А тут имеем разброс в 6 тактов.

Вопрос не в сравнительной оценке с ASM, а в "заполнении информационной ниши".

Буду ориентироваться на симуляцию, т.к. Протеус может обманывать из-за своей внутренней арифметики.

Отредактировано Nord (2019-07-22 19:37:55)

0

19

Nord написал(а):

Буду ориентироваться на симуляцию, т.к. Протеус может обманывать из-за своей внутренней арифметики.


Время на выполнение инструкций не обманешь, Протеус не врёт !

Симуляции Bascomа и Proteusа показывают идентичные результаты.

0

20

sasha_1973 написал(а):

Время на выполнение инструкций не обманешь, Протеус не врёт !

Попробую, конечно, еще.
Тем более, что с Протеусом удобнее, не надо заниматься арифметикой после каждого замера... ;)

0

21

bulat943 написал(а):

Lcd_set_window w , osc(a) , w , osc(a)


Булат, привет. Без описания данной функции оптимизировать сложно. Опять же, многое зависит от резервирования памяти. Выложи подпрограмму.

Отредактировано pchela5 (2019-07-30 10:35:53)

0

22

Там установка границ рисования

Отредактировано bulat943 (2019-07-30 13:03:41)

0

23

bulat943 написал(а):

можно подробнее?


Чего тут подробнее, быстрее ASM пока ничего не придумали.

bulat943 написал(а):

у меня например
'вертикальные линии


Прикольненько, в вордово-байтовом цикле использовать регистры без сохранения-восстановления  и ничего не ломается, Вам ВЕЗЁТ  !!!

0

24

sasha_1973 написал(а):

регистры без сохранения-восстановления  и ничего не ломается

Я убрал лишнее
цикл
for x = 2 to 319 step 45
      for y = 4 to 239 step 2

next y
next x
Знать бы как дизассемблировать...
Черт с ним-сам разберусь, всем удачи!

0

25

bulat943 написал(а):

Знать бы как дизассемблировать...

А что это даст ?
Bascom формирует не идеальный ассемблер.
Каша с заворотом мозга при разборке обеспечена... ;)

bulat943 написал(а):

Черт с ним-сам разберусь, всем удачи!

Странный подход... ;)

Отредактировано Nord (2019-08-04 20:45:51)

0

26

Мне каша не нужна,я просто хотел посмотреть что получается после компиляции программ(в которых есть цикл) в баском авр и как можно ускорить этот цикл
К сожалению ассемлер я не понимаю,только по книге Белова,которая лежит на столе
Достал ардуино уно,буду мерить таймерами

Добавил-
на bascom avr-
4098 тактов
for x = 0 to 255
next x
С ассемблернойвставкой-
!push R23                    '772 такта
!LDI  R23, $ff
wt1:
   !dec r23
   !brne wt1
   !pop R23

Быстрее в 5 раз!!!буду делать дальше

Вопрос решен!!!теперь отрисовка на дисплее ILI9341 быстрее раза в 2

Отредактировано bulat943 (2019-08-05 09:17:27)

0

27

bulat943 написал(а):

Знать бы как дизассемблировать...

Загоняем файл с расширением obj в протеус и включаем опцию дизассемблер.
Получим строку на Bascom и её дизассемблерный вариант.
Это кстати серьёзный минус васика, обычно компиляторы дают дизассемблированный листинг .

0

28

bulat943 написал(а):

Добавил-на bascom avr
4098 тактов
for x = 0 to 255
next x

Что-то маловато...
У меня 6912 натикало...
Конечно, все равно медленнее ассма... ;)

Отредактировано Nord (2019-08-07 03:09:30)

0

29

sva-don написал(а):

Это кстати серьёзный минус васика, обычно компиляторы дают дизассемблированный листинг .

Не бейсика, а баскома. FastAVR позволяет не только посмотреть асм код, но и внести в него изменения и скомпилировать в avrasm2.

0

30

Пётр написал(а):

Не бейсика, а баскома.

Его родного и имел ввиду.
К сожалению Fast по моему благополучно скончался.

0


Вы здесь » Программирование ATMEL в BASCOM. » FAQ по Bascom AVR и МК » Скорость выполнения программы (фрагментов)