общие советы по командам? - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » общие советы по командам?
общие советы по командам?
Uncle_Dizel Дата: Чт, 06.10.2011, 12:45  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 40
Репутация: 2   ±
Замечания:   ±
На сайте с 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
....
и так далее

вот как выбирается оптимальная команда?

ЯНДЕКС Дата: 06.10.2011
ADMIN Дата: Чт, 06.10.2011, 15:33  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1109
Репутация: 24   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Пытаюсь разобраться
Сообщений: 41
Репутация: 0   ±
Замечания:   ±
На сайте с 23.09.2008

Статус: Offline

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

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

P.S. pause 100 желательно подробить на 100 пауз по pause 1.
Очень удобно при разрешенных прерываниях. biggrin

Сообщение отредактировал vsky - Чт, 06.10.2011, 18:00
ADMIN Дата: Чт, 06.10.2011, 18:16  |                                                                                                                Сообщение # 4
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1109
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Я не утверждаю, а, как написано в посте, я так думаю - это мое мнение. Не проверял я на быстродействие.
vsky Дата: Чт, 06.10.2011, 20:17  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Пытаюсь разобраться
Сообщений: 41
Репутация: 0   ±
Замечания:   ±
На сайте с 23.09.2008

Статус: Offline

biggrin

быстродействие программы при программной задержке лишено смысла. wacko

не сочтите за занудливость. wink
ADMIN Дата: Пт, 07.10.2011, 06:21  |                                                                                                                Сообщение # 6
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1109
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

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

Quote (ADMIN)


Только вариант с For...Next (кстати, не написан оператор Next) занимает больше памяти, потом, по занимаемой памяти идет цикл While...Wend. Циклы If...Then и Repeat...Until занимают меньше программной памяти

Это, кстати, проверено.
Uncle_Dizel Дата: Пт, 09.12.2011, 11:46  |                                                                                                                Сообщение # 7
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 40
Репутация: 2   ±
Замечания:   ±
На сайте с 09.06.2011

Статус: Offline

вот еще я мне интересно за какое время выполняется каждая команда
скажем
i = 0
учитывая что у меня частота 4 Мгц то один машиный цикл выполниться за 4000/4 = 1000 нс или 1 мкс
ADMIN Дата: Пт, 09.12.2011, 12:52  |                                                                                                                Сообщение # 8
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1109
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Каждая команда ассемблера выполняется за один машинный цикл, за исключением команд перехода (2 мц). В случае с Basic мы пишем на языке высокого уровня, который транслируется в ассемблерную программу. Поэтому в случае
i = 0 в ассемблере будет написано как clrf i, что займет один машинный цикл
Форум Picbasic.ru » Программирование МК » PicBasicPro » общие советы по командам?
Страница 1 из 11
Поиск: