|
|
 |
Ответов
|
Feb 27 2006, 02:41
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(aaarrr @ Feb 26 2006, 23:50)  Цитата(defunct @ Feb 26 2006, 23:43)  А зачем вложенные прерывания делать?! Специально чтобы работало неправильно?
Можно подумать, будто использование вложенных прерываний на ARM кто-то объявил вне закона  Встречный вопрос: поясните, почему неправильно? я не говорю, что неправильно (в постах выше было сказано, что работает неправильно - затыкается таймер). Использование вложенных прерываний значительно усложняет структуру программы, и требует особой внимательности при проектировании программы. Любая неточность при проектировании может привести к тому, что устройство, выполнение обработчика прерывания которого было отложено на случайной команде, может сгенерировать уже следующее прерывание. А это следующее прерывание может потребовать совсем иной обработки, а вернувшись назад к отложенному обработчику мы это учесть не сможем. Собственно, что похоже и имеет место у уважаемого Master 'a: Цитата У меня так же перестают отрабатывать прерывания через некоторое время после запуска.
|
|
|
|
|
Feb 27 2006, 10:02
|
Частый гость
 
Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405

|
Цитата(defunct @ Feb 27 2006, 05:41)  я не говорю, что неправильно ... Давайте по порядочку. Цитата Использование вложенных прерываний значительно усложняет структуру программы Разве? По мне, так наоборот упрощает. Особенно когда прерывание занимает некоторое время, в течение которого может произойти событие, которое необходимо наверняка обработать. В простейшем случае нужно лишь увеличить соответствующий стек. Цитата и требует особой внимательности при проектировании программы Не надо сгущать краски, любая программа требует внимательности! Точка. Цитата Любая неточность при проектировании может привести к тому, что устройство, выполнение обработчика прерывания которого было отложено на случайной команде, может сгенерировать уже следующее прерывание. Согласен. Но кто мешает написать обработчик, который не допустит срабатывание другого прерывания на СЛУЧАЙНОЙ команде?? Соответственно, пишем код грамотно. Цитата похоже и имеет место у уважаемого Master 'a Спасибо за уважение. Однако мой случай несколько разнится с обсуждаемым. Моя проблема состоит в том, что программа работает, прерывания происходят, входные сообщения UART'а обрабатываются, но через некоторое время прерывания перестают обрабатываться, и дело, как выяснилось, не во вложенности - проверил путём запрещения прерываний перед выполнением функции внутри обработчика прерывания: вместо Код msr CPSR_c, #ARM_MODE_SYS сделал Код msr CPSR_c, #I_BIT | ARM_MODE_SYS Возможно, стоит создать отдельную ветку...
|
|
|
|
|
Feb 27 2006, 11:33
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Master @ Feb 27 2006, 12:02)  Цитата(defunct @ Feb 27 2006, 05:41)  я не говорю, что неправильно ...
Давайте по порядочку. Цитата Использование вложенных прерываний значительно усложняет структуру программы Разве? Конечно! Если вам кажется, что наоборот, так это только кажется. Цитата По мне, так наоборот упрощает. Особенно когда прерывание занимает некоторое время, в течение которого может произойти событие, которое необходимо наверняка обработать. Для такого редкого и важного события существует FIQ. Для всех остальных - IRQ. Цитата Согласен. Но кто мешает написать обработчик, который не допустит срабатывание другого прерывания на СЛУЧАЙНОЙ команде?? Соответственно, пишем код грамотно. Вы уже продемонстрировали, как надо правильно писать обработчик (и вам ведь никто не мешал), странно только почему же прерывания затыкаются? может все-таки что-то не учитытваете? Цитата Моя проблема состоит в том, что программа работает, прерывания происходят, входные сообщения UART'а обрабатываются, но через некоторое время прерывания перестают обрабатываться, Проблема была ясна еще из предыдущего поста, зачем же повторяться? ;> Цитата и дело, как выяснилось, не во вложенности - проверил путём запрещения прерываний перед выполнением функции внутри обработчика прерывания: А в чем же тогда? Не бывает ничего просто так. Проблему ищите только в обработчиках. PS: Если мой пост вам покажется грубым, извините я сегодня очень "не в духе", если можно так выразиться..
Сообщение отредактировал defunct - Feb 27 2006, 11:38
|
|
|
|
Сообщений в этой теме
Artem Проблемы с таймером в AT91SAM7S64 Feb 26 2006, 05:53 aaarrr Проверьте в листинге, действительно ли происходит ... Feb 26 2006, 09:55 Master Цитата(Artem @ Feb 26 2006, 08:53) Не пол... Feb 26 2006, 16:23 DASM народ, а нафига вы разрешаете прерывания до выхода... Feb 26 2006, 16:28 aaarrr Как зачем? А как иначе вложенные прерывания делать... Feb 26 2006, 16:33 defunct Цитата(aaarrr @ Feb 26 2006, 18:33) Как з... Feb 26 2006, 20:43 DASM да, только по-моему вложенные не нужны тут были.. Feb 26 2006, 16:35 aaarrr Цитата(defunct @ Feb 27 2006, 14:33) Вы у... Feb 27 2006, 13:55 defunct Цитата(aaarrr @ Feb 27 2006, 15:55) Утвер... Feb 28 2006, 01:59 aaarrr Цитата(defunct @ Feb 28 2006, 04:59) Даже... Feb 28 2006, 02:51 defunct Цитата(aaarrr @ Feb 28 2006, 04:51) Не по... Feb 28 2006, 05:08 Artem Не понял, что имеется в виду - запись в AIC_EOICR
... Feb 28 2006, 05:06 Artem проблема то может и "прозрачная", но я т... Feb 28 2006, 05:23 aaarrr Цитата(defunct @ Feb 28 2006, 08:08) Имее... Feb 28 2006, 08:29
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|