Roamer 0 18 мая, 2005 Опубликовано 18 мая, 2005 · Жалоба Господа! Только начал разбираться с С на IAR, сразу возник вопрос: как организовать связь потока с последовательным портом или вообще с каким-либо оборудованием? Где происходит вызов обработчика устройства, как передаются данные? В примерах у ИАРа нашел вывод через печать в строку, а затем - вывод ее через свою специальную процедурку. А как это сделать с использованием потоков? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ig_z 0 18 мая, 2005 Опубликовано 18 мая, 2005 · Жалоба Господа! Только начал разбираться с С на IAR, сразу возник вопрос: как организовать связь потока с последовательным портом или вообще с каким-либо оборудованием? Где происходит вызов обработчика устройства, как передаются данные? В примерах у ИАРа нашел вывод через печать в строку, а затем - вывод ее через свою специальную процедурку. А как это сделать с использованием потоков? <{POST_SNAPBACK}> Нужен третий элемент - ОС. :) Потоки живут там. (Но все их гордо называют задачами :cranky: ) А вот выбор ОС - довольно интимная вещь. В любом случае нужно внимательно изучить ОСиную ветку форума. После этого уже можно будет конкретно обсуждать "портирование" и "драйверописание" для конкретной ОСи. Что касается "поточной" связи железа с софтом, как правило применяют сервисы ОС - события, ящики, каналы ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d__ 0 18 мая, 2005 Опубликовано 18 мая, 2005 · Жалоба читай внимательно доку на цомпилер, по умолчанию потоки stdin подключены к функции getchar, а потоки stdout и stderr подключены к функции putchar... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 32 18 мая, 2005 Опубликовано 18 мая, 2005 · Жалоба Господа! В примерах у ИАРа нашел вывод через печать в строку, а затем - вывод ее через свою специальную процедурку. А как это сделать с использованием потоков? <{POST_SNAPBACK}> Нужен третий элемент - ОС. :) Потоки живут там. (Но все их гордо называют задачами :cranky: ) А вот выбор ОС - довольно интимная вещь. В любом случае нужно внимательно изучить ОСиную ветку форума. После этого уже можно будет конкретно обсуждать "портирование" и "драйверописание" для конкретной ОСи. Что касается "поточной" связи железа с софтом, как правило применяют сервисы ОС - события, ящики, каналы ... <{POST_SNAPBACK}> Не, в ОС не те потоки. В ОС - это thread'ы. А вопрошающего интересуют те, которые stream'ы. Т.е. потоки ввода/вывода. Которые реализуются на put_char/get_char. И делать их можно как на задачах, так без оных. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Roamer 0 19 мая, 2005 Опубликовано 19 мая, 2005 · Жалоба Спасибо за ответ. Попробую изложить свое видение вопроса. В начале программы, после инита аппаратуры, мы организуем поток при помощи стандартных функций типа open. После этого, получив указатель на структуру типа файл, получаем указатель (адрес в смысле) на буфер ввода-вывода и все атрибуты файла и указатели буфера. В основной петле имеем процедурку, которая собственно и работает с аппаратурой и кладет/забирает данные буфера ввода-вывода и модифицирует указатели буфера. После этого основной процесс, обращаясь к потоку, получит все, что нужно. Я правильно понимаю вопрос, или что-то не так? И еще: в доке на ИАР написано, что программа не должна модифицировать поля переменной типа File. Как же быть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
qwesystemc 0 3 июня, 2005 Опубликовано 3 июня, 2005 · Жалоба Ну так и не надо их модифицировать самому, ведь для этого и есть функции стандартной библиотеки fopen, fclose, ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Brukkel Dmitry 0 6 июня, 2005 Опубликовано 6 июня, 2005 · Жалоба Нужно модифицировать функции __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]; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться