Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Я ж нарисовал заполнение буфера строки - getline(char * buf)

Отправлено Vit 27 сентября 2009, г. 10:33
В ответ на: Ответ: (+) отправлено пользователем S 27 сентября 2009, г. 10:12

ожидающая функция getchar() возвращает символ из потока (из буфера UART-а) или ошибку, если поток отвалился и т.п., при этом пустой буфер не считается ошибкой и производится ожидание. Неожидающая же возвращает соответствующий код ошибки при пустом буфере. Так как в МК обычно поток (UART) назначается и практически не используется его освобождение, то коды ошибок бывают типа "переполнение буфера UART-а", превышен таймаут, ну и коды ошибок из UART-а (FE/PE/BREAK). Все эти коды удобно передавать в знаковом int, а не char.
При неожидающей функции getchar() в getline() можно делать выход с соответствующим кодом возврата, типа

ch = getchar();
if(ch < 0) return -2;

но тогда len придётся делать статической и придумывать как её обнулять.
Например, с помощью передачи в ту же getline указателя не на строку, а NULL

int getline(char* buf){
int ch;
static int len = 0;
if(!buf){ // buf == NULL
len = 0;
return -3;
}
...
}


Составить ответ | Вернуться на конференцию.

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 45:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru