DmitriyX 0 21 июня, 2007 Опубликовано 21 июня, 2007 · Жалоба Есть проект, написанный на F2811 процессоре. Реализовано на базе DSPBIOS. Программой используется в процессоре: GPIO, CAPTURE, PWM, SPI. Работают прерывания от SPI и от CAPTURE, используется диспетчер DSPBIOS для обработки. Присутствует три таска. Когда работает таск, управляющий ШИМ на основе результатов вычисления в прерывании от CAPTURE, наблюдается хаотическое зависание, т.е. зависание через разные промежутки времени: может через 30 сек, может через 10 мин. После зависания не запускается даже PRD_func, а программный счетчик находится на функции FXN_f_self_loop, ассемблерная инструкция которой прыгает сама на себя бесконечно. Кто-нибудь сталкивался с проблемой, когда программа прыгает на FXN_f_self_loop? Кто-нибудь знает возможные причины попадания программы на эту функцию? Спасибо заранее Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lapunou 0 22 июня, 2007 Опубликовано 22 июня, 2007 · Жалоба что-то похожее у меня. задал вопрос в соседнем форуме Процессоры - Processors. если разберетесь что было у вас раскажите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitriyX 0 25 июня, 2007 Опубликовано 25 июня, 2007 · Жалоба что-то похожее у меня. задал вопрос в соседнем форуме Процессоры - Processors. если разберетесь что было у вас раскажите. Причина зависания стала понятна, найден способ прикрыть эту дыру, но не найден способ полного устранения источника проблемы. На FXN_f_selfLoop программа прыгала у меня в случае когда возникало прерывание, для которого не был назначен обработчик в DSPBIOSe, стояло по умолчанию HWI_unused. Возникало прерывание PIE_INT_5_1, согласно документации, это прерывание при периоде таймера GPT4 в Event Manager B. Самое интересное, что я это прерывание никак не разрешаю. Прерывание возникает даже если таймер GPT4 заблокирован и его значение не изменяется. Проблема решилась установкой обработчика прерывания вместо HWI_unused на пустую функцию возврата, содержащую лишь PieCtrlRegs.PIEACK.bit.ACK5 = 1 (работает без диспетчера). Не ясно, откуда возникает прерывание от таймера, который во-первых стоит, а во-вторых прерывания от него запрещены. Прерывание от GPT4 возникает в среднем раз в 10 минут. Все это происходит при частоте прерываний модуля Capture 52 КГц. Если понизить частоту до 3 КГц, то ни одного ложного прерывания не наблюдалось. Тоже интересный факт. Не исключено, что время от времени и другие ложные прерывания могут возникать. Поэтому для неиспользуемых прерываний вместо HWI_unused буду ставить FXN_f_nop с использованием диспетчера или что-нибудь подобное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться