Пакетне спілкування по 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 |
в останній версії протоколу маркер кінця скасували, та й повільний він у нас протокол.