Переповнення буфера: причини, ефективні методи вирішення проблеми і необхідний захист

Переповнення буфера комунікаційного порту

Іноді послідовний порт повідомляє про переповнення buffer. Ця проблема може бути викликана кількома чинниками. До них належать швидкість комп’ютера, швидкість передачі використовуваних даних, розмір FIFO послідовного порту і розмір FIFO пристрою, який передає дані на послідовний порт.

Управління потоком буде чекати, поки в буфері не з’явиться певна кількість байтів, перш ніж процесор відправить повідомлення або сигнал іншого пристрою для припинення передачі. При більш високих швидкостях передачі послідовний порт буде отримувати кілька байтів з моменту досягнення рівня управління потоком буфера і припинення передачі приладу.

Ці додаткові байти будуть більше, якщо процес з високим пріоритетом контролює процесор цілі в реальному часі. Оскільки процес переповнення буфера комунікаційного порту має більш високий пріоритет, ніж переривання VISA, процесор не буде вживати ніяких дій, поки не буде завершено в реальному часі.

Налаштування VISA і Windows за замовчуванням для 16-байтового FIFO складають 14 байтів, залишаючи 2 байта в FIFO, коли пристрій намагається відправити повідомлення від джерела. При більш високих швидкостях передачі на повільних комп’ютерах можливо отримати більше 4 байтів в момент, коли послідовний порт запитує процесор, посилаючи сигнал про припинення передачі.

Щоб вирішити проблему, коли виявлено переповнення стека буфера в Windows 10, потрібно відкрити диспетчер пристроїв. Потім знайти COM-порт, для якого змінюють налаштування, і відкрити властивості. Далі натискають на вкладку «Додатково», з’явиться повзунок, яким змінюють розмір переповнення буфера обміну, щоб UART швидше включив управління потоком.

Значення за замовчуванням у більшості випадків достатньо. Однак якщо надходить помилка переповнення buffer, зменшують значення. Це призведе до того, що більша кількість переривань буде відправлено процесору з уповільненням байтів в UART.