Какова философия или подход, применяемый для реализации чрезвычайно важных по времени функций в микроконтроллерах, если они есть?
Я работаю над проектом, предусматривающим вывод точного прямоугольного сигнала различной частоты. Я сделал это, используя таймер и функцию прерывания. Однако даже для правильной реализации мне пришлось откалибровать смещение по числу тактов, взятых во время процедуры обслуживания прерывания. Я предполагаю, что эта точность будет нарушена из-за наличия другой такой формы волны (скажем, частота должна быть изменена в одно и то же время). Наличие каждого микроконтроллера для каждой такой критически важной функции кажется расточительным.
Возьмем другой пример реализации функции часов (как в чч: мм: сс). Я не могу себе представить, что у каждого микроконтроллера / компьютера высокого уровня есть специальная микросхема часов реального времени, предназначенная исключительно для отслеживания времени. Однако мне трудно представить, чтобы его точно измеряли с помощью основного процессора, который занят обслуживанием множества функций, которые тем временем выполняются с асинхронными интервалами. Я полагаю, что при подсчете времени возникнут ошибки смещения, которые меняются в зависимости от выполняемых функций.
Существует ли процесс проектирования или подход к сдерживанию или предоставлению допуска к достижимой точности? Или у кого-нибудь есть какие-либо указатели или предложения, где я мог бы найти больше информации по этому поводу?
источник
Ответы:
Для вывода точных прямоугольных волн используйте оборудование. Большинство микроконтроллеров имеют встроенные генераторы ШИМ, которые могут сделать это. Вы устанавливаете период и время в тактах, а оборудование делает все остальное. Чтобы изменить его на новую частоту, запишите новый период в регистр периодов и половину периода в регистр рабочего цикла.
Что касается часов реального времени, теряющих время из-за другой загрузки процессора, они не будут работать таким образом, если они не очень плохо написаны. Обычно аппаратное обеспечение используется для создания периодического прерывания, кратного нескольким секундам, и микропрограмма делится дальше. Это работает независимо от того, насколько занят процессор, так как прерывание запускается, когда это необходимо. Пока подпрограмма прерывания занимает небольшую долю от общего числа циклов, большая часть процессора все еще применяется для выполнения задачи переднего плана.
Есть также способы сохранить время, опрашивая через несколько неизвестных интервалов. У вас есть оборудование, которое ведет подсчет, и всякий раз, когда вам удается обновить часы, вы обновляете их на основе общего числа прошедших тактов. Пока эта подпрограмма выполняется достаточно часто, так что, какой бы счетчик ни использовался, между циклами не происходит перенос, не теряется время.
источник
Ключевое слово здесь - «аппаратная поддержка». Для чего-либо серьезного вам понадобится поддержка оборудования в микроконтроллере. Наиболее распространенной встроенной периферией является схема таймера, которая работает относительно точно и без помех от других операций процессора.
Опираясь на это, вы можете иметь много функций, выполняющихся со среднесрочным временем, точно так же, как источник синхронизации вашего контроллера.
Но: Как вы, возможно, уже испытали, помимо среднесрочной или долгосрочной точности, в программной обработке аппаратных событий (включая такие вещи, как переполнение таймера) всегда присутствует дрожание синхронизации . Это вызвано различными возможными состояниями выполнения в то время, когда происходит событие, которое приводит к различным задержкам, пока не произойдет фактический ответ на событие.
Таким образом, суть заключается в следующем: для всего, что связано с требованиями к высокоскоростному или почти нулевому джиттеру, необходима аппаратная поддержка. Многие аппаратные периферийные устройства включены в большинство микроконтроллеров, например, UART и т. Д. Чем мощнее и дороже микроконтроллер, тем больше встроенного аппаратного обеспечения. Если ваш микроконтроллер не предоставляет необходимого вам оборудования, вам действительно придется подумать о внешнем выделенном оборудовании для этой задачи.
источник
Делайте как можно больше с оборудованием, особенно для критически важных функций. Все микроконтроллеры имеют таймеры / счетчики, специально созданные для подсчета и учета времени событий.
Кроме того, это действительно очень широкий вопрос. Так что нет хорошего ответа.
Единственный верный ответ - опыт. Попробуйте, профилируйте, подчеркните, исправьте. Вы должны определить области кода с высоким уровнем использования. 20% программного обеспечения работает 90% времени, означает, что каждая удаленная инструкция повышает производительность.
Хороший дизайн всегда сбалансирован аппаратно, программно и памятью. Это относится ко всем микропроцессорам, но особенно к микроконтроллерам. Максимум один или неэффективно использовать один, и у вас будет плохой продукт. По мере увеличения плотности кремния все больше и больше функций включается в аппаратные средства микроконтроллеров. Но больше возможностей означает больше ожиданий. Удвойте встроенную память, и вы добавите функцию, которая ее использует.
Все ISR имеют служебные данные, которые зависят от регистров, используемых ISR. Если задержка для сохранения состояния машины значительна по сравнению с обслуживанием ISR для функций, критичных ко времени, ваша конструкция может не масштабироваться. Отсюда и общее согласие с ответами на использование оборудования.
Использование программных прерываний может уменьшить раздувание состояния машины ISR.
Все регистры для Inc_Seconds () должны быть отправлены, когда они используются только один раз каждые 150 циклов.
Теперь задержка срабатывает только один раз каждые 150 циклов.
Если вы применяете часы реального времени в формате чч: мм: сс, имеет ли значение, что они отключены на 50 мс. Никто не обнаружит ошибку. Это, конечно, не оперативная задача в реальном времени.
Что касается событий, которые должны произойти одновременно. Должны ли они? Если они должны, то аппаратный дизайн должен заботиться об этом. В противном случае должен произойти некоторый программный компромисс. Если вы не можете установить два бита одновременно, установите один бит. Следующая инструкция задает другой. Точность одного такта на процессорах RISC. Я бы сказал, что это было достаточно хорошо.
источник
Для прямоугольного сигнала вам следует использовать периферийное устройство ШИМ, которое подключено к вашему XTAL с использованием какого-либо счетчика, чтобы знать, когда нужно циклически (для установки частоты). Каждый лист данных расскажет вам, как это сделать :)
Да, для сохранения времени вам понадобится RTC, чтобы делать это близко к точному, если вы не идете ассемблером и автором кодов операций, чтобы вручную знать точное время выполнения каждой команды в любом пути выполнения. Это, вероятно, также проливает новый свет на проверенное и верное утверждение «goto считается вредным».
источник