Пакетне спілкування по UART

Ви переглядаєте архів форуму.

Пакетне спілкування по UART
Автор: Nemez () Дата: 29/05/2006 03:33

Питання таке: Як організувати прийом пакетів (пакетів купа і всі різні більше 4 байт) для dsPIC без втрати часу на очікування кожного наступного(их) байтів, тобто обробка перетворення повинна бути без циклів очікування. Є початок пакета, ID пакета та кінець пакета Потрібна порада на рівні алгоритму

Re: Пакетне спілкування по UART
Автор: InsolentS () Дата: 29/05/2006 04:28

Можна зробити змінну, в якій зберігається поточний номер прийнятого байта з пакета, винести прийом одного байта в переривання (де номер байта інкрементуватиметься) і в маїні перевіряти: якщо кількість прийнятих байтів дорівнює довжині пакета, то (робити) та обнулювати змінну. Якщо кількість байтів різна у кожному пакеті, можна зробити логічну змінну (нр Bytes_Ok) і перевіряти її. Можна додати тайм-аут: якщо протягом якогось часу кількість байтів не інкрементується, і кількість байтів > 0, кількість байтів = 0 + генерація помилки.

Re: Пакетне спілкування по UART
Автор: Nemez () Дата: 29/05/2006 05:05

Re: Пакетне спілкування по UART
Автор: InsolentS () Дата: 29/05/2006 05:45

Перевіряй в обробці, які проблеми: якщо прийшов кінець пакету, то обробка, інакше вихід з переривання. Який компілятор? Асм?

Дякую
Автор: Nemez () Дата: 29/05/2006 05:48

Дякую, розібрався А компілер С30

а в нас так
Автор: dynaco () Дата: 29/05/2006 08:53

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

по прийому маркера початку (якщо не був уже маркер початку незакритий) зчитуємо хидер. запускаємо лічильник прийнятих байтів і останнім очікуємо на маркер кінця. Якщо таки коли належить прийшов маркер кінця - вважаємо СРС і порівнюємо з цифрою з хідера.

http://www.dynaco.h10.ru/cap_bug.html - черговий черневічок. Якщо будуть думки та міркування. буду радий конструктивній критиці

а я ще підтвердження
Автор: Alich () Дата: 29/05/2006 10:34

маркера приймаю – після цього довжина.

Як ви маркер визначаєте?
Автор: InsolentS () Дата: 29/05/2006 11:09

Зошити з ASCII символів склеюєте?

так чого ж простіше - він позначений як 0хFE
Автор: dynaco () Дата: 29/05/2006 11:26

і для початку і для кінця

та й тайм є для скидання. ну наприклад якщо немає 300мс жодного байта на вході - все скинути і чекати маркер початку, якщо прийшов не маркер - ігнорувати до приходу маркера. Якщо маркер почала прогавити, то зловиться маркер кінця за яким буде пауза, ну а потім таймаутом воно скинеться

http://www.dynaco.h10.ru/cap_bug.html - черговий черневічок. Якщо будуть думки та міркування. буду радий конструктивній критиці

А якщо це буде не маркер, а просто лівий байт 0xFE з якогось пакета?
Автор: InsolentS () Дата: 29/05/2006 12:41

Чи вся фішка у затримці 300мс? Але ж швидкість тоді вийде 3 пакети/с, чи я чогось не наздоганяю?

Re: А якщо це буде не маркер, а просто лівий байт 0xFE з якогось пакета?
Автор: dynaco () Дата: 30/05/2006 01:35

в останній версії протоколу маркер кінця скасували, та й повільний він у нас протокол.