IV (24.11.2006 13:07, просмотров: 6378)
знатокам связки арм7 и укоса посвящается проц tms470. подозреваю, что на других армах тоже есть вероятность сего глюка..
вобщем эпопея началась с того, что проц иногда падал в исключение причем с разными временными интервалами от 10мин. до часа..
установками бряков на критичные участки кода выяснил, что попадает в прерывание с регистром смещения для вектора = 0, что в принципе быть не должно.. но это еще пол-беды.
при выходе из прерывание падает в тумб!! ну и есс-но попадает в исключение.. весь проект в арм режиме..
вобщем стал ковырять возврат из прерывания.. стек при выходе оказался смещен на 4 байта! непонятно почему..
методом научного тыка проблему конечно устранил..
системный таймер был на fiq, переключил на irq. глюк исчез..
но непонятна причина явления..
шестым чуством чую, то где-то есть наложение fiq на irq, но доказать не могу.. в укосе же в прерываниях в cpsr они ЗАПРЕЩЕНЫ!! или я не прав? у меня в проге нигде внутри прерываний не разрешаются.. переменная IntNesting не превышает 1.. смотрел во всех критичных местах..
один раз было вобще непонятно что.. отладчиком попадаю как раз в то прерывание, после которого падает в тумб.. НО все сработало нормально !! что-то там щелкнуло (виртуально) и выпал в идл таск.. после этого проц простоял несколько часов, пока я ему прогу не перешил.. надоело ждать..
кто что присоветует? не дайте дураком помереть! у меня с tms470 уже личные счеты.. =))
PS стеки задач не переполняются, стеки irq fiq не переполняются.. проверено.. никакие переменные в стеки задач тож не лезут..