Радиофизика и электроника

Сложное доступным языком

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Как работает буфер COM-порта

E-mail

Буфер (Buffer) - это раздел памяти компьютера, в который сохраняются принятые через COM-порт данные. Размер буфера ограничен, но его можно настроить. Например, если установить размер буфера в 20 байт, то максимальное число хранимых байт будет равно 20. При работе с устройствами, которые обмениваются данными через COM-порт, важно знать принцип работы буфера. Если же вы не понимаете, как он работает, то это грозит потерей важной информации.

Принцип работы буфера

  1. Только что пришедшие данные помещаются в конец списка (буфера). Т.е. новый байт помещается в конец буфера.
  2. Если программа считывает данные из буфера, то она берёт байт с начала списка (буфера). Т.е. самый старый (поздний) байт находится в начале буфера. Прочитанный байт удаляется из буфера, все ранее принятые байты перемещаются на одну позицию вверх.
  3. Буфер имеет ограниченный размер. Иначе говоря размер определяет то число байтов (размер списка), который способен принять буфер. Ситуация, когда весь список заполнен, называется переполнением буфера. Если датчик снова отсылает данные, то байт, принятый позднее всех (он находится в начале списка), удаляется из буфера (происходит потеря информации для пользователя). Все другие байты смещаются на одну позицию вверх. Новый байт, пришедший от датчика, помещается в конец буфера.

Пример работы буфера COM-порта

Рассмотрим работу буфера на примере взаимодействия некоего датчика и компьютера. Датчик отсылает байты, а программа на компьютере считывает их из буфера COM-порта.

  1. Для примера условимся, что размер буфера установлен в 5 байт. В таблице ниже схематически изображён буфер. В левом столбце расположена нумерация ячеек-байтов, а справа - сами ячейки-байты, в которые записываются принимаемые данные. Сейчас буфер пуст.

    1
    2
    3
    4
    5
  2. Датчик передаёт один байт, который в системе ASCII означает цифру 10. Байт помещается в конец буфера. Т.к. буфер пуст, то концом можно считать ячейку № 1:

    1  10
    2
    3
    4
    5
  3. Датчик снова отсылает байт (цифра 6 в системе ASCII). Принятый байт помещается в конец буфера, который теперь находится в ячейке № 2. Здесь цифра 10 - это старая информация, цифра 6 - новая. В данный момент конец буфера находится на ячейке № 3, а начало - в ячейке № 1.

    1  10
    2  6
    3
    4
    5
  4. Теперь наша программа считывает один байт из буфера в переменную x. Считывание происходит с начала буфера, т.е. с ячейки № 1. После считывания байта буфер становится таким:

    1  6
    2
    3
    4
    5

Переменная x = 10. Заметьте, что считанный байт удаляется из буфера. Начало буфера находится в ячейке № 1, а конец - в ячейке № 2.

 

Переполнение буфера

  1. Другой ситуацией можно считать переполнение буфера. Как видно, все ячейки заполнены. Начало буфера находится в ячейке № 1, а конец - в ячейке № 5.

    1  10
    2  6
    3  12
    4  3
    5  1
  2. Датчик отсылает байт (цифра 4 в системе ASCII). Буфер становится таким:

    1  6
    2  12
    3  3
    4  1
    5  4

Цифра 10, которая была получена позднее остальных байтов, потеряна. Все другие цифры (байты) изменили своё положение в буфере: переместились на одну позицию вверх. Принятый байт (цифра 4) занял позицию № 5.

Таким образом наглядно рассмотрены основные случаи при работе с буфером COM-порта. Надеюсь, что информация была полезной и многие из вас смогут применить её в нужной ситуации.


Голосовавших: 1
Обновлено 05.05.2014 20:18  

Яндекс.Метрика www.megastock.ru Здесь находится аттестат нашего WM идентификатора 179710358284
Проверить аттестат