|
|
|
|
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 процессора в этих случаях. |
|
|
|
|