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

|
Цитата(Kabdim @ Mar 29 2016, 12:30)  Вчера уткнулся ровно в ту же задачу. Кмк большинство отвечающих слишком привыкли к ртосам. Самому писать кусок с переключением контекстов при отсутсвии ртос - саму написать кусок ртос, непрактично. А что там непрактичного? Всё переключение контекста - пара десятков команд. Да и, если бы Вы внимательнее прочитали мой пост, как я писал - необязательно даже делать переключение контекста, достаточно задачу, обрабатывающую флаг, заключить в обработчик PendSV. Но с переключением контекста - правильнее, так как и стек для задачи будет свой и режим - непривилегированный. Цитата(Kabdim @ Mar 29 2016, 12:30)  1. Основной цикл перенести в SVC Вот это как раз непрактично. Или скорее даже невозможно. Насколько помню - у SVC приоритет выше чем у любого аппаратного прерывания (хотя может путаю), к тому же это - синхронное прерывание. Но самое главное - а что это Вам даст? Вы и WFI внутри SVC будете выполнять? А в чём тогда разница с фоновой задачей? А если Вы собираетесь возбуждать SVC внутри ISR аппаратного прерывания - это невозможно, ибо SVC - синхронное прерывание, это не PendSV, в ISR SVC будет вход сразу же, без ожидания выхода из ISR аппаратного прерывания, и последующие аппаратные прерывания будут заблокированы. Попытаетесь запретить - получите HardFault. Цитата(Kabdim @ Mar 29 2016, 12:30)  2. Пробуждающий обработчик прерываний меняет режим энергосбережения на слип и устанавливает таймер на ~20 тактов вперед. Даже если в это время сработает WFI, то произойдет быстрый выход из сна. Ничего не понял. Если он пробуждающий - почему тогда он sleep устанавливает??? Сами себе противоречите.... Не нравится PendSV по каким-то причинам, вместо него можно использовать программное возбуждение любого аппаратного прерывания с приоритетом ниже любого используемого в ПО аппаратного прерывания. Хотя это ничем не отличается от PendSV, которое как раз для таких целей и сделано.
|
|
|
|
|
Mar 29 2016, 11:21
|
Знающий
   
Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842

|
Цитата(jcxz @ Mar 29 2016, 11:22)  А что там непрактичного? Всё переключение контекста - пара десятков команд. Просто зачем? Если дошло до написания переключения контекста не проще ли взять готовую ртос? Вот только потом под это решение нужно переделывать всю остальную прошивку. Цитата(jcxz @ Mar 29 2016, 11:22)  Да и, если бы Вы внимательнее прочитали мой пост, как я писал - необязательно даже делать переключение контекста, достаточно задачу, обрабатывающую флаг, заключить в обработчик PendSV. Но с переключением контекста - правильнее, так как и стек для задачи будет свой и режим - непривилегированный. Тот пост был всё таки не ответом на ваш пост.  Цитата(jcxz @ Mar 29 2016, 11:22)  Вот это как раз непрактично. Или скорее даже невозможно. Насколько помню - у SVC приоритет выше чем у любого аппаратного прерывания (хотя может путаю), к тому же это - синхронное прерывание. Но самое главное - а что это Вам даст? Вы и WFI внутри SVC будете выполнять? А в чём тогда разница с фоновой задачей? А если Вы собираетесь возбуждать SVC внутри ISR аппаратного прерывания - это невозможно, ибо SVC - синхронное прерывание, это не PendSV, в ISR SVC будет вход сразу же, без ожидания выхода из ISR аппаратного прерывания, и последующие аппаратные прерывания будут заблокированы. Попытаетесь запретить - получите HardFault. На моем камне приоритет - Configurable, но не суть важно. Это была мысль представленная на обсудить, а не конкретная реализация. Да, вы правы, PendSV уместей SVC для этой реализации этого решения. Цитата(jcxz @ Mar 29 2016, 11:22)  Ничего не понял. Если он пробуждающий - почему тогда он sleep устанавливает??? Сами себе противоречите.... Что б при если после выхода вывалились на команду WFI заснули не в какой-нибудь deep power down, а в более гуманный ко времени просыпа sleep. Впрочем решение не слишком удачное, с этим я не спорю. Цитата(jcxz @ Mar 29 2016, 11:22)  Не нравится PendSV по каким-то причинам, вместо него можно использовать программное возбуждение любого аппаратного прерывания с приоритетом ниже любого используемого в ПО аппаратного прерывания. Хотя это ничем не отличается от PendSV, которое как раз для таких целей и сделано. Нравится, нравится.  Но решение с просыпанием с pend прерыванием нравится больше, чем возможность навелосипедить собственный кусочек ртос.
|
|
|
|
Сообщений в этой теме
ataradov Cortex и гонки при сне Mar 28 2016, 17:12 jcxz А что собственно смущает? И зачем запрещать прерыв... Mar 28 2016, 17:34 ataradov QUOTE (jcxz @ Mar 28 2016, 10:34) А что с... Mar 28 2016, 17:48  jcxz Цитата(ataradov @ Mar 28 2016, 23:48) Обр... Mar 28 2016, 17:55   ataradov QUOTE (jcxz @ Mar 28 2016, 10:55) А кто д... Mar 28 2016, 18:05    KnightIgor Цитата(ataradov @ Mar 28 2016, 19:05) whi... Mar 28 2016, 19:16     ataradov QUOTE (KnightIgor @ Mar 28 2016, 12:16) К... Mar 28 2016, 19:23      KnightIgor Цитата(ataradov @ Mar 28 2016, 20:23) И п... Mar 28 2016, 19:45       ataradov QUOTE (KnightIgor @ Mar 28 2016, 12:45) П... Mar 28 2016, 19:51 aaarrr Еще можно так:
Код /* Clear event register */
__s... Mar 28 2016, 19:41 AVI-crak Цитата(ataradov @ Mar 29 2016, 00:12) Что... Mar 28 2016, 20:01 ataradov QUOTE (AVI-crak @ Mar 28 2016, 13:01... Mar 28 2016, 20:12  jcxz Цитата(ataradov @ Mar 29 2016, 02:12) Это... Mar 28 2016, 23:48 ataradov QUOTE (Kabdim @ Mar 28 2016, 23:30) А ваш... Mar 29 2016, 06:33   jcxz Цитата(Kabdim @ Mar 29 2016, 17:21) Нрави... Mar 29 2016, 12:13  AVI-crak Цитата(jcxz @ Mar 29 2016, 19:13) Что там... Mar 29 2016, 23:31   GetSmart Цитата(AVI-crak @ Mar 30 2016, 03:31... Mar 30 2016, 01:59    AVI-crak Цитата(GetSmart @ Mar 30 2016, 08:59) Что... Mar 30 2016, 03:30   jcxz Цитата(AVI-crak @ Mar 30 2016, 05:31... Mar 30 2016, 05:32    AVI-crak Цитата(jcxz @ Mar 30 2016, 12:32) Бред... Mar 30 2016, 06:38     jcxz Цитата(AVI-crak @ Mar 30 2016, 12:38... Mar 30 2016, 07:41    ataradov QUOTE (jcxz @ Mar 29 2016, 22:32) Полност... Mar 30 2016, 07:54     jcxz Цитата(ataradov @ Mar 30 2016, 13:54) Все... Mar 30 2016, 08:19      ataradov QUOTE (jcxz @ Mar 30 2016, 01:19) Вы даже... Mar 30 2016, 08:23       AVI-crak Цитата(ataradov @ Mar 30 2016, 15:23) Раз... Mar 30 2016, 13:02        ataradov QUOTE (AVI-crak @ Mar 30 2016, 06:02... Mar 30 2016, 15:32 Alechek Дейсвтельно мутно. Как оно может ПОТЕРЯТСЯ?
Особен... Mar 30 2016, 04:24 ViKo Не нашел, чтобы кто-то из участников данной дискус... Mar 30 2016, 06:07 jcxz Цитата(ViKo @ Mar 30 2016, 12:07) Не наше... Mar 30 2016, 06:20 Alechek Я тоже не понял, к чему весь этот треп.
Последова... Mar 30 2016, 12:12 ViKo Не имеет значения, как долго тянется прерывание, е... Mar 30 2016, 16:39 jcxz Цитата(ViKo @ Mar 30 2016, 22:39) Не имее... Mar 31 2016, 05:58  ataradov QUOTE (jcxz @ Mar 30 2016, 22:58) Я это у... Mar 31 2016, 06:01   jcxz Цитата(ataradov @ Mar 31 2016, 12:01) Ну ... Mar 31 2016, 06:21
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|