15.08.2013, 14:52
|
|
Вид на жительство
Регистрация: 15.07.2007
Адрес: Одесса
Сообщений: 434
Сказал спасибо: 71
Сказали Спасибо 125 раз(а) в 78 сообщении(ях)
|
Re: Функция if на ассемблере для PIC.
Сообщение от omercury
|
Это пока при выполнении/невыполнении условия надо выполнить всего одну команду. Как только добавится добавится вторая команда, станет ещё хуже.
(да и для светодиодной мыргалки этот такт очень непринципиален)...
|
Дело, как Вы понимаете, не в "мыргалках". Дело в принципе. Смотрите, я изменил код представленный nagimovym на прямой (по входам), он просто бухнул то, что было сгенерировано. Ну да ладно.
( Кстати, я использовал раньше (и в ДАУ на ВМ80) именно такой (или похожий) алгоритм (с goto), тоже сам "допёр", подсказчиков тогда не было .)
Порт А вход, порт В выход. Считаем циклы:
Код:
|
porta=0 porta=1
btfss porta, 3; 1 2
bcf portb, 3; 1 -
btfsc porta, 3; 2 1
bsf portb, 3; - 1
4 4
;*****************
btfsc porta, 3; 2 1
goto 3fc; - 2
bcf portb, 3; 1 -
goto 3fd; 2 -
3fc: bsf portb, 3; - 1
3fd: ; code
5 4 |
Вы же понимаете, что более читабельным является первый код. А если дискретных датчиков много, или других условий, то Вы должны понимать нерентабельность классики с goto (в данном случае). Также освобождается довольно прилично места для контроллеров с небольшой памятью, и скорость обработки, всё же выше. (мы, надеюсь, не забываем, что это только для одного порта ввода, и опрос (как и сама обработка) идёт по циклу - где будет программа обработки после, скажем, пяти минут работы (или часа), при одинаковых схемах?).
__________________
И если б не было Одессы, шоб я делал?!
|
|
|
|
15.08.2013, 14:58
|
|
Вид на жительство
Регистрация: 15.07.2007
Адрес: Одесса
Сообщений: 434
Сказал спасибо: 71
Сказали Спасибо 125 раз(а) в 78 сообщении(ях)
|
Re: Функция if на ассемблере для PIC.
Сообщение от alvadep
|
Flopix, а далеко ходить не надо. Сравните пример ТС и мой с операторами goto. Казалось бы мелочи, но тем не менее более читабельный код у ТС. И я ведь не отказываюсь от goto, просто стараюсь использовать как можно реже, дабы не получилось так называемого спагетти-кода.
P.S. Иногда стоит перекомпоновать куски программы так чтобы избавится от лишних переходов. Мое мнение.
|
Я тоже придерживаюсь такого мнения. (Спасибо, кстати, за комплиман).
Как заметил Алекс (помоему), иногда в глазах рябит от излишнего goto.
__________________
И если б не было Одессы, шоб я делал?!
|
|
|
|
15.08.2013, 15:07
|
|
Вид на жительство
Регистрация: 15.07.2007
Адрес: Одесса
Сообщений: 434
Сказал спасибо: 71
Сказали Спасибо 125 раз(а) в 78 сообщении(ях)
|
Re: Функция if на ассемблере для PIC.
Сообщение от Alex9797
|
Да, Вы правы. У меня частенько закрадывается подозрение, что авторы подобных книг умышленно делают в своих примерах такие "бяки". Для пользы читателей.
... я в подобных случаях пользуюсь вспомогательной переменной в ОЗУ, копией порта, с которой могу делать что угодно, менять любые биты. А когда все биты установлены как хотелось - спокойно посылаю этот байт целиком в порт. Такой способ гарантирует надежную работу порта в условиях сильных помех.
Способ, придуманный Вами,
тоже имеет право на жизнь. Да, ложные мигания при этом исключаются. Но и в этом случае работа с отдельными выводами порта не всегда применима.
|
Ну на универсальность, я и не претендовал.
Но всё же если нужно просто "переписать" в "вход на выход", то это довольно приличная экономия места и скорости.
__________________
И если б не было Одессы, шоб я делал?!
|
|
|
|
15.08.2013, 15:34
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: Функция if на ассемблере для PIC.
Сообщение от val_ka
|
Дело в принципе.
|
А, ну если так, "поехали"!
Всегда есть смысл их считать? Или так, от нечего делать?
Цитата:
|
Вы же понимаете, что более читабельным является первый код.
|
Если нужна читабельность - переходить на Си!
АСМ, в любом виде, плохочитаемый! Или будете спорить? Без комментов там вообще вилы.
Можно налепить макросов, подпрограмм, но в общем ситуация не изменится.
Цитата:
|
А если дискретных датчиков много, или других условий, то Вы должны понимать нерентабельность классики с goto (в данном случае).
|
Чушь! Если датчиков много без goto тем более никак!
Цитата:
|
Также освобождается довольно прилично места для контроллеров с небольшой памятью, и скорость обработки, всё же выше.
|
Чушь! Где-то улучшаете, где-то ухудшаете. Место можно сэкономить на подпрограммах, но каждый вызов - потеря времени. Увеличиваете скорость, разворачиваете что только можно - теряете в размерах.
|
|
|
|
15.08.2013, 16:09
|
|
Вид на жительство
Регистрация: 15.07.2007
Адрес: Одесса
Сообщений: 434
Сказал спасибо: 71
Сказали Спасибо 125 раз(а) в 78 сообщении(ях)
|
Re: Функция if на ассемблере для PIC.
Сообщение от nahimovv
|
Всегда есть смысл их считать?
Если нужна читабельность - переходить на Си!
АСМ, в любом виде, плохочитаемый! Или будете спорить? Без комментов там вообще вилы.
|
Попридержали бы Вы "коней".
Вы, надеюсь согласитесь, что "Ваш" (общественный) код, всё же, на один цикл дольше работает.
А значит, для ассемблера, хуже.
__________________
И если б не было Одессы, шоб я делал?!
|
|
|
|
15.08.2013, 17:10
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: Функция if на ассемблере для PIC.
Сообщение от val_ka
|
надеюсь согласитесь
|
Конечно нет. Это частный случай высосанный из пальца, на который нельзя ориентироваться. При малейших изменениях всё будет по лругому.
Цитата:
|
А значит, для ассемблера, хуже.
|
Конечно хуже! На Си читабельнее, а проигрыш стандартного Си в один цикл извращённому АСМу как-то не впечатляет и ещё раз доказывает, что нефиг АСМом заморачиваться.
|
|
|
|
15.08.2013, 20:40
|
|
Прописка
Регистрация: 05.05.2007
Сообщений: 116
Сказал спасибо: 10
Сказали Спасибо 58 раз(а) в 34 сообщении(ях)
|
Re: Функция if на ассемблере для PIC.
мое мнение (на первый пост), что автор книги неграмотный и не знает предмета о том, о чем пишет. Все можно сделать и все будет работать как надо. Если программируешь на ассемблере, то проблема только в том, как ты хорошо понимаешь железо и что представляет сама команда ассемблера, дальше победить свою тупость. На Си проще, раз в 100. Но Си написал человек, и часто приходиться бороться еще с недоработками разработчика компилятора. А так если какая проблема в железе, читай ERROR DATA если ошибку в железе можно обойти то там все описано.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо Catcatcat1 за это сообщение:
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:06.
|
|