Здравствуйте. Осваивая Blackfin (532) и VisualDSP, столкнулся со странной проблемой. При отключенной оптимизации кода программа работает именно так, как ожидается. При включенной оптимизации (100% Speed) наблюдается частичная неработоспособность. Программа написана на С. В результате анализа работы при помощи симулятора выяснилось, что неправильно работает подпрограмма обработки прерываний, в которой имеется несколько вложенных вызовов подпрограмм. В одну из них параметр передается в регистре R0. Из нее выполняется вызов другой п/п, которая к этому параметру никакого отношения не имеет. Она искажает R0, а затем искаженное значение используется в вызывающей программе. На первый взгляд кажется, что неправильно работает оптимизатор: не учитывает использование регистров во вложенных подпрограммах. Но, возможно, я чего-то недочитал и есть способ вразумить оптимизатор? Не знает ли кто способ решения описанной проблемы? Отключать оптимизацию не хочется, во многих местах от нее существенная польза.
|