общие советы по командам?
|
|
Uncle_Dizel |
Дата: Чт, 06.10.2011, 12:45 | Сообщение # 1 |
Группа:
Пользователи
Ранг:
Пытаюсь разобраться
Сообщений:
40
Замечания:
±
На сайте с 09.06.2011
Статус:
Offline
|
меня интересует как влияет на работу мк все возможные команды? Добавлено (06.10.2011, 12.45.23) --------------------------------------------- вот например включения 10 раз светодиода можно описать двумя вариантами?
main: for i=1 to 10 gpio.1 =1 pause 100 gpio.1=0 pause 100 end
или же gpio.1 =1 pause 100 gpio.1=0 pause 100 gpio.1 =1 pause 100 gpio.1=0 pause 100 .... и так далее
вот как выбирается оптимальная команда?
|
|
|
|
ADMIN |
Дата: Чт, 06.10.2011, 15:33 | Сообщение # 2 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Ну, например, так: 1). While i < 10 gpio.1 =1 pause 100 gpio.1=0 pause 100 i = i + 1 Wend
2). Repeat gpio.1 =1 pause 100 gpio.1=0 pause 100 i = i + 1 Until i <10
3). If i<10 then gpio.1 =1 pause 100 gpio.1=0 pause 100 i = i + 1 endif
Только вариант с For...Next (кстати, не написан оператор Next) занимает больше памяти, потом, по занимаемой памяти идет цикл While...Wend. Циклы If...Then и Repeat...Until занимают меньше программной памяти и, я так думаю, выполняются быстрее.
|
|
|
|
vsky |
Дата: Чт, 06.10.2011, 17:59 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Пытаюсь разобраться
Сообщений:
50
Замечания:
±
На сайте с 23.09.2008
Статус:
Offline
|
рискну не согласится с уважаемым ADMIN, в указанном контексте утверждение, что длина кода пропорциональна быстродействию неверно.
применительно к описанным вариантам ценна лишь экономия программной памяти и то под вопросом, т.к. пример учебный и какие либо добавления в программе не предвидятся.
P.S. pause 100 желательно подробить на 100 пауз по pause 1. Очень удобно при разрешенных прерываниях.
Сообщение отредактировал
vsky - Чт, 06.10.2011, 18:00
|
|
|
|
ADMIN |
Дата: Чт, 06.10.2011, 18:16 | Сообщение # 4 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Я не утверждаю, а, как написано в посте, я так думаю - это мое мнение. Не проверял я на быстродействие.
|
|
|
|
vsky |
Дата: Чт, 06.10.2011, 20:17 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Пытаюсь разобраться
Сообщений:
50
Замечания:
±
На сайте с 23.09.2008
Статус:
Offline
|
быстродействие программы при программной задержке лишено смысла.
не сочтите за занудливость.
|
|
|
|
ADMIN |
Дата: Пт, 07.10.2011, 06:21 | Сообщение # 6 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Здесь речь идет не о конкретном куске программы. Этот кусок взят для примера. Смысл в том, что при одинаковых, на первый взгляд, условиях, тратятся разные ресурсы.
Quote (ADMIN)
Только вариант с For...Next (кстати, не написан оператор Next) занимает больше памяти, потом, по занимаемой памяти идет цикл While...Wend. Циклы If...Then и Repeat...Until занимают меньше программной памяти Это, кстати, проверено.
|
|
|
|
Uncle_Dizel |
Дата: Пт, 09.12.2011, 11:46 | Сообщение # 7 |
Группа:
Пользователи
Ранг:
Пытаюсь разобраться
Сообщений:
40
Замечания:
±
На сайте с 09.06.2011
Статус:
Offline
|
вот еще я мне интересно за какое время выполняется каждая команда скажем i = 0 учитывая что у меня частота 4 Мгц то один машиный цикл выполниться за 4000/4 = 1000 нс или 1 мкс
|
|
|
|
ADMIN |
Дата: Пт, 09.12.2011, 12:52 | Сообщение # 8 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Каждая команда ассемблера выполняется за один машинный цикл, за исключением команд перехода (2 мц). В случае с Basic мы пишем на языке высокого уровня, который транслируется в ассемблерную программу. Поэтому в случае i = 0 в ассемблере будет написано как clrf i, что займет один машинный цикл
|
|
|
|