Например TDA7294

Форум РадиоКот • Просмотр темы - PureBasic для PC
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 11:46:23

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 128 ]    , , , 4, , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 03, 2009 18:04:16 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Значит программа должна работать так:
1. Загружаем данные из файла и анализируем на наличие ошибок
2. Данные помещаем в переменные (точнее в динамический список) и запускаем один общий таймер, по которому будет вызыватся процедура каждую секунду.
3. При каждом вызове таймера, просматриваем все данные в динамическом списке и проверяем не пришло ли время передать данные устройству если пришло, то передаём и удаляем данные о выдержке из динамического списка.


Таким образом можно получить "паралельный" отсчёт всех задержек используя только один таймер. При этом зарание количество формируемых задержек неизвестно.

Цитата:
вот скрин буржуйской программы меня интересуют таймеры в левой чати картинки. ак добится нечто похожего это
Похоже что там использованы обычные рисунки.
Что-то типа этого, только здеть отображается текущее время

Код:
LoadFont(0,"Arial",28, #PB_Font_Bold) ; Загружаем жирный шрифт "Arial" с размером 28

Procedure DrawImageText() ; Эта процедура вызывается по таймеру каждую секунду

If StartDrawing(ImageOutput(1)) ; Приступаем к рисованию по рисунку с идентификатором 1
 DrawingFont(FontID(0)) ; Используемый шрифт
 DrawText(20, 8, FormatDate("%hh:%ii:%ss",Date()) , RGB(120, 199, 151), 0) ; Рисуем текущее время
 StopDrawing() ; Завершаем рисование
 SetGadgetState(1,ImageID(1)) ; Обновляем рисунок в ImageGadget
EndIf

EndProcedure


If OpenWindow(0,200,200,220,80,"Заголовок",#PB_Window_MinimizeGadget)
  If CreateGadgetList(WindowID(0))
   
    CreateImage(1,200,60) ; Создаём рисунок с размерами 200х60
    ImageGadget(1,10,10,200,60,ImageID(1))
   
    SetTimer_(WindowID(0), 1, 1000, @DrawImageText() ) ; Запускает таймер, по которому будет каждую секунду вызыватся процедура DrawImageText()
   
    Repeat
    Event=WaitWindowEvent()
    Until Event=#PB_Event_CloseWindow ; Прерываем цикл при закрытии окна
   
    KillTimer_(WindowID(0), 1) ; Уничтожаем таймер
   
  EndIf
EndIf
End ; Завершаем работу программы


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 03, 2009 20:38:59 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
Ну с украшательством вроде разобрались сапасибо.
С теорией насчет таймера вроде понятно но хотелось бы немного практики для примера как насчет фрагмента кода, был бы очень признателен. Мне вот представилось нечто такое
Код:
Procedure DinamSpisok() ; Эта процедура вызывается по таймеру каждую секунду
;Тут будет код процедуры проверки динамического списка
;Просматриваем все данные в динамическом списке и проверяем не пришло ли время передать данные устройству
EndProcedure


If OpenWindow(0,200,200,220,80,"Заголовок",#PB_Window_MinimizeGadget)
  If CreateGadgetList(WindowID(0))
   
       
    SetTimer_(WindowID(0), 1, 1000, @DinamSpisok() ) ; Запускает таймер, по которому будет каждую секунду вызыватся процедура DinamSpisok()
   
    Repeat
    Event=WaitWindowEvent()
    Until Event=#PB_Event_CloseWindow ; Прерываем цикл при закрытии окна
   
    KillTimer_(WindowID(0), 1) ; Уничтожаем таймер
   
  EndIf
EndIf
End ; Завершаем работу программы


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 03, 2009 21:36:57 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Цитата:
хотелось бы немного практики для примера как насчет фрагмента кода, был бы очень признателен. Мне вот представилось нечто такое
Правильно!
Код примерно такой
Код:
Structure Infa ; Это структура
  Count.l     ; Это счётчик выдержки
  Command.s   ; Ждесь текст, отображаемый на экране
EndStructure


; Создаём динамический список с "прикошаченой" структурой. Теперь в каждом элементе списка будет по отдельной структуре
Global NewList DataTimer.Infa()

Global AllCount=0 ; Это общее время работы

Procedure DinamSpisok() ; Эта процедура вызывается по таймеру каждую секунду
;Тут будет код процедуры проверки динамического списка
;Просматриваем все данные в динамическом списке и проверяем не пришло ли время передать данные устройству

AllCount+1
SetWindowTitle(0, "Прошло "+Str(AllCount)+" сек.")

  ; В цикле ForEach - Next сканируем динамический список от начала и до конца.
  ForEach DataTimer()
    Count=DataTimer()\Count ; Здесь хранится время до конца выдержки
    If Count<=1 ; ВСЁ, время вышло
        AddGadgetItem(0,-1,DataTimer()\Command) ; Отображаем текст в редакторе. Тут потом будем слать данные устройству
        DeleteElement( DataTimer() ) ; Удаляем элемент из динамического списка
    Else ; Время ещё есть
      DataTimer()\Count=Count-1 ; Уменьшаем счётчик
    EndIf
  Next

EndProcedure


If OpenWindow(0,200,200,400,180,"Заголовок",#PB_Window_MinimizeGadget)
  If CreateGadgetList(WindowID(0))
   
    EditorGadget(0,4,4,392,172) ; Текстовый редактор
   
    AddElement( DataTimer() ) ; Создаём новый эемент и добавляем в динамический список
    DataTimer()\Count=10 ; Пишем данные в структкру созданого элемента
    DataTimer()\Command="Таймер 1 - 10 сек."
   
    AddElement( DataTimer() )
    DataTimer()\Count=4
    DataTimer()\Command="Таймер 2 - 4 сек."
   
    AddElement( DataTimer() )
    DataTimer()\Count=20
    DataTimer()\Command="Таймер 3 - 20 сек."
   
    AddElement( DataTimer() )
    DataTimer()\Count=8
    DataTimer()\Command="Таймер 4 - 8 сек."
       
    SetTimer_(WindowID(0), 1, 1000, @DinamSpisok() ) ; Запускает таймер, по которому будет каждую секунду вызыватся процедура DinamSpisok()
   
    Repeat
    Event=WaitWindowEvent()
    Until Event=#PB_Event_CloseWindow ; Прерываем цикл при закрытии окна
   
    KillTimer_(WindowID(0), 1) ; Уничтожаем таймер
   
  EndIf
EndIf
End ; Завершаем работу программы


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 03, 2009 23:27:19 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
Вот тут я озадачился
По потробней как это работает
что это значит Таймер 1 - 10 сек." Таймер 2 - 4 сек." неочень понятно может потомушто вечер и может я туплю неспорю может и туплю голова болит извиняйте может утром пойму когда высплюсь
Не я сно как добавлять в список новые таймеры и приетом добавлять три байта команды

Код:
    AddElement( DataTimer() ) ; Создаём новый эемент и добавляем в динамический список
    DataTimer()\Count=10 ; Пишем данные в структкру созданого элемента
    DataTimer()\Command="Таймер 1 - 10 сек."
   
    AddElement( DataTimer() )
    DataTimer()\Count=4
    DataTimer()\Command="Таймер 2 - 4 сек."
   
    AddElement( DataTimer() )
    DataTimer()\Count=20
    DataTimer()\Command="Таймер 3 - 20 сек."
   
    AddElement( DataTimer() )
    DataTimer()\Count=8
    DataTimer()\Command="Таймер 4 - 8 сек."


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 04, 2009 11:15:08 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Цитата:
что это значит Таймер 1 - 10 сек." Таймер 2 - 4 сек."
Это только для вывода на экран и всё. Ну чтобы было понятно что за таймер завершил работу.

Цитата:
Не я сно как добавлять в список новые таймеры и приетом добавлять три байта команды


Для этого в структуре прописываем три переменные, попустим, с именами Byte1, Byte2, Byte3.
В них и будем сохранять эти 3 байта.

Структура будет иметь такой вид
Код:
Structure Infa ; Это структура
  Count.l     ; Это счётчик выдержки
  Byte1.c     ; 1 байт
  Byte2.c     ; 2 байт
  Byte3.c     ; 3 байт
  Command.s   ; Ждесь текст, отображаемый на экране
EndStructure


Для дого чтобы добавть новый таймер, мы добавляем новый элемент с помощью функции AddElement. Тосле чего этот элемент становится текущим и можно заполнять его структуру.
Ну скажем так
Код:
AddElement( DataTimer() ) ; Создаём новый эемент и добавляем в динамический список
    DataTimer()\Count=10 ; Пишем данные в структкру созданого элемента
    DataTimer()\Command="Таймер 1 - 10 сек."
    DataTimer()\Byte1= 10    ; 1 байт
    DataTimer()\Byte2= 21    ; 2 байт
    DataTimer()\Byte3= 4    ; 3 байт

В переменную Count записывается время работы таймера в секундах.
В переменной Command просто текст, ну чтобы понять какой таймер сработал. Нужно лишь для отладки
В переменных Byte1, Byte2, Byte3 хранятся байты, которые нужно передать по окончанию выдержки
Сейчас эти данные пыводятся на экран, но потом они будут отправлятся в порт.

Вот модифицированый код
Код:
Structure Infa ; Это структура
  Count.l     ; Это счётчик выдержки
  Byte1.c     ; 1 байт
  Byte2.c     ; 2 байт
  Byte3.c     ; 3 байт
  Command.s   ; Ждесь текст, отображаемый на экране
EndStructure


; Создаём динамический список с "прикошаченой" структурой. Теперь в каждом элементе списка будет по отдельной структуре
Global NewList DataTimer.Infa()

Global AllCount=0 ; Это общее время работы

Procedure DinamSpisok() ; Эта процедура вызывается по таймеру каждую секунду
;Тут будет код процедуры проверки динамического списка
;Просматриваем все данные в динамическом списке и проверяем не пришло ли время передать данные устройству

AllCount+1
SetWindowTitle(0, "Прошло "+Str(AllCount)+" сек.")

  ; В цикле ForEach - Next сканируем динамический список от начала и до конца.
  ForEach DataTimer()
    Count=DataTimer()\Count ; Здесь хранится время до конца выдержки
    If Count<=1 ; ВСЁ, время вышло
        Text.s=DataTimer()\Command+" Байт 1 - "+Str(DataTimer()\Byte1)
        Text=Text+"    Байт 2 - "+Str(DataTimer()\Byte2)+"    Байт 3 - "+Str(DataTimer()\Byte3)
        AddGadgetItem(0,-1, Text) ; Отображаем текст в редакторе. Тут потом будем слать данные устройству
        DeleteElement( DataTimer() ) ; Удаляем элемент из динамического списка
    Else ; Время ещё есть
      DataTimer()\Count=Count-1 ; Уменьшаем счётчик
    EndIf
  Next
 
 
  If CountList( DataTimer() )=0 ; В динамическом списке уже нет ни одного элемента
    KillTimer_(WindowID(0), 1) ; Уничтожаем таймер
    AddGadgetItem(0,-1,"Работа всех таймеров завершена") ; Отображаем текст в редакторе.
  EndIf

EndProcedure


If OpenWindow(0,200,200,400,180,"Заголовок",#PB_Window_MinimizeGadget)
  If CreateGadgetList(WindowID(0))
   
    EditorGadget(0,4,4,392,172) ; Текстовый редактор
   
    AddElement( DataTimer() ) ; Создаём новый эемент и добавляем в динамический список
    DataTimer()\Count=10 ; Пишем данные в структкру созданого элемента
    DataTimer()\Command="Таймер 1 - 10 сек."
    DataTimer()\Byte1= 10    ; 1 байт
    DataTimer()\Byte2= 21    ; 2 байт
    DataTimer()\Byte3= 4    ; 3 байт
   
    AddElement( DataTimer() )
    DataTimer()\Count=4
    DataTimer()\Command="Таймер 2 - 4 сек."
    DataTimer()\Byte1= 40    ; 1 байт
    DataTimer()\Byte2= 51    ; 2 байт
    DataTimer()\Byte3= 7    ; 3 байт
   
    AddElement( DataTimer() )
    DataTimer()\Count=20
    DataTimer()\Command="Таймер 3 - 20 сек."
    DataTimer()\Byte1= 30    ; 1 байт
    DataTimer()\Byte2= 1    ; 2 байт
    DataTimer()\Byte3= 8    ; 3 байт
   
    AddElement( DataTimer() )
    DataTimer()\Count=8
    DataTimer()\Command="Таймер 4 - 8 сек."
    DataTimer()\Byte1= 1    ; 1 байт
    DataTimer()\Byte2= 2    ; 2 байт
    DataTimer()\Byte3= 0    ; 3 байт
       
    SetTimer_(WindowID(0), 1, 1000, @DinamSpisok() ) ; Запускает таймер, по которому будет каждую секунду вызыватся процедура DinamSpisok()
   
    Repeat
    Event=WaitWindowEvent()
    Until Event=#PB_Event_CloseWindow ; Прерываем цикл при закрытии окна

  EndIf
EndIf
End ; Завершаем работу программы


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 04, 2009 11:34:44 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Да и ещё.
Рекомендую немного подправить подсветку синтаксиса в редакторе пурика, а то при стандартной структуры сложно отличать от остального текста.

Для Этого нужно открыть окно настроек и перейти в раздел Импорт/Экспорт.
Там указать путь к файлу Pref_pb_4_00.prefs (он в архиве).
http://www.filehoster.ru/files/ch4879
И импортировать данные

Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 04, 2009 12:07:02 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
Вроде дошло спасибо вчера тупил. Значит данные мы потом будем брать из Byte1.c ; 1 байт, Byte2.c ; 2 байт, Byte3.c ; 3 байт и отправлять их в процедуру отправки в порт.
Эти строки даны для понимания сттруктуры в качестве примера работы структуры. В дальнейшем я так понимаю добавим фрагмет кода который позволит добавлять новые данные в структуру из текстового редактора в формате м:с, 1,1,1. где три 111 это три байта данных. Если я что-то неправильно понял поправте меня.
AddElement( DataTimer() )
DataTimer()\Count=4
DataTimer()\Command="Таймер 2 - 4 сек."
DataTimer()\Byte1= 40 ; 1 байт
DataTimer()\Byte2= 51 ; 2 байт
DataTimer()\Byte3= 7 ; 3 байт


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 04, 2009 12:37:30 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Примерно так.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 04, 2009 14:54:10 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
Я надеюсь вы обясните мне каким образом довисти этот код до ума чтобы добавлять новые таймеры в структуры из текстового редактора я думаю может кнопку сделать типа "Добавить новое событие" которая будет вызывать функцию "AddElement( DataTimer() ) ; Создаём новый эемент и добавляем в динамический список " а эта функция если я правильно понимаю создаст таймер и добавит данные в структуру введенные после нажатия этой кнопки я приав или нет ?????


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 04, 2009 15:09:30 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Для этого мне нужно увидеть кусок раельного файла, который будет использоватся.
А вот не заметил, строка файла такая м:с, 1,1,1

Думаю в текстовый редактор тут не нужен, можно прямо из файла инфу грузить при нажатии кнопки "Старт".

Чуть позже доработаю код. :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 04, 2009 15:48:12 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
что вы понимаете под куском реального файла это файл с в котором будет хранится с ценарий или файл с кодом обшей программы
Я приложил в архиве пример сценария от одной из буржуйских програм в табличном формате csv еще я видел сценарии в формате mdb тоже табличный формат
ссылка на архив
http://alexval2007.ucoz.ru/piro_pult/ShowSample2.zip

Его нужно ведь нетолько загружать но нужно гдето и редактировать создавать этот сценарий такчто какойто редактор серавно нужен а то что читать из файла так я не спорю удобней только список надо отображать что за чем идет


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 04, 2009 16:41:27 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Цитата:
понимаете под куском реального файла это файл с в котором будет хранится с ценарий
Да.
Но только если нужна совместимость с форматом файла буржуйской проги.
Если совместимость не нужна, но это упрощает дело, т. к. можно сделать удобный для этого случая формат.

Цитата:
создавать этот сценарий такчто какойто редактор серавно нужен а то что читать из файла так я не спорю удобней только список надо отображать что за чем идет
Предлагаю использовать таблицу типа такой


Код:
If OpenWindow(0, 100, 100, 500, 300, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   If CreateGadgetList(WindowID(0))
     ListIconGadget(0, 5, 5, 490, 290, "Имя", 90, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines)
     AddGadgetColumn(0, 1, "Время выдержки", 110)
     AddGadgetColumn(0, 2, "Осталось времени", 120)
     AddGadgetColumn(0, 3, "Байт 1", 50)
     AddGadgetColumn(0, 4, "Байт 2", 50)
     AddGadgetColumn(0, 5, "Байт 3", 50)
     Repeat
       Event = WaitWindowEvent()
     Until Event = #PB_Event_CloseWindow
   EndIf
 EndIf


Там будет отображатся инфа об очерёдности и общее время, время до конца выдержки и т. д.

Редактирование можно сделать вызывая дополнительное окно через контекстное меню


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 04, 2009 16:46:04 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
совместимость ненужна просто для примера привел
добавлено позже
Отлично только можно столбец имя в конец перенисти а время вперед
в вормате время байт1 байт2 байт3 Имя
да и эту таблицу хороши бы показывать в програме для визуализации самого процеса и что зщачем идет имя и тп
Насчет редактирования в другом окне полностью согласен в буржуйских программах так и сделано редактор вызывается в виде дополнительного окна


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 04, 2009 18:28:03 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Цитата:
надеюсь вы обясните мне каким образом довисти этот код до ума
На пальцах не объяснить.
Тут нужно писать код, причём много для того, чтобы прога нормально работала. К сожалению у меня нет столько свободного времени.
То что я выкладывал это лишь примеры.

Можете попробовать создать тему на специализированом форуме.
http://pbasic.spb.ru/phpBB2/index.php


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 04, 2009 19:00:47 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
ну по мере возможности хотяб время от времени направляйте в нужное русло ход моих мыслей


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 04, 2009 19:20:33 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Я думаю что лучше будет создать тему на том форуме, ведь тогда "напрявлять ход мыслей в нужное русло" буду не только я.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 04, 2009 20:17:54 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
создал вот сдесь может кто что умное посоветует или поможет http://pbasic.spb.ru/phpBB2/viewtopic.php?p=8150#8150


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 04, 2009 20:30:10 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Уже видел.
Посмотрим что другие ответят, по этому поводу.
Может у кого появится какая-то гениальная мысль.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 04, 2009 21:05:23 
Прорезались зубы

Зарегистрирован: Сб мар 10, 2007 20:05:39
Сообщений: 225
Откуда: валуйки
Рейтинг сообщения: 0
а вы там под каким логином если несекрет ???


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PureBasic для PC
СообщениеДобавлено: Вт мар 06, 2012 16:15:36 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 0
Нам иногда приходится прикошачивать свои железки к компу через один из портов, например LPT порт. :solder:
Думаю те кто пробовал это сделать и писал прогу под винду, наверное знают что NT системы не позволяют получить прямой доступ к порту. Для этого нужно использовать драйвер.
Вот как раз о драйвере дальше пойдет речь.
Во вложении находится драйвер режима ядра ОС, аналог inpoit32.dll, написанный на PureBasic.
Он в месте со всеми исходниками, что будет полезно если нужно создать свой драйвер либо же просто понять как самому написать драйвер и работать с ним из приложения, т. е. инсталлировать его, обращаться к нему, выгружать драйвер и т. д.
Размер DLLки в месте с драйвером, вкошаченым в нее, около 10 КБ что в несколько раз меньше чем inpoit32.dll. :)))
Драйвер проверен и нормально работает на ОС: Windows 2000, Windows XP и Windows 7.

В DLL 4 функции.
Цитата:
Inp(PortAddress.u) ; Чтение байта из порта, адрес которого указан в 'PortAddress'.
Out(PortAddress.u, Byte.a) ; Запись байта в порт, адрес которого указан в 'PortAddress'.
Status() ; Статус драйвера. Если ошибок нет, то 0.
Version() ; Версия программы в виде Float числа.

Функцию Status() желательно вызвать после загрузки DLL и перед работой с ее функциями.
Она может вернуть следующие значения.
Цитата:
0 - Все ОК, драйвер работает.
1 - Ошибка извлечения драйвера на диск.
2 - Ошибка установки драйвера.
3 - Ошибка доступа к драйверу.


Примеры использования драйвера.

Чтение/запись в LPT1.
Код:
Err = Status()
If Err<>#PBIO_OK
  MessageRequester("", "Ошибка драйвера "+Str(Err))
EndIf


Out($378, 120)
Byte = Inp($378)

MessageRequester("", Str(Byte))


Чтение текущей температуры процессора и чипсета через порты $295 и $296.
Код:
#ADR_REG = $295 ;Это адреса регистров системной платы, с помощью которых можно узнать температуру
#DATA_REG = $296

Procedure Termo() ; Эта процедура вызывается по таймеру каждую секунду
   Out(#ADR_REG, $2B) ; Получает текущую температуру процессора
   x=Inp(#DATA_REG)
   SetGadgetItemText(0,0,StrU(x, #PB_Byte)+" °C",1) ; отображаем её в таблице
   
   Out(#ADR_REG, $29) ; Получает текущую температуру системной платы
   x=Inp(#DATA_REG)
   SetGadgetItemText(0,1,StrU(x, #PB_Byte)+" °C",1)  ; отображаем её в таблице
EndProcedure
 
Err = Status()
If Err<>#PBIO_OK
  MessageRequester("", "Ошибка драйвера "+Str(Err))
EndIf

OpenWindow(0,0,0,274,80,"TermoControl",#PB_Window_MinimizeGadget|#PB_Window_Invisible|#PB_Window_ScreenCentered)

ListIconGadget(0,2,4,270,70,"Имя",120,#PB_ListIcon_GridLines) ; Таблица
SetGadgetFont(0,LoadFont(0,"MS Sans Serif",10) ) ; Шрифт используемый в таблице
AddGadgetColumn(0, 1, "Температура", 140) ; Добавление колонки в таблицу
AddGadgetItem(0, 0, "Процессор") ; Добавление строк в таблицу
AddGadgetItem(0, 1, "Мат. плата")

Termo()
AddWindowTimer(0,2,1000) ; Таймер.

HideWindow(0,0) ; Отображение окна

Repeat ; Главный цикл программы
  Event=WaitWindowEvent()
  If Event=#PB_Event_Timer
    Termo()
  EndIf
Until Event=#PB_Event_CloseWindow


Вложения:
PB_IO.rar [29.7 KiB]
Скачиваний: 305
Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 128 ]    , , , 4, , ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y