Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
Почему 100%?
SergДата: Вторник, 28 Апреля 2009, 14:59 | Сообщение # 1
Ветеран форума
Группа: Проверенные
Сообщений: 959
Репутация: 6
Награды: 8
Статус: Offline
Привет обитатели и жители форума.
Как можно исправить проблему поглощения процессора практически на 100%?
Вот этот скрипт как можно исправить?

Code
For w=1 To 10
a=a+1
If (a=1) Then
q$='888 1'
MatrixSet("Светодиоды[1,1]","2")
MatrixSet("Светодиоды[2,1]","1")
MatrixSet("Светодиоды[3,1]","1")
MatrixSet("Светодиоды[4,1]","1")
MatrixSet("Светодиоды[5,1]","1")
MatrixSet("Светодиоды[6,1]","1")
MatrixSet("Светодиоды[7,1]","1")
MatrixSet("Светодиоды[8,1]","1")
End
If (a=2) Then
q$='888 2'
MatrixSet("Светодиоды[1,1]","1")
MatrixSet("Светодиоды[2,1]","2")
MatrixSet("Светодиоды[3,1]","1")
MatrixSet("Светодиоды[4,1]","1")
MatrixSet("Светодиоды[5,1]","1")
MatrixSet("Светодиоды[6,1]","1")
MatrixSet("Светодиоды[7,1]","1")
MatrixSet("Светодиоды[8,1]","1")
End
If (a=3) Then
q$='888 4'
MatrixSet("Светодиоды[1,1]","1")
MatrixSet("Светодиоды[2,1]","1")
MatrixSet("Светодиоды[3,1]","2")
MatrixSet("Светодиоды[4,1]","1")
MatrixSet("Светодиоды[5,1]","1")
MatrixSet("Светодиоды[6,1]","1")
MatrixSet("Светодиоды[7,1]","1")
MatrixSet("Светодиоды[8,1]","1")
End
If (a=4) Then
q$='888 8'
MatrixSet("Светодиоды[1,1]","1")
MatrixSet("Светодиоды[2,1]","1")
MatrixSet("Светодиоды[3,1]","1")
MatrixSet("Светодиоды[4,1]","2")
MatrixSet("Светодиоды[5,1]","1")
MatrixSet("Светодиоды[6,1]","1")
MatrixSet("Светодиоды[7,1]","1")
MatrixSet("Светодиоды[8,1]","1")
End
If (a=5) Then
q$='888 16'
MatrixSet("Светодиоды[1,1]","1")
MatrixSet("Светодиоды[2,1]","1")
MatrixSet("Светодиоды[3,1]","1")
MatrixSet("Светодиоды[4,1]","1")
MatrixSet("Светодиоды[5,1]","2")
MatrixSet("Светодиоды[6,1]","1")
MatrixSet("Светодиоды[7,1]","1")
MatrixSet("Светодиоды[8,1]","1")
End
If (a=6) Then
q$='888 32'
MatrixSet("Светодиоды[1,1]","1")
MatrixSet("Светодиоды[2,1]","1")
MatrixSet("Светодиоды[3,1]","1")
MatrixSet("Светодиоды[4,1]","1")
MatrixSet("Светодиоды[5,1]","1")
MatrixSet("Светодиоды[6,1]","2")
MatrixSet("Светодиоды[7,1]","1")
MatrixSet("Светодиоды[8,1]","1")
End
If (a=7) Then
q$='888 64'
MatrixSet("Светодиоды[1,1]","1")
MatrixSet("Светодиоды[2,1]","1")
MatrixSet("Светодиоды[3,1]","1")
MatrixSet("Светодиоды[4,1]","1")
MatrixSet("Светодиоды[5,1]","1")
MatrixSet("Светодиоды[6,1]","1")
MatrixSet("Светодиоды[7,1]","2")
MatrixSet("Светодиоды[8,1]","1")
End
If (a=8) Then
q$='888 128'
MatrixSet("Светодиоды[1,1]","1")
MatrixSet("Светодиоды[2,1]","1")
MatrixSet("Светодиоды[3,1]","1")
MatrixSet("Светодиоды[4,1]","1")
MatrixSet("Светодиоды[5,1]","1")
MatrixSet("Светодиоды[6,1]","1")
MatrixSet("Светодиоды[7,1]","1")
MatrixSet("Светодиоды[8,1]","2")
End
If (a=9) Then
a=0
MatrixSet("Светодиоды[1,1]","1")
MatrixSet("Светодиоды[2,1]","1")
MatrixSet("Светодиоды[3,1]","1")
MatrixSet("Светодиоды[4,1]","1")
MatrixSet("Светодиоды[5,1]","1")
MatrixSet("Светодиоды[6,1]","1")
MatrixSet("Светодиоды[7,1]","1")
MatrixSet("Светодиоды[8,1]","1")
RunScript("Аниме")
End
Run("<Embedded>\PB_LPT.exe","q$")
Pause("500")
Next w




Сообщение отредактировал adamfromvyazniki - Вторник, 28 Апреля 2009, 15:00
 
toizyДата: Вторник, 28 Апреля 2009, 15:05 | Сообщение # 2
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Quote (adamfromvyazniki)
Как можно исправить проблему поглощения процессора практически на 100%?

Не использовать циклы и паузы :)


Жизнь оказалась не такой уж и забавной, как поначалу...
 
basmeДата: Вторник, 28 Апреля 2009, 15:46 | Сообщение # 3
MMB Club
Группа: Проверенные
Сообщений: 358
Репутация: 5
Награды: 2
Статус: Offline
Количество команд можно уменьшить - вместо того, чтобы для каждого элемента из ряда отдельной командой ставить нужное значение, нужно просто вместо номера столбца поставить 0.
 
toizyДата: Вторник, 28 Апреля 2009, 16:06 | Сообщение # 4
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Это конечно. А что, сильно мешает загрузка?

Жизнь оказалась не такой уж и забавной, как поначалу...
 
basmeДата: Вторник, 28 Апреля 2009, 16:19 | Сообщение # 5
MMB Club
Группа: Проверенные
Сообщений: 358
Репутация: 5
Награды: 2
Статус: Offline
Quote
вместо номера столбца поставить 0.

Если только у тебя восемь столбцов, и ты для всей строки один индекс выставляешь.
Хотя не факт, что это реально сильно уменьшит нагрузку, тут корень зла всё-таки цикл.
 
toizyДата: Вторник, 28 Апреля 2009, 16:27 | Сообщение # 6
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Ну вроде б всего 10 повторов... однако же, именно циклы и паузы в первую очередь глушат прогу

Добавлено (28 Апрель 2009, 16:27)
---------------------------------------------
Можно попробовать заменить цикл на скрипттаймер, хотя не факт, что получится. Я как-то пробовал, были проблемы с синхронизацией таймеров. Ну в общем, ход моих мыслей тебе понятен... попробуй, может, что и выйдет


Жизнь оказалась не такой уж и забавной, как поначалу...
 
SergДата: Вторник, 28 Апреля 2009, 23:03 | Сообщение # 7
Ветеран форума
Группа: Проверенные
Сообщений: 959
Репутация: 6
Награды: 8
Статус: Offline
значит это можно считать недостатком ММБ

 
toizyДата: Среда, 29 Апреля 2009, 09:37 | Сообщение # 8
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Да, у ММВ много недостатков :)

Жизнь оказалась не такой уж и забавной, как поначалу...
 
RushДата: Среда, 29 Апреля 2009, 15:31 | Сообщение # 9
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
Да, нагорожено, конечно, много.
Кроме того, не работает согласно заявленному пояснению.
Не показывает запитку всех выходов и сброс запитки всех выходов.
Вот как должно быть, если использовать вариант с циклом:
Code
n=1
For i=1 To 10
   q$='888 '+CHAR(n)
   MatrixSet("Светодиоды[0,0]","1")
   If (i<9) Then
     MatrixSet("Светодиоды[i,0]","2")
   Else
     If (i<10) Then
       MatrixSet("Светодиоды[0,0]","2")
     Else
       q$='888 0'
     End
   End
   Run("<Embedded>\PB_LPT.exe","q$")
   n=n*2
   Pause("500")
Next i
ScriptTimer("Timer1=Аниме","1")

А за загрузку процессора на 100% виновата команда Pause. Поэтому лучше использовать другой скрипт:
Code
If (set=FALSE) Then
   n=1
   set=TRUE
   i=0
End
i=i+1
q$='888 '+CHAR(n)
MatrixSet("Светодиоды[0,0]","1")
If (i<9) Then
   MatrixSet("Светодиоды[i,0]","2")
Else
   If (i<10) Then
     MatrixSet("Светодиоды[0,0]","2")
   Else
     q$='888 0'
     set=FALSE
   End
End
Run("<Embedded>\PB_LPT.exe","q$")
n=n*2
ScriptTimer("Timer1=Аниме","500")

Загрузка падает до 10-12%. Из них 7-9% занимает PB_LPT.exe
 
SergДата: Среда, 29 Апреля 2009, 16:50 | Сообщение # 10
Ветеран форума
Группа: Проверенные
Сообщений: 959
Репутация: 6
Награды: 8
Статус: Offline
Как это не показывет,если нажать на включить все,то все светодиоды (в матрице) становятся зелёными,если нажать на выключить все,все становятся красными

 
RushДата: Среда, 29 Апреля 2009, 17:13 | Сообщение # 11
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
Quote (adamfromvyazniki)
Как это не показывет,если нажать на включить все,то все светодиоды (в матрице) становятся зелёными,если нажать на выключить все,все становятся красными

Ну и что? Разговор о том, что при "анимации" не выводятся все команды PB_LPT.exe, да и не посылается у тебя команда "888 0". А команда "888 256" хоть и посылается, а не отображается.
 
SergДата: Среда, 29 Апреля 2009, 18:09 | Сообщение # 12
Ветеран форума
Группа: Проверенные
Сообщений: 959
Репутация: 6
Награды: 8
Статус: Offline
Вот передо мной лежит монтажная плата и 8 светодиодов.Включаю выключаю всё ок,могу прислать видео если надо.
А на счёт 256,да это не продумано,как не продуманы и другие числа,например 4+8=12,это отображаться не будет.
Пример мой просто показывает как просто сделать передачу в LPT порт.

Разговор о том, что при "анимации" не выводятся все команды PB_LPT.exe
А на счёт этого я не понял


 
RushДата: Среда, 29 Апреля 2009, 18:19 | Сообщение # 13
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
Это безнадежно...
Всё...
 
SergДата: Среда, 29 Апреля 2009, 18:35 | Сообщение # 14
Ветеран форума
Группа: Проверенные
Сообщений: 959
Репутация: 6
Награды: 8
Статус: Offline
Почему

Добавлено (29 Апрель 2009, 18:35)
---------------------------------------------
Для простеньких операций вполне достаточно,например для включения света...


 
Alex3AДата: Четверг, 30 Апреля 2009, 09:03 | Сообщение # 15
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
adamfromvyazniki, Ты что, пытаешся изобрести вывод на семисегментный индикатор?
 
SergДата: Четверг, 30 Апреля 2009, 12:49 | Сообщение # 16
Ветеран форума
Группа: Проверенные
Сообщений: 959
Репутация: 6
Награды: 8
Статус: Offline
Неее,у меня служит для управления макетом котлоагрегата

 
Alex3AДата: Четверг, 30 Апреля 2009, 16:05 | Сообщение # 17
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Ну и чего тебе не хватает?
Сделай все по скрипт таймеру. таймеры не загружают проц.
Или проблема организовать цикл без цикла?
 
SergДата: Четверг, 30 Апреля 2009, 16:07 | Сообщение # 18
Ветеран форума
Группа: Проверенные
Сообщений: 959
Репутация: 6
Награды: 8
Статус: Offline
В точку,в этом проблема

 
RushДата: Четверг, 30 Апреля 2009, 16:20 | Сообщение # 19
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
Quote (adamfromvyazniki)
В точку,в этом проблема

Блин, разжевано уже.
Ну написал же тебе цикл без цикла, который не грузит систему. Что еще надо?
 
SergДата: Четверг, 30 Апреля 2009, 16:45 | Сообщение # 20
Ветеран форума
Группа: Проверенные
Сообщений: 959
Репутация: 6
Награды: 8
Статус: Offline
ScriptTimer("=Аниме","500")
что вот это значит?
Timer1 почему,для чего,остальной смысл я понял


 
RushДата: Четверг, 30 Апреля 2009, 17:12 | Сообщение # 21
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
Quote (adamfromvyazniki)
ScriptTimer("=Аниме","500")
что вот это значит?

Это используется для замены цикла и одновременно для замены команды Pause, которая загружает процессор. И не
Quote
ScriptTimer("=Аниме","500")
а ScriptTimer("Timer1=Аниме","500"). Если ты еще не понял - заменяешь содержимым моего скрипта содержание своего скрипта "Аниме".
 
Alex3AДата: Четверг, 30 Апреля 2009, 17:24 | Сообщение # 22
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Quote (Rush)
Это безнадежно...
Всё...

Согласен
 
  • Страница 1 из 1
  • 1
Поиск: