реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как пользоваться потоками в С?, Реализация ввода-вывода
Roamer
сообщение May 18 2005, 10:41
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 35
Регистрация: 27-01-05
Из: Ярославль
Пользователь №: 2 228



Господа!
Только начал разбираться с С на IAR, сразу возник вопрос: как организовать связь потока с последовательным портом или вообще с каким-либо оборудованием? Где происходит вызов обработчика устройства, как передаются данные?
В примерах у ИАРа нашел вывод через печать в строку, а затем - вывод ее через свою специальную процедурку. А как это сделать с использованием потоков?
Go to the top of the page
 
+Quote Post
ig_z
сообщение May 18 2005, 13:17
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551



Цитата(Roamer @ May 18 2005, 13:41)
Господа!
Только начал разбираться с С на IAR, сразу возник вопрос: как организовать связь потока с последовательным портом или вообще с каким-либо оборудованием? Где происходит вызов обработчика устройства, как передаются данные?
В примерах у ИАРа нашел вывод через печать в строку, а затем - вывод ее через свою специальную процедурку. А как это сделать с использованием потоков?
*


Нужен третий элемент - ОС. smile.gif
Потоки живут там. (Но все их гордо называют задачами cranky.gif )
А вот выбор ОС - довольно интимная вещь. В любом случае нужно внимательно изучить ОСиную ветку форума. После этого уже можно будет конкретно обсуждать "портирование" и "драйверописание" для конкретной ОСи.
Что касается "поточной" связи железа с софтом, как правило применяют сервисы ОС - события, ящики, каналы ...
Go to the top of the page
 
+Quote Post
d__
сообщение May 18 2005, 13:29
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 197
Регистрация: 26-08-04
Пользователь №: 548



читай внимательно доку на цомпилер, по умолчанию потоки stdin подключены к функции getchar, а потоки stdout и stderr подключены к функции putchar...
Go to the top of the page
 
+Quote Post
dxp
сообщение May 18 2005, 13:38
Сообщение #4


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(ig_z @ May 18 2005, 19:17)
Цитата(Roamer @ May 18 2005, 13:41)
Господа!
В примерах у ИАРа нашел вывод через печать в строку, а затем - вывод ее через свою специальную процедурку. А как это сделать с использованием потоков?
*


Нужен третий элемент - ОС. smile.gif
Потоки живут там. (Но все их гордо называют задачами cranky.gif )
А вот выбор ОС - довольно интимная вещь. В любом случае нужно внимательно изучить ОСиную ветку форума. После этого уже можно будет конкретно обсуждать "портирование" и "драйверописание" для конкретной ОСи.
Что касается "поточной" связи железа с софтом, как правило применяют сервисы ОС - события, ящики, каналы ...
*



Не, в ОС не те потоки. В ОС - это thread'ы. А вопрошающего интересуют те, которые stream'ы. Т.е. потоки ввода/вывода. Которые реализуются на put_char/get_char. И делать их можно как на задачах, так без оных. smile.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Roamer
сообщение May 19 2005, 10:41
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 35
Регистрация: 27-01-05
Из: Ярославль
Пользователь №: 2 228



Спасибо за ответ.
Попробую изложить свое видение вопроса.
В начале программы, после инита аппаратуры, мы организуем поток при помощи стандартных функций типа open. После этого, получив указатель на структуру типа файл, получаем указатель (адрес в смысле) на буфер ввода-вывода и все атрибуты файла и указатели буфера. В основной петле имеем процедурку, которая собственно и работает с аппаратурой и кладет/забирает данные буфера ввода-вывода и модифицирует указатели буфера.
После этого основной процесс, обращаясь к потоку, получит все, что нужно.

Я правильно понимаю вопрос, или что-то не так? И еще: в доке на ИАР написано, что программа не должна модифицировать поля переменной типа File. Как же быть?
Go to the top of the page
 
+Quote Post
qwesystemc
сообщение Jun 3 2005, 22:40
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 31
Регистрация: 30-04-05
Пользователь №: 4 633



Ну так и не надо их модифицировать самому, ведь для этого и есть функции стандартной библиотеки fopen, fclose, ...
Go to the top of the page
 
+Quote Post
Brukkel Dmitry
сообщение Jun 6 2005, 07:27
Сообщение #7





Группа: Новичок
Сообщений: 8
Регистрация: 27-05-05
Из: Санкт-Петербург
Пользователь №: 5 479



Нужно модифицировать функции __read и __write в файлах
...\arm\config\template\project\dlib\read.c и write.c;
В конечном счете именно эти функции вызываются из printf, fprintf, puts, gets, scanf и т.п.

Если ввод или вывод происходит не через stdin, stdout или stderr - то нужно модифицировать __open, чтобы вернуть handle по которому делать проверку в __read и __write

Еще очень полезно ознакомиться с FILE *_Files[FOPEN_MAX];
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01409 секунд с 7
ELECTRONIX ©2004-2016