Как ведет себя программа, если задать массив фиксированной длины uint8_t first[9];
Или если обращаться как к указателю
uint8_t *first = ...
*(first+5) = 1;
Вечером воскресного дня как-то не въехал - в чем проблема-то?COKPOWEHEU писал(а):Там вроде проблема даже с прямым обращением к массиву.
Как ведет себя программа, если задать массив фиксированной длины uint8_t first[9];
Или если обращаться как к указателю
uint8_t *first = ...
*(first+5) = 1;
Я вот про эту цитату, стоит разобраться где здесь баг.Даже такая простая операция выдаёт: first = 0 1 2 3 0 0 0 0 0Код: Выделить всё
D2printf("first = "); for(i=0;i<9;i++) { first[i] = i; D2printf("%u ", first[i]); } D2printf("\n");
новые данные накладываются на старыеDataLife писал(а): если добавить очистку дисплея после каждого преобразования, то данные на дисплее станут более правдопадобными.
Код: Выделить всё
eeprom int Zpos= 10000; //заданное положение
int Apos=0; //актуальное положение
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0x83;
if (Apos==Zpos)
{MOTOR_ENABLE=0;}
else
{
if (Apos<Zpos)
{
MOTOR_DIRECTION=1;
MOTOR_ENABLE=1;
MOTOR_STEP=1;
delay_us(5) ;
MOTOR_STEP=0;
Apos++;
}
else
{
MOTOR_DIRECTION=0;
MOTOR_ENABLE=1;
MOTOR_STEP=1;
delay_us(5) ;
MOTOR_STEP=0;
Apos--;
}
};
}





ну так вы закончили цикл в момент, когда OCR2==0xFF, а потом входите в цикл снова и увеличиваете OCR2 на 1. что будет если к байту 0xFF прибавить 1? байт станет равным 0.DataLife писал(а):1. Почему OCR2 сбрасывается?
элементарно:DataLife писал(а):2. Как это исправить?
Код: Выделить всё
while (ADC_shunt() <= ("условие"))
{
if (OCR2==0xFF) break;
OCR2=OCR2+0x01;
}