IBAH (03.01.2018 10:58 - 11:31, просмотров: 324) ответил AlexBi_ на Такая запись if(10 == a) считается полезной тем, что если забудешь один = будет ошибка if(10 = a)
Понятно... жертвуем эффективностью в угоду безопасности... По второму вопросу я имел в виду: есть ли Пика команда "сравнить с 0", или 0 такая же константа как и все остальные? А контролер прерываний мне выносит моск!
В прерывании таймера модифицируется лонг переменная, в фоновой задаче, при использовании переменной, что правильнее запрещать? Прерывания таймера? Манипуляции с разрешением прерывания таймера не сбрасывают флаг прерывания?
В обработчике прерываний кодегенератор нагенерил проверку флагов разрешения прерываний, зачем?
в этих ваших интернетах делают тоже самое
/*################################################
* ОБРАБОТЧИК ПРЕРЫВАНИЙ с ВЫСОКИМ ПРИОРИТЕТОМ
*/
void interrupt high_isr (void)
{
if (PIR1bits.TMR1IF && PIE1bits.TMR1IE) // Проверка на нужный нам флаг.
{
PIR1bits.TMR1IF = 0; // Сбросили флаг прерывания по TMR1
/* Скорость таймера:
* PORTBbits.RB0 = 0 (кнопка нажата) -> медленно.
* PORTBbits.RB0 = 1 (кнопка отжата) -> быстро.
* TMR1 сбрасывается на 0x0000 при переполнении,
* поэтому необходимо TMR1 устанавливать заново при каждом переполнении счетчика
*
* Скорость таймера:
* 16 000 000 / 4 / 8 / (65535 - 0) = 7,6 Hz (медленно)
* 16 000 000 / 4 / 8 / (65535 - 61440) = 122 Hz (быстро)
*/
if (PORTBbits.RB0) TMR1 = 0xF000;
LATD = PORTD + 1;
} //if (PIR1bits.TMR1IF && PIE1bits.TMR1IE)
} // high_isr END
вот
if (PIR1bits.TMR1IF && PIE1bits.TMR1IE)