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


Нужен третий элемент - ОС. smile.gif
Потоки живут там. (Но все их гордо называют задачами cranky.gif )
А вот выбор ОС - довольно интимная вещь. В любом случае нужно внимательно изучить ОСиную ветку форума. После этого уже можно будет конкретно обсуждать "портирование" и "драйверописание" для конкретной ОСи.
Что касается "поточной" связи железа с софтом, как правило применяют сервисы ОС - события, ящики, каналы ...
d__
читай внимательно доку на цомпилер, по умолчанию потоки stdin подключены к функции getchar, а потоки stdout и stderr подключены к функции putchar...
dxp
Цитата(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
Roamer
Спасибо за ответ.
Попробую изложить свое видение вопроса.
В начале программы, после инита аппаратуры, мы организуем поток при помощи стандартных функций типа open. После этого, получив указатель на структуру типа файл, получаем указатель (адрес в смысле) на буфер ввода-вывода и все атрибуты файла и указатели буфера. В основной петле имеем процедурку, которая собственно и работает с аппаратурой и кладет/забирает данные буфера ввода-вывода и модифицирует указатели буфера.
После этого основной процесс, обращаясь к потоку, получит все, что нужно.

Я правильно понимаю вопрос, или что-то не так? И еще: в доке на ИАР написано, что программа не должна модифицировать поля переменной типа File. Как же быть?
qwesystemc
Ну так и не надо их модифицировать самому, ведь для этого и есть функции стандартной библиотеки fopen, fclose, ...
Brukkel Dmitry
Нужно модифицировать функции __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];
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.