ВСЕГДА. Если это не так, это не программа.
За 13 лет не найти как сделать задержку…
Снимаю перед Вами шляпу.
прерывание потому и называется прерыванием, что оно прерывает бесконечный цикл.DrLithium писал(а):А что такое прерывания знаете?
узнать мало, нужно еще суметь понять, что это такое.DrLithium писал(а):Я о бесконечном цикле в МК, узнал ещё в 2008-м году, когда только начал изучать.
ВСЕГДА больше и значительно больше. ни один автомат не может сравниться с человеком.Ivanoff-iv писал(а):на С программы не всегда получаются больше, чем на ассемблере - автоматические оптимизаторы сейчас тоже весьма неплохи.
от мастерства и только от мастерства.Ivanoff-iv писал(а):Наверно это от мастерства программиста зависит
Детектив, а вы сие из чего вывели? Улики где?За 13 лет не найти как сделать задержку…
Снимаю перед Вами шляпу.
Да сколько раз вам говорить? Не 27-ь, а 11! 16КБ это код макроса многократно вызванного нуба запостившего свое "творение" на Хабр! Читайте внимательно.~ 27кБ прошивка для простого контроля состояний- это много
Как раз не логично вешать таймер. Он вообще в данном случае ни каких преимуществ не даёт. Вот вам пример, что б вы осознали:~ механика - штука медленная и вешать МК программными задержками пока она отрабатывает не очень логично - для долгих задержек правильней применять аппаратный таймер (при правильном применении он не "израсходуется"), можно даже сделать подобие многозадачности, тогда, пока механика перенастраивается, МК останется способным к выполнению других задач (например опрос кнопок, дин. индикация).
В корне не правы, всегда больше. То что я смогу сделать в регистрах, СИ-шный компилятор отправит в оперативку, а это в разы дольше!~ на С программы не всегда получаются больше, чем на ассемблере - автоматические оптимизаторы сейчас тоже весьма неплохи.
Где я такое писал? Ссылку в студию! Очередной фантазёр? От реальности не отрываемся и кроем голыми фактами. И убедительных я что-то у вас не вижу. А интересного у меня и так избыток, да и ваши "аргументы" я разбиваю с большим интересом! Лишите меня этой возможности, это будет лучший для меня интерес.~ не надо думать, что твое мнение единственно правильное - можешь упустить много интересного... (сам этим одно время страдал...)
Не надо ни чего обследовать. Тут давно всё ясно, просто это демонстрация того, что программисту без практики (не в теме) тут вообще не место, т.к. ТЗ в чистом виде ему ни кто на блюдечке не преподнесёт. Из перемотки в плей и так происходит промежуточный стоп! Но в случае перехода из перемотки назад и в плей, пропадания ВЧ не происходит, а после перемотки вперёд происходит. От вас, программистов скрыт факт: в аппарате закрытый тракт. В курсе что это такое? Последствия представляете для кода решающего задачу? Понимание подобных тонкостей отсекает возможность использования программиста со стороны. Это ясно?~ по провалу ВЧ - для выяснения причины надо более тесно обследовать механику, возможно пленка не ровно ложится или её рывок происходит и задний ролик обгоняет и 3-5 секунд пленка по голове без натяжения идёт... возможно вариант решения - останавливать перемотку до перехода на воспроизведение...
Цирк заканчивайте. У меня нет 27-и, у меня 11КБ. Мозг есть, что б осознать масштаб? А в СИ при использовании чужого кода такого не происходит? Дак почему в ассемблере это прям бЯда? Когда я заметил, что код распух, тут же решил проблему. Боюсь вы бы вообще не заметили, что у вас это произошло. Да и написать о подобном побоитесь - засмеют. А я не боюсь и в этом разница, потому вы беситесь и хамите.узнать мало, нужно еще суметь понять, что это такое.
а 27 кБ на примитивную программу на ассемблере - кроме тебя, я думаю, никто не способен на такой дурдом.
Здравая мысль! Тут я полностью солидарен!ВСЕГДА больше и значительно больше. ни один автомат не может сравниться с человеком.
Если посмотрите выше по ветке, то увидите диаграмму в скрине, где значения явно в миллисекундах.это чего микросекунд? миллисекунд? секунд? а может ещё каких попугаев?
Здесь не стоит задача просто справиться с задачей. Нужно внедрить задел для дополнительных функций на ближайшее или далёкое будущее. Кроме того, ни кто не утверждает, что это нельзя сделать на таймерах. Здесь вопрос подхода: есть ли смысл усложнять себе задачу и мучиться с таймерами, когда можно использовать макрос с простым вызовом: DELAY_MS 65535 и тем более когда вам не нужно прерываться. Да и разгрузить голову, для решения ёмкой задачи весьма как полезно! Не сложной, т.к. всё решаемо, но большой по объёму, а отсюда и кода до фига!то сложности вообще не вижу... даже если их все одновременно запустить придётся...
Нет. Это когда лента в зоне контакта с головками, с обоих сторон контачит с тонвалами. Коих два, для обеспечения нужного прилегания ленты к головкам. Подушка кассеты отводится "падлифтером" полностью, и она не давит на ленту и головку совсем. Лента в подобных трактах, если её чуть вытянуть, выбирается за несколько секунд. Это обеспечивается разностью вращения тонвалов. Поэтому минимальное захлёстывание ленты перед остановкой, рождает проблему. Решается это смешение по времени момента остановки самой перемотки по отношению к повороту программной шестерни и как следствие тормозов. Но если тормоза срабатывают не одновременно, то можно ввести уже в начале плея подмотку чуть раньше. Просто надо знать что крутить, т.е. не сложно.закрытый... это про наличие/отсутствие развязывающих по постоянке конденсаторов?
Мне бы проект скинуть для разбора по косточкам, но боюсь конкуренты упрут и будут продавать вместо меня. Просто поверьте, много определений, много пересечений режимов и состояний, много чем нужно точно, до 10мСек, управлять. Ужать можно в 2-3-и раза, но эта задача не стоит. Уверен, что в Японии над запихиванием подобного функционала в маленький LM6402A, целый отдел работал. При этом надо было отточить код до безукоризненного состояния. В данном случае важнее:"У меня нет 27-и, у меня 11КБ."
проведена большая работа по оптимизации, но для простой переключалки (ни разу не интерактивной) это всё-равно много...
Внешнее - нажатие на кнопку, открытие кассетоприёмника и т.п. Внутреннее - автостоп, пропадание питания и т.п.и ещё вопрос, вот есть задержки 10, 20... 120 мс, а начинает их событие внутри мк или какое-то внешнее?
Можно, но опять же удобнее просто подождать, скомандовав одной командой с аргументом кратным 1-у, т.к. можем себе позволить.просто они все кратны 10, напрашивается подобие диспетчера задач с шагом 10мс
Я помню про этот кусок кода. Руки дойдут проверю, надо найти время и голову разгрузить. И, если помните я писал в первом посте что код не мой, а с Хабра. В нем не тыща макросов, а функция и две подпрограммы, удобные для настройки, если их правильно написать.Кстати она одна (процедура, её Вам akl дал ) а не тыща макросов, как у Вас.
Не верный? Что м.б. не верного в отлично работающем, стабильном и хорошо сдобренным комментариями коде? Тут верна именно идеология подхода к решению подобных задач! Всё наглядно, легко правится и настраивается.Да ладно, у Вас уже много кода написано, не осмелюсь предложить начать с нуля, так как по моему подход неверный.
Сочувствую. Иногда сам пока пишу, то делаю промежуточные версии (10-15-20), но что б в корне менять целиком... Было, что надо что-то менять, но только блоки, т.к. во что-то упирался. Как-то пришёл к тому, что плейер(озвучка для часов) на attiny861 с СИ-шным кодом для работы с флешкой, управляемой с какой-то меги по I²C, пришлось после проигрывания тупо перезагружать по WDR. Оказалось проще и надёжнее, чем разбираться с кривостью чужой библиотеки. По этому больше люблю ассемблер! Пятый год где-то работает без нареканий...Мне раза два пришлось проект, сделанный и работающий разрабатывать снова, с нуля, так как в принципе неправильно реализовал алгоритм.
А о сложности и проблемах ни кто не говорил и тут всё далеко не в лоб, и подумано при этом многократно. Тут тупо просто много. Охватить сразу и всё - нет смысла. Сделал минимум, проверил, поправил, довёл, делай новую версию с добавление остальных функций. Что б просто запустить аппарат, пришлось писать весь жир, а нашвырять функционал не составит труда.Просто не в лоб решать, а посидеть, подумать. Как ни крути, но это автомат. И точно не из самых сложных.
Поздравляю! Но наверное не надо забывать, что основная часть протоколов реализована аппаратно? Чему там весить? Опрашивать по I²C или SPI периферию мегазатратно? Не знал! Ваше сравнение для нубов сойдёт....с граф.дисплеем (ks0107 или st7920 на выбор), панорамой, узалсом, компасом, акселерометром, криптованием
программная USB, шоб на мост не тратиться
и еще место осталось для баловства
А понимать и не надо, т.к. на чём и как, я не упоминал. Но, если есть желание сделать на делеях, милости прошу, продемонстрируйте ваше кунг-фу. Или может уже закончим дурака валять, т.к. ТЗ поставлено и до дела дошло, а все сразу в кусты? Только ля-ля и ха-ха все могут? Задача элементарная, ваши предложения по реализации и результаты в студию!Я вот не понял, ИК, i2c тоже будут на делаях?
макрос не вызывается, а вставляется. достаточно переделать макрос в подпрограмму, а его вставки на вызов этой подпрограммы, и, при полном сохранении алгоритма, код прошивки уменьшится раз в 100500, при этом чисто внешне ассемблерный исходник может даже почти не поменяться.DrLithium писал(а):27 кБ - это кол-во вызовов умноженное на запросы кривого и чужого макроса + сама программа.
Это просто отговорки.Странное т.з.... часть пунктов с подписью решено...
Выше ешё раз прочитайте чей костыль. А 800-й раз пишу: ВЗЯТО С ХАБРА! Читать умеем?к тому же вы не задачу решить просите, а свой костыль усовершенствовать,
Что за чушь? Вас просят оформить в "инструмент" кусок крошечного и рабочего кода! Что тут сложного?не взирая на то, что в замен автомобиль (ну ии может мотоцикл) предлагают...