В STR91x очень много чудес возникает если неправильно выставлять частотные режимы работы памяти и периферии.
Внимательно посмотрите какие частоты у MCLK, BCLK, HCLK, PCLK, RCLK и сверьте с допустимыми величинами из даташита.
Также если что не так очень любит отрубаться контроллер прерываний. Поэтому еще раз внимательно проверить во всех ли обработчиках читаются и сбрасываются вектора в VIC0 и VIC1.
NOP в принципе может влиять на прогу которая читает упакованные данные из FLASH. В частности функция memcpy чувствительна к выравниванию перемещаемых данных.
Цитата(sergvks @ Jul 30 2007, 13:32)

Стал оптимизировать одну функцию. Время выполнения измеряю таймером типа:
time=0;//инкремент в прерывании таймера
for(n=0;n<100000;n++)
{
my_func();
}
while(1);//тут брейкпоинт
Заметил, что добавление NOP в самом начале, что вызывает просто сдвиг проги в памяти, может приводить к изменению производительности до 3.5%. И ещё :
SPI->DR=data;
while(!(SPI->SR&SPI_TX_FIFO_not_full));
При попадании этого while на определённые адреса проц на нём зацикливается, добавляем в прогу NOP и всё опять работает. Отсюда вопрос - это что работа конвеера??? Может выравнивание какое надо включить в компиляторе, я уже не знаю, поскажите pls.
