реклама на сайте
подробности

 
 
> вызов супервизора SVCall в STM32
FFFF
сообщение Aug 31 2018, 10:27
Сообщение #1





Группа: Участник
Сообщений: 9
Регистрация: 26-08-18
Пользователь №: 107 048



В cortex M есть команда вызова системных функций, SVC
при исполнении этой команды процессор переходит в обработчик исключения супервизора.

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

как правильно должно это все работать по задумкам разработчиков?

Сообщение отредактировал FFFF - Aug 31 2018, 10:38
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Arlleex
сообщение Sep 2 2018, 08:50
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Цитата(FFFF @ Sep 1 2018, 18:21) *
А меня жаба душит транжирить SVC на такое... Вообще не хочу, чтобы FreeRTOS использовала SVC.

а Вы как бы распорядились SVC?

Сам факт того, что это прерывание используется только 1 раз... Ужас.
Даже если оно мне не нужно - у меня внутренний когнитивный диссонанс biggrin.gif

Цитата(jcxz @ Sep 1 2018, 19:27) *
Что-то у Вас мухи с котлетами намешаны wink.gif
Зачем ещё и указатель стека прерываний на начало стека из таблицы прерываний ставить?
Это вобщем-то не относится к данной задаче. Хотя конечно хозяин - барин.

...

Опять мухи с котлетами. Тогда сюда ещё до кучи и инициализацию пинов впендюрить можно. laughing.gif

...

Зачем?

Не мое. Это я сейчас порт на Cortex-M4 открыл и сюда вставил laughing.gif Нужно оно там или не нужно - это другой вопрос, конечно же.

Цитата
Да и вроде - невозможно так записать что-то в CONTROL. Нужно юзать EXC_RETURN.

В привилегированном режиме можно. EXC_RETURN используется при входе в прерывание и выходе из него.

Цитата
Ну вообще-то тут R0-R3,R12,LR,XPSR совершенно лишние.
Вроде как достаточно восстановить R4-R11, занести в LR нужное значение и сделать BX LR (сымитировать возврат из прерывания с переключением на нужный стек и в нужный режим).

В этом и фишка, что я хочу полностью избавиться от SVC, передать управление на первую задачу без использования прерывания. Поэтому я и предложил восстановить весь регистровый стек, потому как мы не в прерывании еще находимся, поэтому R0-R3, R12, LR, XPSR восстановить нужно будет.
Интересно вот, что будет если в привилегированном режиме потока записать EXC_RETURN в LR со значениями (PSP + Thread Mode) и сделать BX LR... Какой-нибудь Usage Fault, скорее всего.

Цитата
В результате режим процессора Вы не переключили и он остался в handler-режиме.
Для переключения нужно юзать BX LR с правильным значением в нём.
И опять же - ISB тут лишняя.

Повторюсь, что режим процессора должен оставаться в Thread. Если бы прерывание было - как в исходном примере, то я не задался бы целью обойти использование SVC sad.gif
ISB лишняя, да... Там весь порт кривущий, но работает. Вычищаю потихоньку, что нужно мне. Вот и решил заморочиться, избавившись от такого не очень, на мой взгляд, разумного использования SVC. Я еще понимаю, если бы оно вызывалось раз в день. Но тут только при старте приложения...

Цитата
PS: Да и, как видно по приведённому Вами коду, FreeRTOS использует не всю SVC, а только SVC 0. Остальные 255 - свободны. Неужто Вам 255 не хватит? Для чего???

Мне-то хватит. Просто хочу свои SVC как можно короче сделать, без лишних телодвижений. А подход, предложенный индусами-портировщиками, мне не очень нравится. Поэтому и гадаю, как красиво сделать wink.gif

Цитата
В uCOS вообще не заморачиваются: они изначально заносят в PSP=0, а потом просто программно возбуждают PendSV (как для любого программного переключения контекста), а в ISR PendSV делают проверку если PSP==0 (начальный старт первой задачи) - просто пропускают сохранение контекста сразу переходя к восстановлению контекста самой приоритетной задачи.
Конечно при этом в переключатель контекста добавляется одна лишняя команда, но имхо - это несущественно.

Воот. Вот это уже другое дело. Я тоже рассматривал такой вариант, но как раз лишние пару инструкций проверки травят душу перфекциониста biggrin.gif
Вот и думаю, что это сделать, скорее всего, можно без прерываний и лишних телодвижений в переключателе контекста (я хотел бы, чтобы он был как можно короче и быстрее). Просто нужно исхитриться и восстановить весь контекст выполнения первой запускаемой задачи.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 2 2018, 21:19
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Arlleex @ Sep 2 2018, 11:50) *
Воот. Вот это уже другое дело. Я тоже рассматривал такой вариант, но как раз лишние пару инструкций проверки травят душу перфекциониста biggrin.gif

Вобщем - разбередили Вы мне душу... biggrin.gif
Взялся я за свой uCOS-II и доработал его переключатель контекста и процедуру старта многозадачности. Теперь работает без занесения спец.значения в PSP и проверки его при каждом вызове PendSV. Ну и ещё много что почистил, оптимизировал.
Стартует теперь очень просто - без всяких доп.прерываний и спец.значений. Просто внутри ISR PendSV делается ORR LR, LR, #4 и всё. cool.gif
Хотя надо будет ещё тщательнее всё проверить....
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Sep 3 2018, 04:57
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Цитата(jcxz @ Sep 3 2018, 00:19) *
Вобщем - разбередили Вы мне душу... biggrin.gif
Взялся я за свой uCOS-II и доработал его переключатель контекста и процедуру старта многозадачности. Теперь работает без занесения спец.значения в PSP и проверки его при каждом вызове PendSV. Ну и ещё много что почистил, оптимизировал.
Стартует теперь очень просто - без всяких доп.прерываний и спец.значений. Просто внутри ISR PendSV делается ORR LR, LR, #4 и всё. cool.gif
Хотя надо будет ещё тщательнее всё проверить....

Зато внутренний перфекционист ликует теперь biggrin.gif
Сегодня-завтра поковыряю свой переключатель контекста и процедуру старта...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- FFFF   вызов супервизора SVCall в STM32   Aug 31 2018, 10:27
- - AlexandrY   Цитата(FFFF @ Aug 31 2018, 13:27) как пра...   Aug 31 2018, 11:27
- - x893   Как это сделано в любой RTOS.   Aug 31 2018, 11:44
|- - AlexandrY   Цитата(x893 @ Aug 31 2018, 14:44) Как это...   Aug 31 2018, 12:13
- - FFFF   спасибо. и как это сделано в любой rtos? системная...   Aug 31 2018, 11:51
- - x893   Там в основном ассемблер. Для изучения сильно помо...   Aug 31 2018, 11:54
- - jcxz   Цитата(FFFF @ Aug 31 2018, 13:27) что дол...   Aug 31 2018, 12:17
|- - Arlleex   Цитата(jcxz @ Aug 31 2018, 15:17) Видимо ...   Sep 1 2018, 13:44
- - Arlleex   Открыл вот порт FreeRTOS на Cortex-M4. В этой RTOS...   Sep 1 2018, 14:48
|- - jcxz   Цитата(Arlleex @ Sep 1 2018, 17:48) ldr r...   Sep 1 2018, 16:27
- - FFFF   А меня жаба душит транжирить SVC на такое... Вообщ...   Sep 1 2018, 15:21
- - FFFF   если передавать номер функции в регистре перед выз...   Sep 2 2018, 06:03
|- - AlexandrY   Цитата(FFFF @ Sep 2 2018, 09:03) если пер...   Sep 2 2018, 06:38
- - FFFF   собственно я сам до этого дошел, думаю это лежит н...   Sep 2 2018, 06:49
|- - jcxz   Цитата(Arlleex @ Sep 2 2018, 11:50) В при...   Sep 2 2018, 10:04
- - Arlleex   В общем, выделил часок на свои изыскания и, опреде...   Sep 3 2018, 08:05
- - AlexandrY   Цитата(Arlleex @ Sep 3 2018, 11:05) [/lis...   Sep 3 2018, 08:10
|- - Arlleex   Цитата(AlexandrY @ Sep 3 2018, 12:10) Тяж...   Sep 3 2018, 09:46
- - jcxz   Цитата(Arlleex @ Sep 3 2018, 11:05) [*]Ка...   Sep 3 2018, 10:01
- - Arlleex   Цитата(jcxz @ Sep 3 2018, 14:01) Зачем? П...   Sep 3 2018, 11:08
- - jcxz   RE: вызов супервизора SVCall в STM32   Sep 3 2018, 11:44
- - Arlleex   ЦитатаА как она туда (в стек) попадёт с 0 в мл.бит...   Sep 3 2018, 12:00
- - jcxz   Цитата(Arlleex @ Sep 3 2018, 15:00) А вот...   Sep 3 2018, 12:26
- - Arlleex   Цитата(jcxz @ Sep 3 2018, 16:26) Проверил...   Sep 3 2018, 13:02
- - jcxz   Цитата(Arlleex @ Sep 3 2018, 16:02) Сейча...   Sep 3 2018, 13:26


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01446 секунд с 7
ELECTRONIX ©2004-2016