Почему 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) Это безнадежно... Всё... Согласен
|
|
| |