Буду очень признателен, если кто уточнит, что такое загрузка процессора. В процентах наверно, но от чего?
Откройте диспетчер задач и там увидите.
Ariadna-on-Line писал(а):
И как, например, в Дельфи или в Визуал Бейсике накатать соответствующую программулину?
Чем имеющаяся не подошла? По сравнению с дельфи, программа значительно меньше весит, а по сравнению в VB, не требует рантайма, поэтому переписывание на эти языки, весьма сомнительное занятие, т. к. вообще нет никаких преимуществ.
Если нужно, могу накатать DLL, которая будет возвращать текущую загрузку процессора.
Мурик-у. Лет 15 назад я взял грех на душу - послав подальше одного буржуинского программиста, предложившего купить у него DLL-ку на 300кбайт, вместо прямого ответа на заданный вопрос,- как регулировать громкость звуковой карты. Пришлось самому искать инфу. Оказалось - достаточно всего одной команды на Бейсике. Так что уж лучше назвали бы API-функцию Виндоуса. Вы ведь ими воспользовались? Здесь ведь всё-таки форум, а не торговый центр. Без обид.
_Win9x: ; Win9x ; Win9x/ME ; start the counter by reading the value of the 'StartStat' key
INVOKE _LoadLibraryA@4, _advapi32 OR dword EAX,EAX ; Is EAX = 0 ?? JNZ _LoadLibOK ; EAX = 0: ret ; Return if LoadLibrary failed _LoadLibOK: MOV dword [DLL_HANDLE], EAX INVOKE _GetProcAddress@8, EAX, _RegOpenKeyEx OR dword EAX,EAX ; Is EAX = 0 ?? JNZ _ProcAdr01 ; EAX = 0: ret ; Return if GetProcAddress failed _ProcAdr01: MOV dword [adr_RegOpenKeyEx], EAX
INVOKE _GetProcAddress@8, [DLL_HANDLE], _RegQueryValueEx OR dword EAX,EAX ; Is EAX = 0 ?? JNZ _ProcAdr02 ; EAX = 0: ret ; Return if GetProcAddress failed _ProcAdr02: MOV dword [adr_RegQueryValueEx], EAX
INVOKE _GetProcAddress@8, [DLL_HANDLE], _RegCloseKey OR dword EAX,EAX ; Is EAX = 0 ?? JNZ _ProcAdr03 ; EAX = 0: ret ; Return if GetProcAddress failed _ProcAdr03: MOV dword [adr_RegCloseKey], EAX
RegOpenKeyEx HKEY_DYN_DATA, _string01, 0, KEY_ALL_ACCESS, hKey OR dword EAX,EAX ; Is EAX = 0 ?? JZ _DONE01 ; EAX = 0: ;MessageRequester("ERROR", "Error While initializing counter",0) ProcedureReturn 0 _DONE01: MOV dword [dwDataSize], 4 ;'Length of Long RegQueryValueEx [hKey], _string02, 0, dwType, dwCpuUsage, dwDataSize RegCloseKey [hKey] ; get current counter's value RegOpenKeyEx HKEY_DYN_DATA, _string03, 0, KEY_READ, hKey OR dword EAX,EAX ; Is EAX = 0 ?? JZ _DONE02 ; EAX = 0: ;MessageRequester("ERROR", "Error While opening counter key", 0) ProcedureReturn 0 _DONE02: ProcedureReturn 1 RET
;---------- ; CloseCPUmonitor() ; ;---------- PB_CloseCPUmonitor: CMP dword [IsWinNT], 1 JNE NEAR .Win9x .WinNT: ; WinNT INVOKE _FreeLibrary@4, [DLL_HANDLE] ProcedureReturn 1 .Win9x: ; Win9x RegCloseKey [hKey] ;'stopping the counter RegOpenKeyEx HKEY_DYN_DATA, _string04, 0, KEY_ALL_ACCESS, hKey OR dword EAX,EAX ; Is EAX = 0 ?? JZ _DONE_01 ; EAX = 0: ;MessageRequester("ERROR", "Error While stopping counter", 0) ProcedureReturn 0 _DONE_01: MOV dword [dwDataSize], 4 ;'length of Long RegQueryValueEx [hKey], _string02, 0, dwType, dwCpuUsage, dwDataSize RegCloseKey [hKey] ProcedureReturn 1 RET
;---------- ; CpuUsage() ; ;---------- PB_CpuUsage: CMP dword [IsWinNT], 1 JNE NEAR _Win95 .WinNT: ; WinNT NtQuerySystemInformation SYSTEM_BASICINFORMATION, SYSTEM_BASIC_INFORMATION, 44, 0 OR dword EAX,EAX ; Is EAX = 0 ?? JZ .OK1 ;MessageRequester("ERROR", "Error While retrieving the number of processors!", 0) ProcedureReturn -1 .OK1: ; get new system time NtQuerySystemInformation SYSTEM_TIMEINFORMATION, SYSTEM_TIME_INFORMATION, 32, 0 OR dword EAX,EAX ; Is EAX = 0 ?? JZ .OK2 ;MessageRequester("ERROR", "Error While retrieving the system's time!", 0) ProcedureReturn -1 .OK2: ; get new CPU's idle time NtQuerySystemInformation SYSTEM_PERFORMANCEINFORMATION, SYSTEM_PERFORMANCE_INFORMATION, 312, 0 OR dword EAX,EAX ; Is EAX = 0 ?? JZ .OK3 ;MessageRequester("ERROR", "Error While retrieving the CPU's idle time!", 0) ProcedureReturn -1 .OK3:
; store new CPU's idle And system time MOV dword EAX, [SYSTEM_PERFORMANCE_INFORMATION.liIdleTime_dwLow] MOV dword [liOldIdleTime_dwLow],EAX MOV dword EAX, [SYSTEM_PERFORMANCE_INFORMATION.liIdleTime_dwHigh] MOV dword [liOldIdleTime_dwHigh], EAX
; FLOAT -> INTEGER ; because Result is Integer FLD dword [dbIdleTime] FISTP dword [dbIdleTime]
ProcedureReturn [dbIdleTime]
_Win95: ; Win9x MOV dword [dwDataSize], 4 ;'size of Long ; Query the counter RegQueryValueEx [hKey], _string02, 0, dwType, dwCpuUsage, dwDataSize ProcedureReturn [dwCpuUsage] RET
[section .data] ALIGN 4 _ntdll: db "ntdll.dll",0 _advapi32: db "advapi32.dll",0 _NtQuerySystemInformation: db "NtQuerySystemInformation",0 _RegOpenKeyEx: db "RegOpenKeyExA",0 _RegQueryValueEx: db "RegQueryValueExA",0 _RegCloseKey: db "RegCloseKey",0 _string01: db "PerfStats\StartStat",0 _string02: db "KERNEL\CPUUsage",0 _string03: db "PerfStats\StatData",0 _string04: db "PerfStats\StopStat",0 IsWinNT: dd 0
Гуглите функцию NtQuerySystemInformation() и все что с ней связанно. А если прога будет еще и на Win9x запускаться, то еще нужно с реестром работать. Так что в данном случае, дело не ограничивается одной WinAPI функцией.
Мурик-у. Ого, я думал, что тут попроще. Ну чтож, спасибо, буду разбираться. Но вопрос повторю, - поближе к нашим баранам. Написать программу для PICа там или AVRа, чтобы он сам посчитал степень своей загрузки. Именно это я собственно и хотел узнать. С уважухой.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
1 Не, чёто тут не то. Например у них есть инструкция NOP. Ну будет проц 99% времени молотить через NOP-ы. Ну и какая же здесь полезная работа? Что есть на деле термин "загрузка процессора" - вот чего я не могу понять. 2 Разве процессор может пропускать такты? Можно хоть приблизительную ссылку на инфу о чем речь?
Ariadna-on-Line, рекомендую вам хоть немного ознакомится с инструкциями процессоров Intel x86-64. Может тогда вы поймете чем отличается инструкция NOP.Спойлерзанимает один бит, но ничего не значит, кроме как указатель инструкции. У неё нет операндов и она ничего не совершает. От инструкции HLT.Спойлерпрекращает выполнение инструкции и переводит прощессор в состояние остановки. Запущенное прерывание, отладочное исключение, BINIT, INIT или RESET продолжат выполнение. У этой инструкции нет операндов. http://en.wikipedia.org/wiki/HLT Может тогда вы поймете что выполняя инструкцию NOP, процессор все равно работает и его загрузка будет 100%, а вот выполнив инструкцию HLT, процессор начинает пропускать такты (засыпает) и поэтому "отдыхает". Его загрузка уменьшается, а в месте с ней и потребляемая мощность процессором.
Заголовок сообщения: Re: Индикатор загрузки процессора на микроконтроллере PIC16
Добавлено: Ср сен 26, 2012 15:22:19
Мучитель микросхем
Карма: 22
Рейтинг сообщений: 87
Зарегистрирован: Ср сен 26, 2012 14:12:47 Сообщений: 447 Откуда: Київ
Рейтинг сообщения:0
Мурик писал(а):
Есть ли у PIC или AVR инструкция типа HLT?
Есть, к примеру у AVR есть аналогичная по назначению SLEEP. Более того, SLEEP mode режимы можно переключать специальным регистром от обычного IDLE со свойствами как у Интела, до Power Save, StandBy и Power Down включительно.
Ariadna-on-Line писал(а):
Написать программу для PICа там или AVRа, чтобы он сам посчитал степень своей загрузки.
А смысл? В многозадачных системах степень загрузки процессора одной задачей косвенно отражает, сколько ещё таких задач процессор может исполнять. В МК нет ни ОС, ни задач, и смысла в показателе "загрузка процессора" нет никакого. Хотите меньшего энергопотребления? Вводите периодически МК в SLEEP в основном цикле, если остаётся свободное время. А если МК в реалтайме занят вычислениями и выводом на индикатор, то о какой "загрузке" будет идти речь? Там всегда будет 100%
Да, и ещё один нюанс - чтобы посчитать загрузку процессора на ББ, вовсю используются специальные счётчики как внутри ОС, так и внутри самого процессора. В МК таких функций просто не предусмотрено.
Вношу ясность: Мне нет пока нужды писАть программу подсчета загруженности PIC или AVR-а. Я инженер-электроник просто хочу постигнуть техническую суть понятия "загруженность процессора", а не какие DLL-ки и API-шки использовать. Зрю, как сказать, в корЕнь. Надо вынести вопрос в другую тему пока модер не попер за флуд. Всё, спасибо всем ответившим.
headshotbacs получилось у вас запустить индикатор загрузки? Нормально работает? Я собрал а у меня восновном показывает 0 реже проскакивают цифры, хотя в трее закрузка 5-20%
вроде не надо, по крайней мере я ничего не делал. вот сейчас глянул скорость 9600 битсек стоит. поставил на максимум, ничего не поменялось. почитай мои посты в начале, может что поможет
попробуй сигнал прям на 7 ногу контроллера подцепить. у меня например с оптопарой никак не хотел работать. потом я ее выбросил и все норм. если просто включить только питание должно быть написано ОФФ, если и там мерцает, то это либо грязный монтаж либо фузы.
Оптопара нужна для развязки ком сигналов в ттл сигналы.поставь резюк и стабилитрон где-то 4.7 вольта и будет тебе счастье. 4.7 килоома.диод нужен для обрезания -12 вольт присутствующих в сом порту.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения