триггер пендсв из svc ||триггерная ручка вручную Cortex M4 - PullRequest
0 голосов
/ 09 марта 2019

В настоящее время я работаю над кортексом руки m4. Я реализовал простое переключение контекста, вызвав PendSV (который выполняет переключение) из прерывания SysTick. Я пытался реализовать функцию void delay(int ms) через SVC. Это должно работать так:

  1. Триггер SVC
  2. Функция Delay записывает задержку в task_info
  3. Планировщик уменьшает задержку в task_info при следующем повороте задач и пропускает задачу.
  4. Когда задержка равна 0, задание снова назначается нормально

Проблема в том, что я хотел бы вызвать переключение контекста после того, как функция задержки записала соответствующее значение в task_info. В противном случае задержка будет действовать только после следующего переключения контекста. Я пытался вызвать PendSV от прерывания SVC. К сожалению, это, похоже, не работает.

С моей прежней реализацией функции задержки я обнаружил ошибки использования памяти, когда более чем одна задача вызывала функцию одновременно.

В связи с тем, что текущая идея более точна во времени, я бы хотел, чтобы она сработала. Помощь очень ценится.

PS: просто для ясности, значение задержки в int ms умножается на коэффициент, полученный из тактовой частоты и частоты SysTick.

...