реклама на сайте
подробности

 
 
> str91 траблы с прерываниями
sergvks
сообщение Jul 6 2007, 12:13
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 251
Регистрация: 26-07-05
Пользователь №: 7 117



Настроены два прерывания от rx уарта и таймера, у уарта приоритет 1, у таймера 2. Таймер генерирует прерывание раз в 1мс. Иногда происходит ложное срабатывание прерывания от уарта(редко) и из буфера читается байт идентичный предыдущему считанному. Вопрос: как с этим бороться ?

PS
При запрещении прерывания таймера всё работает как часы.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Jul 7 2007, 07:38
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(sergvks @ Jul 6 2007, 16:13) *
Вопрос: как с этим бороться ?

Как обычно: отлаживать. Если проблему можно воспроизвести, значит её можно и устранить.
Надо останавливать программу на самом интересном месте (ложное прерывание) и анализировать содержимое стека и переменных. При этом полезно разную отладочную информацию о состоянии программы накапливать в переменных, чтобы было что анализировать.
А насчёт протокола с контрольной суммой и повторными посылками - это, наверное, шутка была. Следуя этой логике, каждый баг программы следует воспринимать как данность и не пытаться его исправить.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jul 7 2007, 16:25
Сообщение #3


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Тут такая область, что не угадаешь правильного способа.
Можно сколько угодно насовать отладочной информации и всяких переменных, но против хардварных багов это ничем не поможет, а пару недель убить легко на такое копание. Возможнор обход с контрольной суммой будет даже более приемлем.

UART-ы и таймера находятся в разных каскадах контроллера прерываний, и таймеры по любому имеют более высокий приоритет. Возможно проблемы с шиной и надо откорректировать тактовую частоту периферии по отношению к системной.


Цитата(scifi @ Jul 7 2007, 11:08) *
Как обычно: отлаживать. Если проблему можно воспроизвести, значит её можно и устранить.
Надо останавливать программу на самом интересном месте (ложное прерывание) и анализировать содержимое стека и переменных. При этом полезно разную отладочную информацию о состоянии программы накапливать в переменных, чтобы было что анализировать.
А насчёт протокола с контрольной суммой и повторными посылками - это, наверное, шутка была. Следуя этой логике, каждый баг программы следует воспринимать как данность и не пытаться его исправить.
Go to the top of the page
 
+Quote Post
sergvks
сообщение Jul 9 2007, 06:28
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 251
Регистрация: 26-07-05
Пользователь №: 7 117



Цитата(AlexandrY @ Jul 7 2007, 20:25) *
UART-ы и таймера находятся в разных каскадах контроллера прерываний, и таймеры по любому имеют более высокий приоритет.


У меня сложилось такое же мнение. Выловил этот глюк так: простенькая программка: прерывание от таймера(перезагрузка + очистка флага) и в прерывании от уарта uart->tx=uart->rx, в main while(1).
Буду играться с частотами, спасибо за совет.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 16:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01384 секунд с 7
ELECTRONIX ©2004-2016