Страница 241 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн фев 18, 2013 18:47:31
Аlex
Потому, что после выполнения каждого условия, программа попадает на следующее, и оно выполняется.
Используйте switch-case или else if.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн фев 18, 2013 21:14:57
unalex
мне кажется изза того, что при приеме нового бита переменная temp сбрасывается, попробуйте объявить ее как static
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн фев 18, 2013 22:11:00
ibiza11
+1
Alex и +1
unalex 
оба правы.
Код: Выделить всё
// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
static unsigned char temp;
switch(temp)
{
case 0:
ru = UDR;
temp = 1;
break;
case 1:
gu = UDR;
temp = 2;
break;
case 2:
bu = UDR;
temp = 0;
break;
default:
break;
}
}
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн фев 18, 2013 22:32:56
Аlex
temp у него явно не локальная, т.к. в области видимости ф-ии, моим зрением, не обнаруживается
Valek3306 писал(а):Код: Выделить всё
// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
if(temp == 0){temp = 1; ru = UDR; };
if(temp == 1){temp = 2; gu = UDR; };
if(temp == 2){temp = 0; bu = UDR; };
}
Из этого следует, что она не может сбрасываться

Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт фев 19, 2013 06:11:12
unalex
мыслю абстрактно - не вседа в форум пастят весь кусок функции
Valek3306 писал(а):каждая посылка заносятся в переменную ru
а вот одну мою опечаточку - бит != байт заметил только что

Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт фев 19, 2013 07:15:18
ibiza11
В общем, думаю автор уже разобрался.
PS/ Вопрос про точку с запятой в конце строки:
if(temp == 0){temp = 1; ru = UDR; } ;
Это допустимо? разве круглые скобки не завершают оператор
if?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт фев 19, 2013 10:37:44
Совесть
Этот вопрос вы могли бы проверить сами, в течении пары минут. В данном случае все корректно.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт фев 19, 2013 11:09:56
unalex
если компилятор не ругается - это не значит корректно
точка с запятой там не нужна
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт фев 19, 2013 12:39:09
Совесть
"если компилятор не ругается - это не значит корректно" - а что не так в этой записи? чему она противоречит? вашему стилю написания программы?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт фев 19, 2013 12:40:47
ibiza11
Совесть писал(а):Этот вопрос вы могли бы проверить сами, в течении пары минут.
Мог бы - не спрашивал бы. Не было компилятора под рукой. Сейчас проверил - ни ошибок ни предупреждений.
Но смысл так писать? Новый стандарт Си?)))
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт фев 19, 2013 12:53:18
Совесть
В чем отличие от используемого ВАМИ стандарта? В каком из стандартов Си данная запись будет ошибочна?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт фев 19, 2013 12:53:51
Аlex
Точка с запятой является разделителем. Если разделять нечего, то этот символ является пустым оператором. Его можно ставить в любом "пустом" месте, между конструкциями.
Так-же, прокатит такая конструкция:
Это если не хочется ставить НОП, и не хочется else сносить. Компилятором он (else) будет отброшен.
Так что стандарт не запрещает его ставить ни после скобок, ни до, ни стопицот раз подряд.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт фев 19, 2013 13:21:34
ibiza11
Совесть писал(а):В чем отличие от используемого ВАМИ стандарта? В каком из стандартов Си данная запись будет ошибочна?
Вы случайно по национальности не еврей? Я вопросы задал, Вы, не ответив на мои, мне свои задаете.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт фев 19, 2013 13:54:18
Совесть
Ок. Отвечу.
"Но смысл так писать?" - это всего лишь стиль записи, кому как удобнее. Каждый выбирает для себя свой, либо подстраивается под требуемый.
"Новый стандарт Си?)))" - чтобы ответить на этот вопрос, надо узнать ваши познания в стандартах Си, т.е. относительно чего он может быть новым. Ради чего и были заданы два наводящих вопроса.
Теперь вы на мои ответите?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт фев 19, 2013 14:47:36
ibiza11
Спасибо.
На Ваши тоже отвечу.
В чем отличие от используемого ВАМИ стандарта? В каком из стандартов Си данная запись будет ошибочна?
От используемого мной
стандарта отличий нет.
Согласно используемому мной стандарту ошибок при добавлении точки с запятой после закрывающихся фигурных скобок не будет (этого я не знал до сегодняшнего дня).
В каком конкретно стандарте Си данная запись будет ошибочна я не знаю, поскольку знаком только со стандартом С89 и стараюсь писать код не выходящий за рамки вышеуказанного стандарта. Но поскольку остальные стандарты поддерживают C89, а в С89 эта запись не является ошибочной, то думаю и в других не вызовет ошибок.
Вообще говоря стандарт не запрещает использовать в этом месте разделительную точку с запятой, но и нет ни одного указания к применению подобной конструкции, кроме раздела 3.6.3 Expression and null statements стандарта, в котором точка с запятой рассматривается как пустой оператор. Смысла ставить пустой оператор в том месте спорного кода я не вижу. (Может быть Вы видите?) Из этого можно сделать вывод, что автор тех спорных строк кода
Valek3306 либо прочитал стандарт C89 и нашел в нем недосказанный момент и использует его повсеместно, поскольку ему так удобнее или привычнее, либо плодит эту конструкцию по незнанию, думая, что именно так и нужно и по-другому работать не будет. Не знаю как Вам, но мне кажется более достоверным второй вариант. Поэтому и был задан соответствующий вопрос, дабы обратить внимание в первую очередь автора на возможные пробелы в знаниях синтаксиса языка.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт фев 19, 2013 15:13:53
Совесть
О целесообразности речи не велось. Говорилось только о допустимости. Да и современные компиляторы, на мой взгляд, на много умнее тех кто ими пользуется и вполне вероятно спокойно проигнорируют данную запись. По крайней мере используемый мной так и делает.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт фев 19, 2013 15:42:53
ibiza11
Согласен. Речь велась о допустимости. Выяснили, что допустимо. Осталось выяснить, если возможно, почему именно так пишет автор.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт фев 19, 2013 17:46:44
unalex
Совесть писал(а):"если компилятор не ругается - это не значит корректно" - а что не так в этой записи? чему она противоречит? вашему стилю написания программы?
ну конечно, проще напихать точек с запятой, а компилятор их сам уберет в процессе оптимизации
если вы считаете это правильным подходом, то флаг вам в руки
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт фев 19, 2013 19:03:31
ELcat
Главное не писать так:
Вот в этом случае компилятор тоже не ругнётся, но действие будет выполняться не зависимо от условия.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт фев 19, 2013 19:09:56
unalex
Спойлер
коммент удален, чтобы дискуссия не переросла во флуд