Значение таймера ARM SysTick по сравнению с другими таймерами?

Я исхожу из 8-битных микроконтроллеров и использовал системный таймер для генерации периодического прерывания, которое, по-видимому, является мотивацией таймера Cortex M SysTick?

Есть ли какое-то архитектурное значение в использовании таймера SysTick по сравнению с любым другим таймером на микроконтроллерах Cortex M?

Это просто вопрос предпочтения кодирования, что программисты использовали таймер SysTick в качестве основного таймера каждые несколько мс?

Справочное руководство на 800 страниц почти ничего не говорит о SysTick, кроме того, как вы применяете post/prescalars.

Я вижу, что это прерывание с высоким приоритетом по умолчанию, так что это своего рода путь наименьшего сопротивления для системного тика. Но приоритет прерывания можно установить.

(Происхождение этого вопроса заключается в том, что я использую STM32CubeMX для создания шаблона проекта, и когда вы добавляете FreeRTOS, Cube генерирует предупреждение о том, что FreeRTOS должна использовать отдельный таймер от SysTick... что заставляет меня задаться вопросом, есть ли что-то еще в игре здесь?Я просто предположил, что вы будете использовать SysTick, потому что это «то, как все делается» ...).

SysTick — это стандартный таймер, определяемый ARM. В то время как другие являются периферийными устройствами, специфичными для микроконтроллеров, а не частью ядра.
У него лучшая задержка, чем у периферийного таймера? Поскольку это стандарт для каждого Cortex M, мотивация выше, чем переносимость кода?
Я бы предположил, что разница в задержке незначительна. Это часть основного определения. Я бы сказал, что ядро ​​в своем минимуме должно иметь минимальный набор HW, чтобы иметь возможность запускать минимальное SW. Без таймеров вообще не получится.
И я думаю, что это всегда разработано с учетом ОС. Таким образом, можно иметь несколько универсальное переносимое ядро ​​и просто иметь «драйверы» для переменного оборудования.
@ Leroy105 Другими словами, вы должны понимать, что ARM — это компания (проданная год назад?), которая НЕ производит процессоры, а вместо этого предлагает интеллектуальную собственность (маски и / или синтезируемый источник) тем, кто будет непосредственно производить такие устройства. или посредничество в изготовлении. Там они остаются вне конкуренции. Те, кто покупает IP у ARM, добавят свои собственные периферийные устройства, чтобы отличаться от других. SysTick является частью ARM CORE IP. Так есть у всех производителей ARM. Однако не у всех ARM есть что-то еще. Это делает SysTick уникальным. Есть смысл?
Да, это имеет смысл. Меня напугала ошибка FreeRTOS из-за куба. Я как бы предполагал, что FreeRTOS будет синхронизироваться с помощью SysTick. Возможно, это так, и ошибка действительно означает что-то другое. Я переношу некоторый код, чтобы изучить RTOS и познакомиться с Cortex M. Фактическим продуктом по-прежнему будет 8051.
Я твердо верю, что FreeRTOS синхронизируется SysTick.
@Jonk - да, я полностью понимаю этот конец. Я не знал, что это была определенная основная функциональная единица каждого Cortex M. Я просто вижу какой-то 24-битный таймер, который используется в каждом примере новичка, и вы начинаете задаваться вопросом, есть ли какая-то магическая сила или что-то в этом таймере...
@ Leroy105 Если бы я писал ОС (а я делаю это часто), то я бы судил о SysTick на основе того, чего я пытаюсь достичь. Если бы я не хотел поддерживать использование различных таймеров, но хотел "жестко запрограммировать" таймер, на который я мог бы рассчитывать, я бы использовал SysTick. Но если бы я хотел обеспечить «конфигурируемость», то я бы позволил тому, кто компилирует ОС, указать один из них для использования, позволяя им использовать таймеры конкретного поставщика на досуге.
На днях мне, так сказать, придется выпустить свою ОС на волю. Он разработан, чтобы разрешить все виды выбора конфигурации, которые не предлагает даже FreeRTOS, и поддерживает чрезвычайно крошечные чипы почти без оперативной памяти (вместо этого позволяя хранить некоторые постоянные данные для каждого процесса во флэш-памяти). Поддерживаются приоритеты, например. Но если вы знаете количество реальных процессов во время компиляции и можете указать их приоритеты, тогда нет никаких причин, по которым эти значения не могут быть во флэш-памяти. В любом случае, я выпущу его, если у меня когда-нибудь будет время, чтобы лучше задокументировать его.
@jonk OT: Это коммерческий/частный проект? Или личное / с открытым исходным кодом?
@ЕвгенийШ. Это мой собственный, который я начал разрабатывать примерно в 1990 году, когда 32-битные процессоры не часто использовались во встроенных устройствах. В результате мне пришлось тщательно изолировать каждую деталь. Вы даже можете настроить, хотите ли вы односвязные или двусвязные списки (ОЗУ и компромисс между скоростью вставки/удаления), просто используя #define, чтобы выбрать, по какому пути вы хотите идти. Он поддерживает только совместную работу или упреждение (хотя упреждение имеет значение для библиотек). И т. д. Все настраивается вплоть до уровня байтов. Я владею им, но не чувствую себя собственником.
@ЕвгенийШ. FreeRTOS часто синхронизируется с помощью SysTick, но не всегда. Я работаю над приложением с низким энергопотреблением, в котором SysTick отключается в некоторых состояниях, поэтому FreeRTOS синхронизируется одним из других таймеров.
@brhans Это стандартная функциональность или вам пришлось расширить ядро?
@ЕвгенийШ. Небольшой обзор вы можете прочитать в обзоре, написанном еще в 2008 году .
@jonk Круто, спасибо. Но не такой уж и маленький :)
@ЕвгенийШ. Вы также найдете его «частично отредактированным». Это просто то, что я начал писать, думая, что смогу выпустить это потом. Затем работа помешала, и я остановил усилия. (Например, вы увидите внутри него «заметки для себя», которые нуждаются в дальнейшем обсуждении и расширении.) Частично это сильно расширилось во время моей работы над медицинскими инструментами, где я не мог ни купить, ни использовать коммерческий O/ S, так как это были критически важные устройства, требующие подтверждения выполнения КАЖДОЙ СТРОКИ КОДА.
Совершенно не по теме, может ли кто-нибудь взвесить это: что более эффективно, запускать Cortex M на самой низкой частоте, необходимой для задачи, и переводить его в спящий режим (при условии оптимального отключения периферийных устройств и т. д.) или запускать Cortex M на максимальной скорости. и положить его спать. На моем 8051 я обнаружил большую эффективность на самых медленных тактовых частотах. ПОС быстрее скорости. Кортекс миссис?
@ Leroy105 Лучше сформулируй это как другой вопрос, но определи «эффективный» раньше.
Цените любую информацию: electronics.stackexchange.com/questions/350595/…
@ЕвгенийШ. Расширен поставщиком микроконтроллера (SiLabs) как часть их «стека».
@ Leroy105, что сказано в техническом описании детали? Cortex-M - это просто ядро, рука не производит чипы, они делают IP, поставщик чипов покупает эту логику и делает чип на каком-то литейном заводе с каким-то процессом, утечкой и т. Д.

Ответы (1)

Как ответили в комментариях.

SysTick, если он присутствует, является частью ядра ARM, остальные таймеры предоставляются поставщиком чипа. SysTick имеет более прямое событие (например, прерывание) для ядра, тогда как другие времена приходят через прерывания, но это не имеет значения. И другие таймеры, как правило, имеют больше возможностей.

Вы пометили Cortex-M, так что это, скорее всего, микроконтроллер, что означает, что вы можете делать «голое железо», что означает, что вы можете делать все, что хотите, вы решаете, какие таймеры делают что. Если вы возьмете уже созданную RTOS или ОС для этого чипа, то они уже решили, какие ресурсы они хотят потреблять и почему. Прежде всего мнение, основанное на том, что идет.

Таймер systick намного проще и проще в использовании, и он не всегда присутствует, некоторые ядра вообще не имеют его в качестве опции, а некоторые в качестве опции (поставщик чипа должен решить во время компиляции), поэтому он имеет это преимущество. , хотя в некоторых чипах могут быть и такие же простые таймеры.

Таймеры поставщиков чипов могут иногда управлять выводами ввода-вывода или иметь какое-то внешнее участие, когда систик, насколько я знаю, содержится в ядре.