Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
k1-801
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 135
#1

LPT порт, Ubuntu, code::blocks - C++

07.06.2013, 20:58. Просмотров 1848. Ответов 11
Метки нет (Все метки)

Итак, название темы говорит само за себя. Нужно в консольном приложении code::blocks под Ubuntu читать и писать данные из/в LPT-порт. Если точнее, нужно не просто передать информацию, а "дергать пины". Да, я знаю, что уже это спрашивал, но тогда как обычно про тему все забыли, пришлось новую делать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2013, 20:58     LPT порт, Ubuntu, code::blocks
Посмотрите здесь:

Ubuntu + code:blocks + cUrl - C++
Здравствуйте, решил попробовать на с++ разработать приложение, которое будет работать с библиотекой cURL ОС = убунту, компилятор =...

Code::Blocks IDE для ubuntu - C++
Поставил ubuntu. Скачал IDE... Подскажите как добавить библиотеку. Нет conio.h Пишу на C++. Это библиотека С? Может в этом проблема?

И снова LPT порт и все вытекающие - C++
Собственно, проблема: на компе нужно заюзать LPT-порт в качестве банального IO. Грубо говоря: управление схемой (всякие там светодиоды,...

Не компилируется в Code::Blocks - C++
Установил на Windows 7 среду Code::Blocks 10.05 При нажатии на кнопку "Build and run" НИЧЕГО НЕ ПРОИСХОДИТ! В чем дело, подскажите,...

Не компилирует Code::Blocks 10.05 - C++
Программирую в среде Visual Studio 2010. Решил попробовать CodeBlocks. Установил всё точно так, как прописано здесь:...

Хедеры в Code Blocks - C++
До этого сидел в студии 10ой, сейчас скачал Code Blocks, настроил компилятор, проблема в том, что когда создаю класс, компилятор не видит...

Code Blocks не компилирует - C++
Ребят, помогите пожалуйста, хочу продолжить освоение языка, а тут такая печалька=( Не компилируется ни одна программа на Code Block`s. ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dr_Quake
Заблокирован
07.06.2013, 21:18     LPT порт, Ubuntu, code::blocks #2
"Дёргают пины" в LPT всегда одним способом - выводя нужный байт и битовые маски для пинов в байте собственно.
k1-801
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 135
07.06.2013, 21:21  [ТС]     LPT порт, Ubuntu, code::blocks #3
Это собственно я и так понял. Я не понял как конкретно это все запилить на C++. Надо писать в какой-то файл по одному символу, ждать пока устройство не окажется готовым снова принимать данные и снова байт. Я не понял в какой файл записывать и из какого читать
Dr_Quake
Заблокирован
07.06.2013, 21:39     LPT порт, Ubuntu, code::blocks #4
В LPT нету никакого понятия готово-не готово(для SPP естественно,остальные режимы не везде есть и не подходят для такого режима работы с выводом на уровне 8 цифровых линий, ибо там подразумевается уже алгоритм и обмен двухсторонний). В линухе же есть блочное устройство(ppc если не ошибаюсь для linux 2.x), у него локи итд стандартные, но как и везде - там ещё есть ioctl для устройства, насколько знаю и через него можно напрямую выводить данные, ну и на ring0 прямо в порт по адресу.

Это достаточно старый пример(так работать скоро должны запретить через out), но вроде на 2.6 ещё работал. Байт по битмаске уже сам сформируешь.
http://eagerfish.eu/lpt-programming-...-ubuntu-linux/
k1-801
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 135
07.06.2013, 22:07  [ТС]     LPT порт, Ubuntu, code::blocks #5
Спасибо, я немного переписал, покороче... Работоспособность неизвестна, сейчас проверять буду.
Вот код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <stdio.h>
#include <sys/io.h> //ioperm and outb
 
#define BASEPORT 0x378 //LPT adress
using namespace std;
 
int main()
{
    int j;
    if(ioperm(BASEPORT,3,1))
    {
        cout<<"Access denied!"<<endl;
        return 0;
    }
    for(;;)
    {
        cout<<"Access granted!"<<endl;
        outb(255,BASEPORT);
        for(j=0;j<250000;j++);
        outb(0,BASEPORT);
        for(j=0;j<250000;j++);
    }
    return(0);
}
Dr_Quake
Заблокирован
07.06.2013, 22:38     LPT порт, Ubuntu, code::blocks #6
А вот с поддержанием уже будут проблемы. Придётся скорее всего отдельный поток делать который держит порт, но через out не прокатит ни монополизация, ни проверка состояния, только писать туда что надо каждую секунду в отдельном потоке.
k1-801
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 135
07.06.2013, 22:43  [ТС]     LPT порт, Ubuntu, code::blocks #7
Цитата Сообщение от Dr_Quake Посмотреть сообщение
А вот с поддержанием уже будут проблемы. Придётся скорее всего отдельный поток делать который держит порт, но через out не прокатит ни монополизация, ни проверка состояния, только писать туда что надо каждую секунду в отдельном потоке.
Так. А можно на более конкретных примерах? Я пока с потоками /*и еще много с чем*/ не разбирался. Совсем.
Dr_Quake
Заблокирован
07.06.2013, 22:46     LPT порт, Ubuntu, code::blocks #8
Конкретнее - если чему-то захочется в этот порт что-то записать из другого процесса параллельно - он это сделает спокойно, и возникнет каша из состояний вида кто быстрее дёргает outb. Плюс во время загрузки ядра линуха в дефолте пройдёт probing устройств и там тоже будет кратковременное псевдослучайное состояние.
k1-801
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 135
07.06.2013, 23:07  [ТС]     LPT порт, Ubuntu, code::blocks #9
Цитата Сообщение от Dr_Quake Посмотреть сообщение
Конкретнее - если чему-то захочется в этот порт что-то записать из другого процесса параллельно - он это сделает спокойно, и возникнет каша из состояний вида кто быстрее дёргает outb. Плюс во время загрузки ядра линуха в дефолте пройдёт probing устройств и там тоже будет кратковременное псевдослучайное состояние.
Да, это плохо. Хорошо что сигнал будет ловиться МК а не транзисторами и можно посылать коды проверки... А как блокировать порт чтобы от подобного избавиться? Вернее, все регистры порта. Ошибки будут использоваться в качестве прерывателей.
Dr_Quake
Заблокирован
07.06.2013, 23:56     LPT порт, Ubuntu, code::blocks #10
Под линух не знаю. Разве что делать cat setofbytes.file > /device(из программы соответственно ioctl/fnctl/fwrite тупо) , тогда лочит на время записи. Но и тормозит при том... non-irq же, напрямую через irq никогда под линух не работал, и то насколько помню только не SPP с IRQ работает. Банально права выставить не спасёт от случайного запуска копии процесса.
k1-801
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 135
08.06.2013, 13:06  [ТС]     LPT порт, Ubuntu, code::blocks #11
То есть все накрылось... Процесс будет запускаться из консоли, если нужно то через sudo, тут особых проблем нет. Насчет подтверждения то оно работает по ноге busy, мк ест один байт, подает сигнал что занят (обрабатывает байт), затем снимает и ждет дальше. Когда буфер заполнится или придет символ конца строки, он начинает активно работать, при этом все время работы держит сигнал что занят. Еще бы узнать символ конца файла и как все же закрыть всем доступ...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2013, 14:34     LPT порт, Ubuntu, code::blocks
Еще ссылки по теме:

Code Blocks и OpenCV - C++
подскажите хоть одну рабочую ссылку на установку OpenCV в codeBlocks ? пробую...

Мышка в code blocks - C++
Как подключить мышку в code blocks. Срочно нужно. Заранее благодарен

Настройка Code::Blocks - C++
Здравствуйте! Ребята помогите настроить компилятор и отладчик в Code::Blocks.Дело в том что я пока мись чайник в ентом деле, да и с...

Code Blocks 12.11 и OpenCV 2.43 - C++
Code :: Blocks 12.11 и OpenCV 2.43 Распаковываем OpenCV в С:\ Копируем libgcc_s_dw2-1.dll (...

sdl и code::blocks - C++
Code::Blocks версии 12.11 MinGW SDL2-2.0.0 Вобщем действую по гайду отцов с Хабра. Скачиваю SDL2-2.0.0 в архиве, вытаскиваю егго из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Dr_Quake
Заблокирован
08.06.2013, 14:34     LPT порт, Ubuntu, code::blocks #12
Я же пишу - попробуй работать с блочным устройством Linux, а не через порты, сразу и locking open появится. Но там будут ограничено доступны контрольные сигналы, для SPP вроде некритично.

http://stackoverflow.com/questions/6...-a-device-in-c
Yandex
Объявления
08.06.2013, 14:34     LPT порт, Ubuntu, code::blocks
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru