Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Как из голой системы прочитать байт 0х379 файла /dev/port и проверить по маске  (Прочитано 2903 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Nicom

  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
НЕ РАБОТАЕТ (не присваивается)
Так и должно быть. Нет смысла перенаправлять данные через пайп для команды echo, она не воспринимает данные через пайп. В данном случае команды можно разделить с помощью ";".
a=$(dd if=/dev/port bs=1 skip=889 count=1 2>/dev/null); echo $a
Кстати, а почему нельзя просто читать весь байт, а потом через "case", или  "if [" сравнивать с заранее известными значениями?
« Последнее редактирование: 18 Октября 2014, 22:48:15 от Nicom »

Оффлайн ShadowUser15

  • Автор темы
  • Активист
  • *
  • Сообщений: 718
    • Просмотр профиля
потому что заранее известны только значения 5 бит, а на остальных может быть что угодно - например "4C", помимо моего "4F" - это только те значения что тут на форуме мне написали.
Плюс надо будет обработать все варианты, а это 32 ветки скрипта.
Не может быть чтобы в 1996м* году и ранее не учитывали - тогда большинство программистов экономили память, и битовые флаги были нормой, скорее даже стандартом.
* [   ] bash-1.14.0-1.14.1.diff.gz    08-Jul-1994 03:00   27K
вероятное введение нестандартных десятичностей, внутри системы - заставляет задуматься о переходе на другой

Оффлайн Nicom

  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
потому что заранее известны только значения 5 бит, а на остальных может быть что угодно - например "4C", помимо моего "4F"
Вот как раз здесь и пригодится булева алгебра над байтами, которая и есть в bash, можно применить логическое И над входящим байтом и исключить ненужные биты, получив на выходе только значимые значения байта.

Не может быть чтобы в 1996м* году и ранее не учитывали - тогда большинство программистов экономили память, и битовые флаги были нормой, скорее даже стандартом.
* [   ] bash-1.14.0-1.14.1.diff.gz    08-Jul-1994 03:00   27K
Я знаком с битовыми флагами и экономией ресурсов по ассемблеру микроконтроллеров, которые время от времени пишу, но в компьютерной среде пока что не сталкивался с возможностью их использования, просто в большинстве ПО подобная битовая логика мне не встречалась. Я не программист на языках высокого уровня, поэтому использую только то ПО, которое я в состоянии изучить за приемлемое для меня время.
Ну и последняя строчка мне не совсем понятна.

Оффлайн ShadowUser15

  • Автор темы
  • Активист
  • *
  • Сообщений: 718
    • Просмотр профиля
Вот в булевой алгебре и проблема!
Как прочитать - ответ найден.
Код: (bash) [Выделить]
a=$(dd if=/dev/port bs=1 skip=889 count=1 2>/dev/null) Теперь разбираемся со странным поведением команды, разным при установленном бите и нет, см. конец.
Странным - потому что с этой "а" ничего из математики не пашет. Например
Код: (bash) [Выделить]
a=$[a&2]
Код: (bash) [Выделить]
a=$[$a&2] не пашет
та строчка - это ответ ArcFi Кажется на заявление что баш не способен обрабатывать строки.
вероятное введение нестандартных десятичностей, внутри системы - заставляет задуматься о переходе на другой

Оффлайн Nicom

  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
Да, похоже bash не в состоянии оперировать байтами и битами, он может оперировать только символами в своей текущей кодировке. У меня тоже не получается воспользоваться логическими операциями в алгебраических функциях.

Я уже предлагал использовать какую-нибудь мультимедиа клавиатуру для считывания состояния сканера, кнопки "замыкать" через оптореле, типа KAQY214S. Ну есть ещё вариант, написать свой простенький контроллер, подключаемый к LPT, и читать в цикле /dev/lp0.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Nicom, в соседней теме придумали костыль для конвертирования бинарных данных в двоичное числовое представление с последующей проверкой нужного бита:
https://forum.ubuntu.ru/index.php?topic=251409.msg1986895#msg1986895

 

Страница сгенерирована за 0.071 секунд. Запросов: 25.