Как стать автором
Обновить

Комментарии 10

А может это в инструкции было? Например в линуксе ядро не сохраняет fpu контекст, и код ядра должен оборачивать вычисления с плавающей точкой в kernel_fpu_begin()/kernel_fpu_end().
Все-таки нет, в данном случае если ты объявляешь функцию как interrupt, то ты ожидаешь от компилятора всех необходимых действий. Контекст задач в операционке тут не при чем. И производители этот баг подтвердили по ссылке выше.
Каких граблей я в своё время только не насобирал делая маленький проектик для PIC-а. И проблемы с документацией к компилятору, и не очевидное поведение компилятора, даже аппаратные баги.
По каким-то неведомым причинам решили всё это писать с использованием компилятора C18. Так вот, очень часто встречалось, что пример из документации отказывался работать. При ближайшем рассмотрении кода примера выяснилось, что там проверяется условие, которое всегда ложно.
Или вот ещё, использовался PIC18F4431, там 8 каналов PWM, я использовал из них только 4, а оставшиеся пины хотел использовать как GPIO. Так эти пины во время работы PWM-а нельзя было установить в единицу. Пришлось лепить костыль: поставить подтяжки к питанию и дёргать TRIS-ы. Настраиваешь пин как вход — у тебя на выходе единица за счёт подтяжки, настраиваешь как выход — нуль. Мы долго смотрели в даташит, но нигде описания подобного поведения не обнаружили. Уж не знаю, может плохо смотрели.
+1, тоже с микрочипом истории есть у меня.
Правда большинство встреченных багов было в в компиляторе, в железке только парочка попалась.
Ну а про доки говорить нечего, да, там ляпов куча.
Хрен с ними с PIC'ами. Если есть подозрение на глюк компилятора в случае gcc x86 на C++ коде, то в 60% случаев это именно так. А если он ни дай бог оптимизирует под AMD процессор, то и все 80%
Бывает что и компилятор глючит. Мы однажды ловили MSVS 2005 на том, что там BitConvert в C# неадекватно с 24 битными изображениями работает. Все остальные работали нормально, а та же процедура работала нормально на 2008 студии. Пришлось работать через 32битные…
Бывает, хотя и значительно реже, чем его в этом обвиняют. Тем интереснее ситуации, когда он глючит на самом деле.
Мне в таких случаях ассемблерный листинг помогает до максимума усеченной проблемы.
На архитектуре x86 тоже такое бывает, если пользоваться MMX одновременно с командами плавающей точки и не использовать инструкцию emms, которая очищает контекст FPU.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории