Я понял. Конструктива не будет.
В таком случае, позволю себе ответить за вас. 40+ лет назад считалось нормально писать с goto, вы этому научены с детства, привыкли так писать и не собираетесь менять свои привычки по причине того, что молодое поколение этого не застало.
Также, напоследок, хочу напомнить, что goto — это только частный пример того, о чём говорится в обсуждаемой статье. У каждого кода есть причина по которой он написан именно таким образом, каким написан. Тот факт, что ваш код непонятен другим людям говорит о том, что при его написании для вас более приоритетно было что-то другое. Если это достаточно важно — ок, если нет — вы просто один из тех инженеров, о которых говорит автор. Это можете знать только вы.
На сим, заканчиваю этот разговор. Желаю вам успехов с вашей первой в мире реализацией и благодарю за минусы в карму. Доброй ночи
К сожалению, программирование микроконтроллеров выходит за рамки моих интересов, так что не смогу поучаствовать в вашем проекте.
Здесь же мы обсуждаем использование goto в коде.
Вы описали конкретный алгоритм, давайте по нему пройдемся, и вы скажете что именно в приведенном варианте не работает «от слова совсем»?
1.
Если оба бита шины в 0 — то выйти
if (R4 == 0) break;
2.
Дальше ждем TOUT изменения состояния шины.
while (true)
{
... // "читаем еще раз ее состояние и пишем в STORE" находится здесь
count = 0;
while (R4 == R3 && count < TOUT)
{
R4 = READ_BOTH_PINS;
count++;
}
...
}
Отлично, я рад, что мы вернулись к теме обсуждения. Давайте теперь предметно.
Изначальное утверждение, с которого началась эта ветка: читать с break проще, потому что сразу понятно, что эта инструкция находится в цикле и для понимания контекста достаточно посмотреть в начало текущего блока.
Почему, по вашему мнению, с goto проще?
Как вы могли заметить, я признал свою ошибку в другой ветке. sdima1357 указал на неё четко и ясно. Вы же решили меня оскорбить сославшись на абсолютно корректное утверждение. Также прошу заметить, что указанный участок кода не имеет никакого отношения к обсуждаемой теме, так зачем сейчас весь этот разговор?
Согласен, момент с записью времени упустил.
Тем не менее, я не ставил перед собой задачи разобраться с тем как работает USB. Мы обсуждали написание кода с goto и без. И если оставить запись в STORE как в оригинальном варианте, тогда останется сравнить два альтернативных варианта ожидания смены значения (хоть я и не уверен, что это хорошая идея мерять время итерациями цикла):
int count = 0;
while (R4 == R3 && count < TOUT)
{
R4 = READ_BOTH_PINS;
count++;
}
if (k == TOUT)
{
break;
}
И, как по мне, второй вариант проще как раз по той причине, которую озвучил gridem: break позволяет без траты времени на поиск метки понять что происходит.
Я не занимаюсь настолько низкоуровневыми вещами, так что заранее прошу прощения если упускаю какие-то детали (меня смутил момент про тайминги в однопоточном коде) или мои эстетические чувства не совпадают с вашими. Возможно, это связано с тем, что я не видел goto в коде уже лет 15. Тем не мнее, мне было совершенно не понятно что делает ваш код до того, как я взялся его рефакторить.
Сейчас же абсолютно очевидно, что мы просто читаем значения из одного источника и перекладываем их в другой пока не наткнемся на последовательность из TOUT одинаковых ненулевых значений или ноль. При нахождении нуля заменяем его на результат функции _getCycleCount8d8 и завершаем цикл.
Также, теперь стала заметна одна странная вещь. Она присутствует и в вашем и в моём варианте: если мы встречаем последовательность из меньше чем TOUT значений, то первое отличающееся значение не попадает в STORE. Опять же, я могу что-то упускать, но мне это не кажется корректным поведением программы. Такие неочевидные моменты стоит всегда снабжать комментариями, чтобы снизить когнитивную нагрузку на читателя (даже если goto ему привычен и более понятен).
Пользуюсь таким 2 с небольшим недели. Экран точно такой же, как и на последних iPad mini. Углы обзора достаточно широкие. Яркость днем держу на 30-40%, ночью — снижаю практически до нуля.
Есть специальный режим для чтения, но в нем все отдает желтым. Читаю в обычном.
К фронтальной камере особых запросов нет, а вот задняя не очень. Тот же iPad mini 2, у которого 5мп, снимает лучше.
Батареи хватает на полных 2 дня активного использования: серфинг, книги, пара часов видео вечером.
Игры не лагают. Все, что пробовал, шло на максималках без проблем.
Претензии есть только к софту. Много китайского, не используемого, барахла. Иногда тухнет экран без причины. Пару раз вообще не загорался, приходилось перезагружать планшет долгим нажатием питания. В стандартной прошивке (глобальная) присутствует DU Battery Saver, который своими оптимизациями сломал механизм зарядки. Устройство считало, что оно полностью разряженно и не включалось, хотя по факту было 70%. Отвез в сервис, что именно сделали — не сказали, но разбирать пришлось. Маркет и поиск по-умолчанию через настройки не меняются, хотя гугловские присутствуют.
В целом, пока впечатления позитивные.
Я понял. Конструктива не будет.
В таком случае, позволю себе ответить за вас. 40+ лет назад считалось нормально писать с goto, вы этому научены с детства, привыкли так писать и не собираетесь менять свои привычки по причине того, что молодое поколение этого не застало.
Также, напоследок, хочу напомнить, что goto — это только частный пример того, о чём говорится в обсуждаемой статье. У каждого кода есть причина по которой он написан именно таким образом, каким написан. Тот факт, что ваш код непонятен другим людям говорит о том, что при его написании для вас более приоритетно было что-то другое. Если это достаточно важно — ок, если нет — вы просто один из тех инженеров, о которых говорит автор. Это можете знать только вы.
На сим, заканчиваю этот разговор. Желаю вам успехов с вашей первой в мире реализацией и благодарю за минусы в карму. Доброй ночи
Здесь же мы обсуждаем использование goto в коде.
Вы описали конкретный алгоритм, давайте по нему пройдемся, и вы скажете что именно в приведенном варианте не работает «от слова совсем»?
1.
2.
3.
Отлично, я рад, что мы вернулись к теме обсуждения. Давайте теперь предметно.
Изначальное утверждение, с которого началась эта ветка: читать с break проще, потому что сразу понятно, что эта инструкция находится в цикле и для понимания контекста достаточно посмотреть в начало текущего блока.
Почему, по вашему мнению, с goto проще?
Как вы могли заметить, я признал свою ошибку в другой ветке. sdima1357 указал на неё четко и ясно. Вы же решили меня оскорбить сославшись на абсолютно корректное утверждение. Также прошу заметить, что указанный участок кода не имеет никакого отношения к обсуждаемой теме, так зачем сейчас весь этот разговор?
Если вам есть что сказать по теме обсуждения — welcome, иначе — на том и закончим, я не испытываю удовльствия от беребранок с незнакомцами.
Тем не менее, я не ставил перед собой задачи разобраться с тем как работает USB. Мы обсуждали написание кода с goto и без. И если оставить запись в STORE как в оригинальном варианте, тогда останется сравнить два альтернативных варианта ожидания смены значения (хоть я и не уверен, что это хорошая идея мерять время итерациями цикла):
И, как по мне, второй вариант проще как раз по той причине, которую озвучил gridem: break позволяет без траты времени на поиск метки понять что происходит.
Извините, но «0 | N» всегда N
Я не занимаюсь настолько низкоуровневыми вещами, так что заранее прошу прощения если упускаю какие-то детали (меня смутил момент про тайминги в однопоточном коде) или мои эстетические чувства не совпадают с вашими. Возможно, это связано с тем, что я не видел goto в коде уже лет 15. Тем не мнее, мне было совершенно не понятно что делает ваш код до того, как я взялся его рефакторить.
Сейчас же абсолютно очевидно, что мы просто читаем значения из одного источника и перекладываем их в другой пока не наткнемся на последовательность из TOUT одинаковых ненулевых значений или ноль. При нахождении нуля заменяем его на результат функции _getCycleCount8d8 и завершаем цикл.
Также, теперь стала заметна одна странная вещь. Она присутствует и в вашем и в моём варианте: если мы встречаем последовательность из меньше чем TOUT значений, то первое отличающееся значение не попадает в STORE. Опять же, я могу что-то упускать, но мне это не кажется корректным поведением программы. Такие неочевидные моменты стоит всегда снабжать комментариями, чтобы снизить когнитивную нагрузку на читателя (даже если goto ему привычен и более понятен).
Есть специальный режим для чтения, но в нем все отдает желтым. Читаю в обычном.
К фронтальной камере особых запросов нет, а вот задняя не очень. Тот же iPad mini 2, у которого 5мп, снимает лучше.
Батареи хватает на полных 2 дня активного использования: серфинг, книги, пара часов видео вечером.
Игры не лагают. Все, что пробовал, шло на максималках без проблем.
Претензии есть только к софту. Много китайского, не используемого, барахла. Иногда тухнет экран без причины. Пару раз вообще не загорался, приходилось перезагружать планшет долгим нажатием питания. В стандартной прошивке (глобальная) присутствует DU Battery Saver, который своими оптимизациями сломал механизм зарядки. Устройство считало, что оно полностью разряженно и не включалось, хотя по факту было 70%. Отвез в сервис, что именно сделали — не сказали, но разбирать пришлось. Маркет и поиск по-умолчанию через настройки не меняются, хотя гугловские присутствуют.
В целом, пока впечатления позитивные.