Автор Тема: Програмка, следяща съдържанието на файлове  (Прочетена 5063 пъти)

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Хардуер - Olinuxino A20
OS - Debian
Компилатор - freepascal, Lazarus
Ползвам Assign, Reset, Read и Close от тези File handling functions.

Програмката чете съдържанието на 3 файла. То може да е "0" или "1", което отговаря на нивото, подадено от 3 датчика, свързани към GPIO изводи, зададени да работят като входове.

Не ми харесва да отварям, чета и затварям постоянно файловете, докато се случи това, което очаквам.

Как да го направя "културно"?
« Последна редакция: Nov 20, 2014, 17:44 от laskov »
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

4096bits

  • Напреднали
  • *****
  • Публикации: 6224
    • Профил
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

Demayl

  • Напреднали
  • *****
  • Публикации: 104
  • Distribution: XUbuntu,FreeBSD
  • Window Manager: Xfce
    • Профил
    • WWW
http://en.wikipedia.org/wiki/Inotify
По-просто няма накъде  ;D
Активен

d0ni

  • Напреднали
  • *****
  • Публикации: 183
    • Профил
Предполагам, че искаш да четеш GPIO файлове в  /sys, прав ли съм? В такъв случай inotify няма да ти помогне, защото това не са инстински файлове. Остава да ги poll-ваш на някакъв период или да потърсиш как може да се генерира прекъсване при промяна на стойността. При Raspberry PI има питонски модул RPi.GPIO за тази цел, но за Olinuxino не съм се интересувал.
Активен

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Предполагам, че искаш да четеш GPIO файлове в  /sys, прав ли съм?
Точно така.
Цитат
При Raspberry PI има питонски модул RPi.GPIO за тази цел, ...
Благодаря за инфото! Прочетох за него и много ми хареса, че ми препоръчват да ползвам Arduino :) Засега ще остана на четене на файловете докато събера данни за евентуалните пропуснати събития, натоварване на процесора и времена при нормално поведение на системата.
Това нещо ще позволява и ще следи минаването на човек през турникет - онези с три рамена на 120 градуса.
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

jet

  • Напреднали
  • *****
  • Публикации: 3473
  • Distribution: debian
  • Window Manager: kde
    • Профил
примери с inotify в bash скриптове: http://techarena51.com/index.php/inotify-tools-example/
може да свърши работа.

А иначе се казва търнстил (Turnstile), щото турникет е уред за спиране на кръвотечение.
Активен

..⢀⣴⠾⠻⢶⣦⠀
  ⣾⠁⢠⠒⠀⣿⡁
  ⢿⡄⠘⠷⠚⠋
  ⠈⠳⣄⠀⠀⠀⠀  Debian, the universal operating system.

remotexx

  • Напреднали
  • *****
  • Публикации: 3249
    • Профил
Малко встрани от темата - нищо не помага колега ..винаги ще има хора дето да 'гласуват' ...тъй де минават (ти ме разбра) с чужди карти. Тези датчици в повечето случаи само отчитат коя карта е минала.. Докат не се мине на нещо по-сериозно няма управия...

напр. ето тва работи даже на raspberry Pi
http://www.raspberrypi.org/facial-recognition-opencv-on-the-camera-board/

а и кода е отворен (е не е Паскал ами С/С++ ама какво от това - трябва да се върви напред)
http://sourceforge.net/projects/opencvlibrary/
http://opencv.org/


П.П. Инак ето така се прави на С/C++
http://www.linux.com/learn/tutorials/765810-beaglebone-black-how-to-get-interrupts-through-linux-gpio
« Последна редакция: Nov 20, 2014, 20:37 от remotexx »
Активен

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
П.П. Инак ето така се прави на С/C++
http://www.linux.com/learn/tutorials/765810-beaglebone-black-how-to-get-interrupts-through-linux-gpio
Това с фронтовете се коментира и тук и в питонския модул. За съжаление, работата на GPIO като входове в Olinuxino въобще не е документирана. Утре ще разгледам.
В момента правя точно това - следя фронтовете, но програмно (в моята програма).
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

remotexx

  • Напреднали
  • *****
  • Публикации: 3249
    • Профил
Аз не съм много сведущ точно по темата, но доколкото разбирам ти правиш poll а пича от линка получава прекъсване или ползва някакъв друг механизъм който не е  poll обаче - щото задава callback функция - та си помислих че може да ти помогне (ще трябва да с мине на С/С++ обаче)


П.П. Между другото по въпроса за Паскал-а, по принцип ако ползваш тези е по-бързо
{$I-} // Turn off checking. This way all errors go into the IOResult variable
{$I+} // Turn it back on; errors will lead to an EInOutError exception

също и ако не четеш файла като текстов ами като двоичен
http://wiki.freepascal.org/File_Handling_In_Pascal#Binary_files

и ...тук вече не съм сигурен дали ще мине номера ако не го затвориш преди следващото четене ами направиш само
Seek(0, soBeginning);
дали ще прочете новото състояние или ще трябва твърдо да го затвориш и да отваряш наново...
« Последна редакция: Nov 21, 2014, 04:48 от remotexx »
Активен

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Благодаря за насоките!

... или ще трябва твърдо да го затвориш и да отваряш наново...
Не съм наясно и за друго - ако отворя файла за четене и го оставя отворен, дали това ще пречи на процеса, който пише в този файл и дали ще има някаква полза от подобно спестяване на постоянното отваряне/затваряне в бързодействието и натоварването. И дали ако файлът е бил отворен и ако това не пречи на пишещия процес, ще е отворен ли и след промяната на съдържанието му?
Но, май много се задълбавам. Ще пусна нещото така и след като видя как се държи ще му мисля.
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

Lamqta

  • Напреднали
  • *****
  • Публикации: 54
    • Профил
sed e това което ти трябва. Стрийминг редактор.
Активен

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Това са файловете в свързаните с GPIO директории:
Цитат
root@a20-OLinuXino:/opt# ls -l /sys/class/gpio/gpio47_ph2/
total 0
-rw-r--r-- 1 root root 4096 Nov 26 11:30 active_low
lrwxrwxrwx 1 root root    0 Nov 26 11:30 device -> ../../../gpio-sunxi
-rw-r--r-- 1 root root 4096 Nov 25 17:51 direction
-rw-r--r-- 1 root root 4096 Nov 26 11:30 edge
drwxr-xr-x 2 root root    0 Nov 26 11:30 power
lrwxrwxrwx 1 root root    0 Nov 25 17:51 subsystem -> ../../../../../class/gpio
-rw-r--r-- 1 root root 4096 Nov 25 17:51 uevent
-rw-r--r-- 1 root root 4096 Nov 26 11:33 value
root@a20-OLinuXino:/opt# ls -l /sys/class/gpio/gpio50_ph10/
total 0
-rw-r--r-- 1 root root 4096 Nov 26 11:33 active_low
lrwxrwxrwx 1 root root    0 Nov 26 11:33 device -> ../../../gpio-sunxi
-rw-r--r-- 1 root root 4096 Nov 26 11:30 direction
-rw-r--r-- 1 root root 4096 Nov 26 11:33 edge
drwxr-xr-x 2 root root    0 Nov 26 11:33 power
lrwxrwxrwx 1 root root    0 Nov 26 11:30 subsystem -> ../../../../../class/gpio
-rw-r--r-- 1 root root 4096 Nov 26 11:30 uevent
-rw-r--r-- 1 root root 4096 Nov 26 11:33 value
ph2 е конфигуриран като изход, а ph10 - като вход. И за двата, файловете uevent са празни.

Явно има някаква възможност за генериране на прекъсвания, но ще трябва да се чете, но пък документация ...
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Цитат
Не съм наясно и за друго - ако отворя файла за четене и го оставя отворен, дали това ще пречи на процеса, който пише в този файл и дали ще има някаква полза от подобно спестяване на постоянното отваряне/затваряне в бързодействието и натоварването. И дали ако файлът е бил отворен и ако това не пречи на пишещия процес, ще е отворен ли и след промяната на съдържанието му?
Но, май много се задълбавам. Ще пусна нещото така и след като видя как се държи ще му мисля.

Няма процес, който да пише там. Промяна на съдържанието не се случва на практика - просто когато го отвориш и прочетеш ти се сервират актуалните данни.
Активен

"Knowledge is power" - France is Bacon

d0ni

  • Напреднали
  • *****
  • Публикации: 183
    • Профил
Пробвай да компилираш този пример: https://www.ridgerun.com/developer/wiki/index.php/Gpio-int-test.c и виж дали ще работи на olinuxino-то ти
Активен

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Няма процес, който да пише там. Промяна на съдържанието не се случва на практика - просто когато го отвориш и прочетеш ти се сервират актуалните данни.
Нещо повече :) ! Оказа се, че файловете и директориите в /sys/class се създават чак когато бъдат потърсени, напр. с ls
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3