AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
29.04.2014, 21:06
|
|
Частый гость
Регистрация: 21.04.2010
Адрес: Makeevka
Сообщений: 25
Сказал спасибо: 25
Сказали Спасибо 10 раз(а) в 3 сообщении(ях)
|
Помогите разжевать цикл.
Всем добрый вечер. Возникла потребность подключить к устройству клавиатуру PC. На "просторах" нашел Application Note AVR313, ну и, естественно, данная избыточность мне не нужна, решил кое что поправить.
Вопрос состоит в следующем, в функции void decode(unsigned char sc) есть такой цикл:
if(!shift)// If shift not pressed,
{ // do a table look-up
for(i = 0; unshifted[i][0]!=sc && unshifted[i][0]; i++);
if (unshifted[i][0] == sc) {
put_kbbuff(unshifted[i][1]);
}
в котором мне не понятен смысл выделенного условия. Как я понимаю левый и правый unshifted[i][0] всегда будут равны, тогда зачем нужен правый, или я ошибаюсь?
И еще, в описании указано что некоторые клавиши клавиатуры игнорируются, т.е. иногда условие !=sc будет выполняться до конца массива, но не могу понять, как определяется конец массива?
Буду признателен всем кто растолкует мне истину.
|
|
|
|
29.04.2014, 21:12
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,772 раз(а) в 5,896 сообщении(ях)
|
Re: Помогите разжевать цикл.
Условие из двух частей
unshifted[i][0]!=sc и unshifted[i][0] (имеется ввиду !=0)
&& - логическое "и" (не побитовое), говорит о том, что должно соблюдаться и одно (unshifted[i][0] не равно sc), и другое (unshifted[i][0] не равно нулю) условия.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
29.04.2014, 21:58
|
|
Частый гость
Регистрация: 21.04.2010
Адрес: Makeevka
Сообщений: 25
Сказал спасибо: 25
Сказали Спасибо 10 раз(а) в 3 сообщении(ях)
|
Re: Помогите разжевать цикл.
Спасибо akegor, не ожидал что так оперативно. Да, действительно, в конце массива записано 0,0. Т.е. достигнув конца массива unshifted[i][0] примет значение ==0 и вторая часть условия будет нарушена, но что бы выйти из цикла должны быть нарушены обе части условия unshifted[i][0]!=sc о чем и сообщает логическое "и" &&. Вот если бы было лигическое "или". Я не прав?
Последний раз редактировалось Ahatoly; 29.04.2014 в 22:02.
|
|
|
|
29.04.2014, 22:02
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Помогите разжевать цикл.
Смысл цикла for () - найти номер ячейки (i), для которой первый элемент совпадает с кодом нажатой клавиши sc. Конец таблицы определяется по нулевому значению ( правая половина условия).
Дальше, если совпадающий номер найден, то используется второй элемент ячейки (i), который есть ASCII код нажатой клавиши.
Последний раз редактировалось Yurkin2014; 29.04.2014 в 22:07.
|
|
|
|
29.04.2014, 22:04
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,772 раз(а) в 5,896 сообщении(ях)
|
Re: Помогите разжевать цикл.
Сообщение от Ahatoly
|
Я не прав?
|
Да, неправы.
1 и 1 =1; 1 и 0 = 0; 0 и 1 = 0; 0 и 0 = 0.
Достаточно одного нарушения условия.
Я не вникал в проект, просто отвечаю на конкретные вопросы.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
29.04.2014, 22:06
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Помогите разжевать цикл.
Цикл до тех пор, пока не найдено совпадение И элемент не равен 0.
|
|
|
|
29.04.2014, 22:07
|
|
Частый гость
Регистрация: 21.04.2010
Адрес: Makeevka
Сообщений: 25
Сказал спасибо: 25
Сказали Спасибо 10 раз(а) в 3 сообщении(ях)
|
Re: Помогите разжевать цикл.
Yurkin2014, в чем смысл цикла я понимаю, но если конец таблицы достигнут, а sc так и не равен, то как произойдет выход из цикла?
|
|
|
|
29.04.2014, 22:10
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,772 раз(а) в 5,896 сообщении(ях)
|
Re: Помогите разжевать цикл.
По равенству нулю. Мой пост выше.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
29.04.2014, 22:21
|
|
Частый гость
Регистрация: 21.04.2010
Адрес: Makeevka
Сообщений: 25
Сказал спасибо: 25
Сказали Спасибо 10 раз(а) в 3 сообщении(ях)
|
Re: Помогите разжевать цикл.
akegor спасибо, согласно Вашего поста что-то стало доходить. Вы уж мужики извините может быть за туповатый вопрос или некорректное изложение моих мыслей, я в си без году неделя, но хочется научится.
|
|
|
|
29.04.2014, 22:25
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,772 раз(а) в 5,896 сообщении(ях)
|
Re: Помогите разжевать цикл.
Сообщение от Ahatoly
|
Вы уж мужики извините может быть за туповатый вопрос
|
Кому тупой, а кому и острый. Кто-то прошел и понабивал шишек, а кто-то в начале пути.
На то и форум.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:28.
|
|