Я работаю над встроенным проектом, который работает на микроконтроллере ARM Cortex M3. В некотором коде, предоставленном нашим поставщиком, используется функция задержки, которая устанавливает встроенный таймер аппаратного обеспечения и затем вращается до истечения таймера. Обычно это используется для ожидания от 1 до пары сотен микросекунд. Эти задержки происходят почти потому, что они ждут на каком-то регистре, чипе или шине, чтобы завершить действие, и нужно подождать не менее данного количества микросекунд. Аппаратный таймер также, по-видимому, стоит не менее 6 микросекунд для установки.ARM встроенный таймер аппаратного таймера против счетчика циклов процессора
В многопоточной среде это проблема, потому что есть N потоков, но только 1 аппаратный таймер. Я могу отключить прерывания, когда таймер используется для предотвращения переключений контекста и, следовательно, условий гонки, но кажется немного уродливым. Я думаю о замене функции, которая использует аппаратный таймер, с функцией, которая использует счетчик циклов процессора ARM (CCNT). Есть ли недостатки, которые у меня отсутствуют или другие альтернативы? Очевидно, функция счетчика циклов требует, чтобы она была настроена на правильную частоту процессора, которая никогда не изменится для нашей системы, но я предполагаю, что ее можно было бы программно определить при загрузке аппаратного таймера.
Какой тип ARM M3 имеет единый таймер для оборудования? Вы говорите, что у вас многопоточная среда, поэтому необходим таймер для планировщика: вы говорите, что единственный таймер у вас есть тот, который назначен планировщику? – LPs
На самом деле есть 2 аппаратных таймера, а также прерывание системы, которое срабатывает с интервалом в 1 миллисекунду. Прерывание тика системы не является таймером, вы не можете запросить, сколько времени прошло, вы просто получаете прерывание каждые 1 миллисекунду, которое используется для информирования упреждающего планировщика. Разрешение на 1 миллисекунду также слишком велико для задержек, которые меня интересуют. – satur9nine
Занятое вращение такого долгого времени довольно плохо подходит для современных MCU. Если они будут использовать такие материалы, я бы с подозрением относился к качеству остальных. – Olaf