На платформе cortex-m3, почему UCOS-III не использует SVC для выполнения pendsv? - PullRequest
0 голосов
/ 21 мая 2018

Недавно я читаю исходный код UCOS-III, и у меня возник вопрос о переключении задач UCOS-III, когда он работает на платформе Cortex-M3.Он использует PendSV для переключения задач, напрямую записывая регистр SCB_ICSR (контроль прерываний и регистр состояния), но для доступа к регистру SCB_ICSR требуется уровень привилегий.Это означает, что процессор работает в режиме процесса на уровне привилегированных операций без исключений и прерываний, что я не считаю безопасным.Почему UCOS-III не использует SVC для выполнения pendsv?Это вопрос эффективности?Может ли кто-нибудь объяснить это мне?Спасибо.

Справочная информация: Программное обеспечение: UCOS-III

Аппаратное обеспечение: Cortex-M3 (STM32F103)

Код:

.thumb_func
OSStartHighRdy:
LDR     R0, =NVIC_SYSPRI14                                  @ Set the PendSV 
exception priority
LDR     R1, =NVIC_PENDSV_PRI
STRB    R1, [R0]

MOVS    R0, #0                                              @ Set the PSP to 0 for initial context switch call
MSR     PSP, R0

LDR     R0, =OS_CPU_ExceptStkBase                           @ Initialize the MSP to the OS_CPU_ExceptStkBase
LDR     R1, [R0]
MSR     MSP, R1

LDR     R0, =NVIC_INT_CTRL                                  @ Trigger the PendSV exception (causes context switch)
LDR     R1, =NVIC_PENDSVSET
STR     R1, [R0]

CPSIE   I                                                   @ Enable interrupts at processor level

Я думаю, что этот методлучше: Переключение задач Cortex-M3 с использованием SVC и Pensv

  1. Задача A вызывает SVC для переключения задач (например, ожидая завершения какой-либо работы).
  2. ОС получает запрос, готовится к переключению контекста и ожидает исключения PendSV.
  3. Когда ЦП выходит из SVC, он немедленно входит в PendSV и переключает контекст.
  4. Когда PendSV завершает работуи возвращается к уровню потока, он выполняет задачу B.
  5. Происходит прерывание и вводится обработчик прерывания.
  6. Во время выполнения процедуры обработчика прерывания возникает исключение SYSTICK (для тика ОС).
  7. ОС выполняет основную операцию, затем ожидает исключения PendSV и готовится к переключению контекста.
  8. При выходе из исключения SYSTICK возвращается к процедуре обработки прерывания.
  9. Когда процедура обработки прерывания завершается, PendSV запускается и выполняет фактические операции переключения контекста.
  10. Когда PendSV завершается, программа возвращается к уровню потока;на этот раз он возвращается к заданию A и продолжает обработку.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

SafERTOS, например, использует MPU на Cortex-M3.

0 голосов
/ 22 мая 2018

Если вы не используете расширения MPU, на самом деле не так уж много различий между работой в пользовательском или привилегированном режиме.Да, работать в пользовательском режиме немного безопаснее, поскольку вы не можете изменять все регистры, но затем вам нужно предоставить вызов SVC, чтобы иметь возможность повысить привилегию и иметь возможность создавать задачи, которые находятся в пользовательском или привилегированном режиме.Я ожидаю, что это обеспечено, когда у вас есть расширения MPU.

Я не знаю UCOS-III, но я бы предположил, что все задачи выполняются с привилегиями, как и большинство ОСРВ Cortex-M, если только они не поддерживают MPU.

...