Jump to content

my504

Members
  • Content Count

    5496
  • Joined

  • Last visited

  • Days Won

    6

Everything posted by my504

  1. Вход в обработчик происходит по сбросу таймера. Скорость выполнения в обработчике ничем не отличается от скорости основного цикла. Программа входит в обработчик и выполняет код в обработчике пока его не завершит. Если обработчик не будет завершен до следующего прерывания таймера, то прерывание будет исполнено сразу после выхода из текущего обработчика.
  2. Это ниОчем. У меня рядом с дебаггером в КАТУШКЕ генерируется ток амплитудой 20 А в результате чего на катушке возникает падение напряжения 1,4...1,6 кВ. Частота примерно 60 кГц с фронтами накачки порядка 10...20 нс. Проблема не в высоком напряжении, а в паразитных сигналах и путях их возникновения. Это вполне решаемый вопрос в рамках обсуждаемого шлейфа.
  3. Попробую зайти с другого конца. Пока забудьте о программировании и Си. Пусть имеется следующее арифметическое выражение: (A+B)/B, где A=6, B=2 Чему равно это выражение? Очевидно, что 4. Так же очевидно, что ни А, ни В не равны 4. Тогда кто равен 4? ... ВЫРАЖЕНИЕ. Был получен результат, который просто у нас в уме. А вот если мы запишем Х=(A+B)/B, тогда мы то, что у нас в уме присвоим Х. Таким образом, получение некоего результата выражения - это возврат значения этим выражением. И это возвращенное значение мы присвоили конкретной переменной Х. А теперь вернемся к Си. Одиночный знак = является оператором присвоения значения возвращенного правым от этого оператора выражением переменной расположенной слева от этого оператора. Всё. Другого способа присвоения в Си нет. Только через одиночный знак =. Обратное так же справедливо - если вы где то написали одиночное =, значит вы произвели присвоение. Все остальные арифметические и логические операции способны только возвращать значение. Физически - возврат значения - это получение результата выражения в некоем временном регистре. Обычно регистре общего назначения (РОН). РОНы отличаются от остальной памяти тем, что доступ к ним не требует занятия шины данных/адреса ОЗУ. Потому что РОНы - это часть арифметико-логического устройства процессора. Так называемая СВЕРХОПЕРАТИВНАЯ память - СОЗУ. При обращении к РОНам адрес РОНа очень короткий (3...5 бит) и содержится прямо за кодом операции инструкции процессора.
  4. let будет иметь смысл только если ранее есть: typedef char let;
  5. Стесняюсь спросить - а мы про Си сейчас говорим? Что это за let? Или у вас такой тип определен? Естественно можно. Но цикл может стать бесконечным из за некратности начального значения пятерке.
  6. Нет, такая запись вызовет ошибку из за отсутствия точки с запятой после выражения. ЗЫ. Если оставить в покое точку с запятой, данное выражение означает, что выражение OCR1A=OCR1A-5 будет выполняться пока OCR1A равно нулю. Проверяется условие -> принимается решение о выполнении выражения.
  7. while(OCR1A<=200) OCR1A=OCR1A+5; OCR1A<=200 ничего не меняет, а возвращает логическое значение для while. Значение меняется в выражении OCR1A=OCR1A+5; Может вам будет понятнее писать в две строки или вообще с фигурными скобками? while(OCR1A<=200) {OCR1A=OCR1A+5;}
  8. А где в вашем коде есть обсуждаемое выражение? Условие под if не изменяет тестируемую переменную.
  9. Выражение вида OCR1A<200; вызовет ошибку или будет проигнорировано с варнингом. Выражение вида OCR1A = OCR1A<200; присвоит результат логической операции переменной OCR1A.
  10. логические операторы не могут ничего присваивать. == <= >= > < || && они возвращают логическое значение (true/false) для условий.
  11. В ленте сигнальные проводники чередуются с земляными. Нет там никаких помех.
  12. Отрежьте нужную длину или обожмите свой любой наперед заданной длины... В чем проблема то? Да и 20 см - это совершенно нормально. Можно к родному сделать переходник. Вот такой у меня:
  13. Все очень просто - из сплошной ленты от СТлинка вырезаются необходимые концы и паяются на маленькую переходную плату с ответным разъемом к плате.
  14. SWD требует всего 4 контакта - земля-питание-данные-клоки. То есть обычный PLS-4 будет вполне достаточен.
  15. Обучаемый "возрастной" категории в отличии от учеников школьного возраста утрачивает аргументацию связанную с авторитетом старшего. Но подобная аргументация и в школьном возрасте будет негодной. Это аргументация ПЛОХОГО преподавателя. Зато с возрастом у людей обостряются качества "второй натуры". Но тут качество преподавания бессильно.Самоуверенность соединенная с упрямством и заправленная латентной ленью даст тот салат, который в лучшем случае даст фейковый результат, а в худшем злобу и отвращение к предмету занятий. Фейковым я называю результат. который работает на первый взгляд. но дает баги различной периодичности и фатальности. ЗЫ. Смешно читать, когда автор пишет про "точность", ни разу не обозначив величины формируемого сигнала и обоснованное разрешение этого сигнала по времени. При трех байтах программного счетчика разрешение по времени составит 1/2^24 = 1/16 777 216. Что же это такой за процесс, которому требуется такое разрешение? Даже ума не приложу... Тот факт, что разрешение еще не является точностью - это отдельная тема...
  16. Прикольно... Значит считать машинные циклы с учетом разного времени при ветвлениях вам проще, чем считать базовые интервалы таймера? Вы видимо плохо понимаете о чем я веду речь....
  17. Ну слава Богу, это выяснили... Тогда вопрос. Кнопки явно не относятся к периферии реального времени. То есть от момента нажатия до момента реакции программы на нажатие может пройти достаточно неопределенное (в разумных пределах) время. То есть нет никакой необходимости странным образом ресетить МК из прерывания. Вообще то так это не делается. Во первых, нужна защита от дребезга кнопки. Это уже потребует интервала ее опроса. Иначе одно нажатие будет приводить к серии прерываний (и при нажатии и при отпускании) или потребует фильтра на входе. Я не зря спросил про параметры генерируемого сигнала. Наличие таймера даст возможность сформировать опорный интервал в котором можно инкрементить софтовые счетчики и опрашивать кнопку. Основной цикл освободится от циклов счета и позволит спокойно решать вопрос с перегрузкой параметров генерируемого сигнала...
  18. Это то, что автор не может внятно объяснить ничего про ИСТОЧНИК этих прерываний. Прежде чем давать формальные советы стоит разобраться в ситуации. А ситуация противоречит здравому смыслу. Внешнего прерывания нет, а из внутренних остается только TMR0. Вы можете объяснить каким образом прерывания от таймера могут вызвать описанную автором ситуацию? Лично я - нет.
  19. Мне начало казаться, что нет никакого прерывания... Есть такое мнение, что формальные советы могут завести в тупик. Автор вопроса говорит на каком то своем языке...
  20. Я просто в недоумении... В этом МК есть только ДВА источника прерываний касающихся событий времени - внешнее прерывание и прерывание по TMR0. Если не внешнее, и при условии, что вы считаете программным счетчиком, то как тут использован TMR0? Вообще то это и есть ШИМ. Программный, но ШИМ.
  21. В прерывании ОТ ЧЕГО? О каких частотах ШИМ идет речь? О каких скважностях идет речь?
  22. Да, достаточно. Но это помимо делителя и двухпорогового компаратора. Не многовато-ли для желания сэкономить ногу? Может тогда стоит часть периферии вынести на расширитель портов, если с ногами у Эспрессиф-а все так плохо?
  23. Правильно, что так кажется. Нужно смотреть в даташите на тип входа. Если триггер Шмитта, то прокатит, а если нет, можно получить неприятную историю с потреблением микросхемы. Недавно я так поставил аналоговый скоростной ключ (74LVC1G3157) и быстро обнаружил. что при питании 5 вольт и управлении уже 4,5 вольта потребление СТАТИЧЕСКОГО режима становится порядка 3...4 мА, а при напряжении 3,3 вольта - 18 мА. ВОСЕМНАДЦАТЬ, КАРЛ!!! У КМОП ключа.
  24. Ну это вопрос к Вам. Вероятно есть причины почему ВЫ не можете, а я, например, могу..
  25. А кто утверждал, что на переменную маску наложить нельзя? Тут говорилось, что буферизовать порт в данном случае бессмысленно. Лишнее действие. И только.
×
×
  • Create New...