Я работаю в системе, где MSP430 обменивается данными с другим чипом по своей шине SPI. Я посылаю серию команд настройки через шину SPI и опрашиваю линию готовности ведомого чипа. Я использую IAR в качестве своей IDE и компилирую код без какой-либо оптимизации. Код выглядит примерно так:
for(int i = 0; i < NUM_SETUP_COMMANDS; i++)
{
SendSetupCommand(); //puts data in SPI Tx buffer, sets Chip select low
while(P1IN & 0x40) //wait for Chip ready line to go low
{
for(int x; x < 1024; x++)
{
//do nothing
}
}
HandleReadyLine(); //Transmit/Receive data on SPI bus
}
С и без пустого внутреннего цикла for этот код работает правильно. Все установочные сообщения передаются по шине SPI правильно. Без внутреннего цикла for этот блок кода занимает около 10 секунд. С внутренним циклом for этот кодовый блок занимает около 100 мс.
Кажется, что чтение P1IN как можно быстрее, без внутреннего цикла for, приводит к тому, что P1IN не обновляется так быстро. Есть ли в этом смысл? Есть ли явная причина, по которой добавление / удаление внутреннего цикла for может привести к такому резкому изменению синхронизации?