Прерывания в МК., Нужно ли их бояться? |
Здравствуйте, гость ( Вход | Регистрация )
Прерывания в МК., Нужно ли их бояться? |
1.7.2010, 23:58
Сообщение
#41
|
|
Активный участник Группа: Пользователи Сообщений: 2220 Регистрация: 26.5.2010 Из: Московская обл. Пользователь №: 165 |
Ок. Дано: atmega о шестнадцати мегагерцах. Требуется: в цикле 62.5кГц произвести некоторые расчеты (для управления ШД вычислить текущее значение счетчиков двух таймеров - зависимость sin/cos с учетом предыдущего значения и экспоненциального изменения тока в обмотках с известной индуктивностью, сопротивлением и напряжением), получать команды и отправлять статус на 500 кбод, обрабатывать два концевика и индекс с защитой от дребезга. Хотя бы. Поучите ? Поясните, зачем здесь ващще чего-нибудь опрашивать (или прерывать)? Считайте себе на здоровье и отправляйте. Если серьёзно - поставьте задачу как-нибудь так, чтобы её можно было понять по-человечески.Она относится, как я понял, к классу реал-тайи задач. |
|
|
2.7.2010, 0:01
Сообщение
#42
|
|
сундук Группа: Пользователи Сообщений: 4043 Регистрация: 21.11.2009 Из: Ростов-на Дону Пользователь №: 15 |
Ок. Дано: atmega о шестнадцати мегагерцах. Требуется: в цикле 62.5кГц произвести некоторые расчеты (для управления ШД вычислить текущее значение счетчиков двух таймеров - зависимость sin/cos с учетом предыдущего значения и экспоненциального изменения тока в обмотках с известной индуктивностью, сопротивлением и напряжением), получать команды и отправлять статус на 500 кбод, обрабатывать два концевика и индекс с защитой от дребезга. Хотя бы. Поучите ? Во всем этом деле мне не нравится ATMega. И задачу необходимо переформулировать. Так, как она исходила от заказчика. Потому, как цикл с частотой 62.5 кГц лично мне кажется излишним. Учить никого не собираюсь, люди здесь все, в основном, взрослые... |
|
|
2.7.2010, 0:05
Сообщение
#43
|
|
Активный участник Группа: Пользователи Сообщений: 2220 Регистрация: 26.5.2010 Из: Московская обл. Пользователь №: 165 |
|
|
|
2.7.2010, 0:06
Сообщение
#44
|
|
сундук Группа: Пользователи Сообщений: 4043 Регистрация: 21.11.2009 Из: Ростов-на Дону Пользователь №: 15 |
Давайте-ка для начала растактовочку на обработку прерываний, их в нашей задачке В принципе, обойтись без прерываний здесь можно. Я сам занимался подобным в свое время. У старых PIC-ов прерываний не было вообще. В настоящий момент все это лучше делать на более мощном и дешевом МК, снабженным всем необходимым. |
|
|
2.7.2010, 0:08
Сообщение
#45
|
|
Активный участник Группа: Пользователи Сообщений: 2220 Регистрация: 26.5.2010 Из: Московская обл. Пользователь №: 165 |
|
|
|
2.7.2010, 0:09
Сообщение
#46
|
|
Активный участник Группа: Пользователи Сообщений: 2220 Регистрация: 26.5.2010 Из: Московская обл. Пользователь №: 165 |
|
|
|
2.7.2010, 0:15
Сообщение
#47
|
|
Активный участник Группа: Пользователи Сообщений: 2220 Регистрация: 26.5.2010 Из: Московская обл. Пользователь №: 165 |
Опрашивать нужно хотя бы для того, чтобы со всей дури не въехать фрезером в станину. Прерывать (это какбэ по-вашему подходу) будут события UARTа и таймера. Таймер молотит с частотой 62.5кГц, меньше нельзя, ибо микрошаг, в виду большого их количества в единицу времени, требует короткого цикла управления током обмоток. Все равно ничего не понятно. :(Давайте попробуем определиться сперва, что есть причина, и что должно быть её следствием? |
|
|
2.7.2010, 0:17
Сообщение
#48
|
|
Активный участник Группа: Пользователи Сообщений: 2220 Регистрация: 26.5.2010 Из: Московская обл. Пользователь №: 165 |
Вот давайте не будем увиливать. Обосрав мое решение тут же требуете себе шустрого АРМа. В газенваген (с) Думаю, что у Вас пока что нет решения.А есть только представления о нём. В противном случае, поясните, как Вы определяете период цикла 62,5мкс? Ждёте флажка таймера? |
|
|
2.7.2010, 0:19
Сообщение
#49
|
|
Активный участник Группа: Пользователи Сообщений: 2220 Регистрация: 26.5.2010 Из: Московская обл. Пользователь №: 165 |
Количество тактов на вход/выход в/из прерывание и сохранение/восстановление контекста, в данном случае. Какого контекста, в данном случае?Вы вообще понимаете, что есть "контекст", и зачем его непременно нужно сохранять? ...Даташит чего ? AVR ? А может вам сначала его освоить ? Ибо я и без даташита скажу, (ни)сколько прерываний вы успеете обработать за 256 тактов. Ну, так скажите, зачем выпендриваться.Даташиты на атмеги я позабыл уже - давно с ними не работал. Сообщение отредактировал Stanislav_GS - 2.7.2010, 0:22 |
|
|
2.7.2010, 0:19
Сообщение
#50
|
|
сундук Группа: Пользователи Сообщений: 4043 Регистрация: 21.11.2009 Из: Ростов-на Дону Пользователь №: 15 |
Щаз АРМы, вроде, подешевле ПИКов и АВРок толкают. PIC-ов так просто не протолкнешь. Я было решил сделать проект на STM32F103, но быстро одумался. В результате PIC24FJ128GA108. Несмотря на все свои 72 МГц, STM32F103 находится на одном уровне с 16 МГц PIC-ом с 16 "разрядным" мотором. |
|
|
2.7.2010, 0:20
Сообщение
#51
|
|
Активный участник Группа: Пользователи Сообщений: 2220 Регистрация: 26.5.2010 Из: Московская обл. Пользователь №: 165 |
|
|
|
2.7.2010, 0:27
Сообщение
#52
|
|
Активный участник Группа: Пользователи Сообщений: 2220 Регистрация: 26.5.2010 Из: Московская обл. Пользователь №: 165 |
А нахрена мне таймер? Пишу еще раз, по слогам: рас-так-тов-ка (с) Такты, сталыть, считаете?Чессно говоря, я сперва так и подумал. Но написать не решился. А это лишь симметричный ответ. Но предупреждаю, в запасе есть еще и ассиметричный ; Лана, проехали.Мордобой на шараге - это уж чересчур. На элхе для этого либерасты имеются. |
|
|
2.7.2010, 0:38
Сообщение
#53
|
|
Активный участник Группа: Пользователи Сообщений: 2220 Регистрация: 26.5.2010 Из: Московская обл. Пользователь №: 165 |
Я было решил сделать проект на STM32F103, но быстро одумался. Проект определяет железо.В результате PIC24FJ128GA108. Понимайте как хотите. ...Несмотря на все свои 72 МГц, STM32F103 находится на одном уровне с 16 МГц PIC-ом с 16 "разрядным" мотором. Давно не имел делов с "универсальными" МК, но поверить, что 10-долларовый современный АРМ проиграет в чём-то 10-долларовому ПИКу, не могу. :(Тогда арма может и хватит Значит, задача Ваша относится к разряду "простейших", как я и написал в первом своём посте.Поверьте, я не думаю о ней уничижительно. Но здесь как раз тот случай "утюга", где есть цепь циклически повторяемой последовательности, и, возможно, только одно по-настоящему внешнее событие (запрос UART). Часто так неполучаецца. Мне, например, при реализации DSP-шных задач требуется поддерживать множественные потоки входных и выходных данных, протоколы КАН и УАРТ, управляющие воздействия. Без прервыаний и ПДП была бы просто жопа - никакое ядро несправицца. |
|
|
2.7.2010, 1:07
Сообщение
#54
|
|
Активный участник Группа: Пользователи Сообщений: 2220 Регистрация: 26.5.2010 Из: Московская обл. Пользователь №: 165 |
2 Огурцов.
Повторюсь, но Ваша задача относится к классу жёстко детерминированных. То есть таких, для которых существуют "хорошие" алгоритмы, реализуемые без частой проверки условий (иногда их удаётся слабать вообще без команд условного перехода - ветвления!). Но это - редкость. Мне самому приходилось делать такие вещи. Но прерывания (от АЦП) всё-таки использовались, несмотря неа некоторае накладные расходы. Без них алгоритм был бы трудно реализуем. Про "контекст". Зарезервируйте несколько регистров под обработчики прерываний, и будет вам щастя. Она была бы простейшая, если б меги выпускались на 160МГц. Тогда я бы сделал абсолютно тупо, именно так, как вы и хотели. Оно и есть тупо, так как захотели Вы, или, более точно, как того требует Ваша задача.Да чего там, ни одного. У нас же буфер в приемнике, и входящий байт вполне может подождать. В том-то и дело.Один в Вашей задаче можно и подождать. А если не один, тогда как? ...Вы сути так и не уловили... Абижають, начальник. ...Я говорил про необходимость минимизации затрат на прерывания. Ещё раз: такая необходимость существует только в Вашем воображении.Современные микроконтроллеры эту необходимость учитывают. И компенсируют аппаратной поддержкой и тактовой частотой. А чем Вам АРМ не нравицца? Уверен, что найду дешевле, чем ваша мега. ...Очень хорошо, когда их нет совсем - появляется возможность построения настоящей, даже идеальной реал-тайм системы, с мгновенным откликом . Чушь.Реал-тайм системы с "мгновенным откликом" без прерываний вообще немыслимы. Только про утюги ненадо... ...Специально для вас повторюсь: Выделил для Вас. "Sigma выпустила многоядерный мультимедийный процессор для потребительской электроники" Центральное процессорное ядро системы работает на частоте 667 МГц (производительность 1330 DMIPS). Второй процессор обрабатывает прерывания реального времени и высвобождает центральный процессор от задач обмена по сети и вывода графической информации. Третье ядро управляет функциями защиты данных. -> ЗЫ. Вы хотя бы в общих чертах представляете, зачем этот многоядерный процессор вообще нужен? |
|
|
2.7.2010, 1:09
Сообщение
#55
|
|
сундук Группа: Пользователи Сообщений: 4043 Регистрация: 21.11.2009 Из: Ростов-на Дону Пользователь №: 15 |
А что с ним не так ? Я как раз на его брата, STM32F107 запал. Да, я уже понял... Вкратце причин было несколько. 1. Недоступность нормальных средств разработки. GNU средства не в счет. 2. Реальная производительность не намного выше, а то и ниже, чем у PIC24. 3. Большое число огрехов именно в исполнении ARM-ов фирмой ST. 4. Еще много чего по-мелочи... |
|
|
2.7.2010, 1:17
Сообщение
#56
|
|
Активный участник Группа: Пользователи Сообщений: 2220 Регистрация: 26.5.2010 Из: Московская обл. Пользователь №: 165 |
Вкратце причин было несколько. Я своих на NXP подсадил.Начальство, правда, противилось: спрыгнуть с PowerPC на ARM - некошерно, типа. Потом зделали экземпляр, померяли письками... АРМ оказался быстрее, при том, что в 3 раза дешевле. При энергопотреблении в 4-5 раз меньше! Начинали с LPC3180, а щаз будем выпускать продукцию на изрядно обезглюченном LPC3250. Нам нужна плывучка, и MMU - довольно тяжёлая ОС реального времени и математические расчёты, не считая поддержки интерфейсов. Уникально мало жрёт, а в партии 1000+ штук цену обещали 7-8 долл. Сам больше DSP занимаюсь - ADSP-BF5xx и ADSP-2146x. Там без DMA и прерывний - никуда. Разве что утюг... ЗЫ. Была ошибка в наименованиях - исправил. Сообщение отредактировал Stanislav_GS - 2.7.2010, 1:30 |
|
|
2.7.2010, 3:01
Сообщение
#57
|
|
Активный участник Группа: Пользователи Сообщений: 2220 Регистрация: 26.5.2010 Из: Московская обл. Пользователь №: 165 |
Как бы вам объяснить. 500кбод, если использовать прерывания, сложат avr как карточный домик. В отличие от опроса с частотой 62.5кГц. Чушь собачья.Частота прихода байтов по UART при скорости в 500 кбод составит 45 455 посылок в секунду. По времени это ровно 22 микросекунды. Допустим, нам по УАРТу приходит сообщение длиной в 3 байта. Довольно редко, но приходит. Интересно было бы узнать, как вы собираетесь его обрабатывать в цикле 62,5 мкс. Нет, и еще раз нет. Иначе бы не изобретали многоядерники. Поймите, что площадь ядра во много раз меньше общей площади кристалла (какбэ памяти, в основном), поэтому увеличение количества ядер на себестоимость не влияет. А вот частоту особо не разгонишь - мешают технологии и потребление. Молодой человек, вы совершенно не понимаете, для чего делают многоядерники.Когда оторвётесь от уровня утюгов, тогда и поговорим. ...Слабо. Вьюноша, вы слишком самонадеяны....Нужны 3 канала PWM c дедтаймом (для BLDC), CAN, ADC, DAC, компараторы, датчик температуры, маленький корпус с большим шагом пинов. В идеале - замена atmega32m1 Та-ак, интересно.Сталыть, Вы собираетесь управиться с этим хозяйством в цикле из 256 тактов на атмеге 32м1, верно? АРМ, способный к подобным подвигам, конечно, есть, но подожду с ответом. Не знаю, про что это. Про Ваши прожэкты....Именно что - основное ядро освобождено от прерываний. А если еще немного подумать, то критичные прерывания так же можно оформить отдельным потоком с выделенным ядром на каждое. Ещё раз - бред.Вы утверждали, что прерывания не нужны вообще. Носом ткнуть, или сами найдёте? Преимущества и недостатки многоядерных систем, уж извините, на Вашем уровне обсуждать я не способен. |
|
|
2.7.2010, 3:02
Сообщение
#58
|
|
ДИКТАТОР Группа: Мод Сообщений: 23809 Регистрация: 20.11.2009 Из: Житомир Пользователь №: 3 |
Господа профессионалы, не могли бы учитывать наличие на форуме начинающих?
Понял почти все, но с трудом... техника более менее понятна, а вопрос накала страстей остался непонятым... ну, ладно, эмоции к теме не относятся... у меня, еще предначинающего, вопрос - в каких процессорах сколько тактов идет на вход и выход из прерывания, со всей обслугой, но не считая собственно обработчика... ? И второй - постоянная это величина или зависит от того, считал ли процессор в основном цикле или находился где-то в третьей по счету вложенной подпрограмме... И третий, последний: не получается ли так, что когда глубоко залез в подпрограммы, то для прерывания ресурсов не останется? ну, к примеру, на ЯВУ , наверное, не всегда можно учесть это? |
|
|
2.7.2010, 3:30
Сообщение
#59
|
|
Активный участник Группа: Пользователи Сообщений: 2220 Регистрация: 26.5.2010 Из: Московская обл. Пользователь №: 165 |
у меня, еще предначинающего, вопрос - в каких процессорах сколько тактов идет на вход и выход из прерывания, У разных процов по разному.со всей обслугой, но не считая собственно обработчика... ? Общее для всех - при поступлении запроса на разрешённое прерывание, сохраняется содержимое программного счётчика для возврата в основную программу. Затем осуществляется переход на адрес обработчика. При выходе из прерывания содержимое программного счётчика восстанавливается. Вся обслуга делается уже мануально. У некоторых процов можно переключить банки регистров (самый быстрый способ), для иных - использовать выделенные регистры (тоже быстро), в остальных - сохранять какие-то регистры в стеке. Атмега имеет накладных расходов: 4 такта на вход в прерывание, и 4 такта на выход, если склероз не изменяет. Время реакции зависит от текущей выполняемой операции и состояния процессора. ...И третий, последний: не получается ли так, что когда глубоко залез в подпрограммы, то для прерывания ресурсов не останется? Если прерывания разрешены, глубина нахождения в подпрограмме не влияет на вызов прерывания (за редким исключением, типа ADSP-21xx, имеющих АППАРАТНЫЕ стеки небольшой глубины, но ах..но шустрые).У процессора Блэкфин тоже есть микро-аппаратный стек в виде регистра возврата, куда переписывается программный счётчик. Это несколько экономит время реакции на прерывания, но у современных процов с большими мегагерцами оно, в основном, определяется глубиной программного конвейера (при входе в обработчик и выходе из него, его чистят и заполняют потом по новой). Мегагерцы, всё же, берут своё. У ххх86 проца, равно как и атмеги, содержимое PC кладётся в память (стек). ...ну, к примеру, на ЯВУ , наверное, не всегда можно учесть это? ЯВУ здесь не при чём.Организация управления процессами (в т.ч., и прерываниями) лежит целиком на программистах (особенно твердолобых, и не признающих ОС). ЯВУ только предоставляют удобные средства для его воплощения. Но я всё же предпочитаю не использовать стандартные "обёртки", а делать обработчики прерываний на нижнем уровне (ассемблер). Именно ради времени выполнения. Использование РТОС избавляет от рутины и уменьшает вероятность ошибок. В ней уже всё какбы сделано за тебя, однако, есть при этом и накладные расходы, иногда неприемлемые. |
|
|
Гость_MrYuran_* |
2.7.2010, 6:43
Сообщение
#60
|
Гости |
1. Недоступность нормальных средств разработки. GNU средства не в счет. Как раз-таки GNU средства - единственно нормальные. И абсолютно универсальные. AVR, MSP, ARM - практически один и тот же инструмент, разница в нюансах (зависит от платформы) Плюс, широчайший выбор бесплатных и очень качественных IDE. В отличие от того же ИАРа, на который стороннюю IDE можно только за уши пришить, и то кое-как, или MSVS, к которой мой коллега всё-таки прицепил GСС, но тоже через одно место. |
|
|
Текстовая версия | Сейчас: 29.3.2024, 7:21 |