Axel 1 23 февраля Опубликовано 23 февраля · Жалоба gcc отказывается компилировать svc для Cortex-M0+ (конкретно - STM32G071): "Error: SVC is not permitted on this architecture". Вызов нужен для преключения контекста в операционке. Кто-нибудь знает почему и как починить (или обойти)?. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 23 февраля Опубликовано 23 февраля · Жалоба А почему не переключаете контекст в PendSV? SVC не нужен для переключения контекста ОС (имхо). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 23 февраля Опубликовано 23 февраля · Жалоба SVC исторически присутствует в коде (TNeo) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 68 23 февраля Опубликовано 23 февраля · Жалоба SVC обычно применяется для переключения из режима User в режим Supervisor, позволяющий использовать привилегированные инструкции. В больших ОС типа Linux SVC используется в системных вызовах. В МК Cortex, как верно указали выше, для переключения контекстов предназначено прерывание PendSV. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 235 23 февраля Опубликовано 23 февраля · Жалоба Формально SVC должен поддерживаться - https://developer.arm.com/documentation/dui0497/a/the-cortex-m0-instruction-set/miscellaneous-instructions/svc?lang=en Проверил, мой gcc (arm-none-eabi-gcc (15:12.2.rel1-1) 12.2.1 20221205) с ключами -march=armv6-m -mcpu=cortex-m0 -mfloat-abi=soft -mthumb прекрасно компилирует следующий код: asm volatile ("svc 0 \n"); ЧЯДНТ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 23 февраля Опубликовано 23 февраля · Жалоба У меня те же ключи, только gcc постарше - 11.2. Попробую обновить. Пока заменил на PendSV - вроде не обиделась. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 24 февраля Опубликовано 24 февраля · Жалоба Обновил gcc до 13.2 - все равно не катит. 14 hours ago, makc said: asm volatile ("svc 0 \n"); ЧЯДНТ? Различие только в том, что у меня это в ассемблерном файле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 235 24 февраля Опубликовано 24 февраля · Жалоба 1 час назад, Axel сказал: Обновил gcc до 13.2 - все равно не катит. Различие только в том, что у меня это в ассемблерном файле. Тогда речь идёт не о GCC, а о GAS из комплекта Binutils. С этого и нужно было начинать. Добавьте в начало файла строчку: .cpu cortex-m0 И попробуйте собрать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 24 февраля Опубликовано 24 февраля · Жалоба Таки да, полетело. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться