Сб ноя 25, 2017 17:45:16
#include <avr/io.h>
#include <avr/interrupt.h>
volatile unsigned char stage = 0;
ISR(TIMER0_COMPA_vect)
{
switch(stage)
{
case 0:
PORTB |= (1<<PORTB0);
break;
case 1:
PORTB &= ~(1<<PORTB0);
break;
case 2:
PORTB |= (1<<PORTB1);
break;
case 3:
PORTB &= ~(1<<PORTB1);
break;
default:
break;
}
if(++stage == 4)
stage = 0;
}
int main(void)
{
CLKPR = 0x80;
CLKPR = 0;
DDRB |= ((1<<DDB1) | (1<<DDB0));
//10us
//Tt0 = 1/(Fcpu/k) = 1/(8000000/1) = 0,000000125s = 0,000125ms
//n = t/Tto - 1 = 0,010/0,000125 - 1 = 79
// Set the Timer Mode to CTC
TCCR0A |= (1<<WGM01);
TCCR0B |= (1<<CS00);
OCR0A = 79;
TIMSK0 |= (1<<OCIE0A);
//comp. disable
ACSR |= (1<<ACD);
sei();
for(;;)
{
}
}
Пн дек 04, 2017 05:40:56
Вс янв 07, 2018 17:18:23
while(!(TWCR & (1 << TWINT)));
Вс янв 07, 2018 17:44:49
NebelWefer писал(а):если по какой-то причине флаг не поднимется, то вся программа повиснет навсегда.
стоит ли вводить выход после некой задержки?
Вс янв 07, 2018 17:50:44
while(!(TWCR & (1 << TWINT)));
Вс янв 07, 2018 17:53:55
Вс янв 07, 2018 18:04:35
если в программе единственное место, где она может зависнуть - да, понятно. а если не одно - не понятно.Demiurg писал(а):Если прибор не критичен, то можно и забить. Тем более, если на I2C шине одно устройство висит. Если программа зависла, то понятно почему.
Вс янв 07, 2018 18:31:54
Вс янв 07, 2018 18:39:23
Вс янв 07, 2018 18:53:17
Вс янв 07, 2018 18:59:30
Вс янв 07, 2018 19:13:48
например, вы сделали своей бабушке электронную прялку - что она будет делать, увидев "ошибка E8FF" на дисплее?Demiurg писал(а):у прибора на дисплей выводится соответствующая ошибка.
Вс янв 07, 2018 19:37:25
Вс янв 07, 2018 20:40:25
я смотрю исключительно однобоко.Demiurg писал(а):Вы не смотрите однобоко...
и что? что должен сделать потребитель вашего промприбора? вот вижу я BSOD - и толку? или вижу, что "программа выполнила недопустимую операцию и будет закрыта" - что с того, как это мне облегчает жизнь?!Demiurg писал(а):Если выскочила ошибка "ERRORx", что означает, что пропала связь с клавиатурой, то сразу понятно, что с прибором.
и такие советы вы даете тем, кто применяет ваши приборы? например, управление тормозами - ничего, поехали дальше! подумаешь - связь с педалью пропала, это же единичный (может быть!) случай!Demiurg писал(а):Это может быть единичная ошибка, перезапустили прибор, поехали дальше.
см. выше - WDT и сообщение о том, что прибор пора в ремонт (или в помойку). вот и вся обработка "ошибок". самая надежная, самая лучшаяDemiurg писал(а):Хотя бы уже сразу понятно, что прибор сломан
Вс янв 07, 2018 20:59:36
то есть вы считаете, что избавившись от зависания "программно" (т.е. не устраните причину, а просто научитесь её обходить), вы сделаете лучше?
Вс янв 07, 2018 21:06:22
ARV писал(а):...
Вс янв 07, 2018 21:15:39
А если сломался сам МК?NebelWefer писал(а):я считаю, что споткнувшись в одном месте программа не должна валиться вся.
Вс янв 07, 2018 21:32:27
Вс янв 07, 2018 21:41:46
Пн янв 08, 2018 00:33:14