Свежие обсуждения
Микроконтроллеры

Ликбез по С для микроконтроллеров PIC

1 48 64

Left Radio: Как вы с ним боритесь?
А никак, если эту функцию вызывать всего несколько раз за секунду, то дребезга мы просто не заметим.
Я тот пост немного редактировал.

 

GM: Я кусочек вашей программы модернизировал, остальное по аналогии можно сделать

out1: if(key4){.if(cond1) oper1();.else.{..if(cond2) oper2();..else..{...if(cond3) oper3();...else if(cond4) oper4();..}.}}out2:
Понятно, спасибо большое. Т.е. пишем if( ) ... else if( ) ... else if( ) ... else ... . Видимо, у меня просто сказалась некоторая "однобокость мышления" и поэтому я так не написал. Хотя постоянно запись подобного вида встречаю. Еще раз спасибо. (несмотря на это еще раз скажу, что код у меня практически "вылизан" в плане правильного алгоритма и размера.)
GM: (В начале строк поставил точки вместо пробелов, скипа переформатирует, невзирая на теги пре, надо Andy сказать)
Я так и не понял как действует тег pre и пока редактировал свое пред. сообщение, то употребляя этог тег получал разные чудеса в виде "расширенной" на всю длину одной строки страницы(т.е. пока в тексте не встретится возврат каретки, то расширяемся насколько можно) и еще разные непонятные вещи. Еще раз спасибо.

 

AleksBak: Понятно, спасибо большое.
А можно для очень начинающих очень понятно рассказать, что делает эта конструкция?..

 

SAK: А никак, если эту функцию вызывать всего несколько раз за секунду, то дребезга мы просто не заметим.
Я тот пост немного редактировал.

Кстати и у меня аналогично сделано - т.е. 2 раза в секунду появляется прерывание #int_rb от часовой м/с DS1307 на одной из линий RB7...RB4 (процессор как писал PIC16F876A, в других МК другие соотв. линии для подобного прерывания). Я подумал зачем добавлять тут антидребезг? Т.е. просыпаемся, проверяем какие кнопки нажаты(в п/п) и обрабатываем все и соотв. индикацию в т.ч.(в майне), а в конце обработки опять разрешаем прерывания . Т.е. в данном конкретном случае "антидребезг" не нужен. В других случаях, в частности когда прерывание именно от нажатой кнопки происходит, считаю что нужен "антидребезг".

 

Vladikas: А можно для очень начинающих очень понятно рассказать, что делает эта конструкция?..
Т.е. у меня было:
if (проверка условия1) {что нужно делаем1; goto на конец п/п} и опять далее проверял if (проверка условия2) {что нужно делаем2; goto на конец п/п} и т.д. . А нужно было(по правилам "хорошего тона") писать: if (проверка условия1) {что нужно делаем1;} else if (проверка условия2) {что нужно делаем2;} и т.д. до конца(туда куда мы выходили в первом варианте в конце каждой из проверок). Т.е. убрали переход и добавили else.

 

SAK: ...if (dest=0){counter=0; return;}......

Ну нельзя же так издеваться , я минут 20 сижу и думаю чи я дурак, чи компилер свихнулся. Не работает и все.
Вот так надо: if (dest == 0){counter=0; return;} .

 

Да, именно так и надо! Это я напортачил. Для меня основной язык Паскаль, вот и занесло.

 

AleksBak:


#int_rb
void detect_rb()
{
.//key=0; зачем эта строка? Вроде она лишняя.
.key=(input_b()^0x0f)&0x0f;
.if(!alarm6)
..{
...if(!mig && !alarm7)
....{
.....if(key1)
.......if(!migall) migdow =1;
........else { migall<=1;if(mig) migall=0;}
.....if(key4)
.......if(!alarm1) {alarm1=1;migall=0;bit_set(migall,(dow-1));}
........else
.........if((alarmall&0x0f)==0x01) alarm2=1;
..........else
...........if(alarm2) {alarm2=0;alarm3=1;}
............else
.............if(alarm3) {alarm3=0;alarm4=1;}
..............else if(alarm4) {alarmall=0x00;migall=0;}
....}
..}
.migall^=0x80; //if(mig) mig=0; else mig=1;
}
/pre>

 

Left Radio: Вот так надо: if (dest == 0){counter=0; return;} .
можно и так
if (!dest){counter=0; return;}

 

Арс: .//key=0; зачем эта строка? Вроде она лишняя.
Спасибо за разъяснения, но вот все-таки кажется мне, что убирая в некоторых местах goto - например когда в длинной проге, вначале проверяется какое-то условие(например переход на отображение будильников) и если оно истинно - переходим, то обрамляя круглыми скобками обе половинки(а они большие в несколько строк экрана) и еще посередине у нас будет добавлено не очень заметное else, то мы рискуем потерять читабельность кода. Все равно в ассм. листинге компилятор будет использывать команду goto процессора в этих случаях.