Цикл без asm("nop") не работает

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Ellissar
Встал на лапы
Сообщения: 135
Зарегистрирован: Чт май 09, 2013 10:50:04

Цикл без asm("nop") не работает

Сообщение Ellissar »

Столкнулся с проблемой при отладке программы в Atmel studio 6.2
если код выглядит так, то всё работает нормально

Код: Выделить всё

    while(1)
    {
		if (millis - prevMillis > 20)
		{
			prevMillis = millis;
			PORTC ^= (1<<5); //инверсия одного бита	
		}
		asm ("nop");
    }
но если из цикла выкинуть asm ("nop"); то светодиод не моргает. В чём проблема?

Код: Выделить всё

    while(1)
    {
		if (millis - prevMillis > 20)
		{
			prevMillis = millis;
			PORTC ^= (1<<5); //инверсия одного бита
		}
    }
Хочу разобраться с этим чтоб небыло проблем в будущем.
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Цикл без asm("nop") не работает

Сообщение pyzhman »

Код: Выделить всё

millis - prevMillis > 20
Скобки не забыли? На самом деле, наверное, должно выглядеть так:

Код: Выделить всё

(millis - prevMillis) > 20
Docendo discimus
Реклама
Ellissar
Встал на лапы
Сообщения: 135
Зарегистрирован: Чт май 09, 2013 10:50:04

Re: Цикл без asm("nop") не работает

Сообщение Ellissar »

Попробовал ваш вариант со скобками, но как и думал это ничего не изменило. Скобки ведь ничего не меняют здесь.
BorisSPB
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

Re: Цикл без asm("nop") не работает

Сообщение BorisSPB »

millis должна быть volatile
Реклама
Эиком - электронные компоненты и радиодетали
Ellissar
Встал на лапы
Сообщения: 135
Зарегистрирован: Чт май 09, 2013 10:50:04

Re: Цикл без asm("nop") не работает

Сообщение Ellissar »

volatile помогло, но почему так происходит? Хочу разобраться.
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Цикл без asm("nop") не работает

Сообщение Аlex »

Реклама
Ellissar
Встал на лапы
Сообщения: 135
Зарегистрирован: Чт май 09, 2013 10:50:04

Re: Цикл без asm("nop") не работает

Сообщение Ellissar »

Спасибо. Вроде бы понял.
AlphaLaiman
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Ср ноя 27, 2013 21:28:40
Откуда: Москва

Re: Цикл без asm("nop") не работает

Сообщение AlphaLaiman »

А почему тогда это работает с #asm "nop"?
Kinder_Surprise
Открыл глаза
Сообщения: 49
Зарегистрирован: Вс июн 07, 2015 20:45:22

Re: Цикл без asm("nop") не работает

Сообщение Kinder_Surprise »

Политика оптимизатора, АСМ не должен оптимизироваться. Вставив #asm "nop" вы указали оптимизатору, что содержимое while не просто так. Без АСМа оптимизатор посчитал код ненужным и просто его выкинул. Но правильнее будет с volatile.
Ответить

Вернуться в «Разные вопросы по МК»