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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Cortex и гонки при сне
Alechek
сообщение Mar 30 2016, 12:12
Сообщение #31


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Я тоже не понял, к чему весь этот треп.

Последовательность в первом сообщении верна.
Сам использую такую конструкцию.
Только для других целей: так как __wfi не очень то и сильно уменьшает потребление ядра, приходится перед отправкой его в сон уменьшать тактовую, а сразу по пробуждению - восстанавливать. Экономия приличная (LPC175x).
Go to the top of the page
 
+Quote Post
AVI-crak
сообщение Mar 30 2016, 13:02
Сообщение #32


Частый гость
**

Группа: Участник
Сообщений: 182
Регистрация: 16-10-15
Пользователь №: 88 894



Цитата(ataradov @ Mar 30 2016, 15:23) *
Разумный совет как всегда нашелся на англоязычном форуме.

А как оно выглядит-то? ваше англоязычное решение.

Цитата(jcxz @ Mar 30 2016, 14:41) *
Не понимаю - Вы чего доказать-то пытаетесь?

Чистый новый проект, три прерывания от кнопок с разными уровнями 2, 3, 4.
Жму 4, запрет прерываний и цикл, жму 2 ,3 ,
Выхожу из цикла, снимается запрет - попадаю в 2 ( нормально),
Выхожу из цикла 2 - попадаю в 4 и майн.

Без запрета прерываний - попасть в 3 можно. Наверное я что-то делаю не так, может у меня камень с дефектом, но команда __disable_irq(); - мне не нравится.



Go to the top of the page
 
+Quote Post
ataradov
сообщение Mar 30 2016, 15:32
Сообщение #33


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



QUOTE (AVI-crak @ Mar 30 2016, 06:02) *
А как оно выглядит-то? ваше англоязычное решение.


http://electronix.ru/forum/index.php?showt...t&p=1415165

QUOTE (AVI-crak @ Mar 30 2016, 06:02) *
Чистый новый проект, три прерывания от кнопок с разными уровнями 2, 3, 4.
Жму 4, запрет прерываний и цикл, жму 2 ,3 ,
Выхожу из цикла, снимается запрет - попадаю в 2 ( нормально),
Выхожу из цикла 2 - попадаю в 4 и майн.
Не поянл.

QUOTE (AVI-crak @ Mar 30 2016, 06:02) *
Без запрета прерываний - попасть в 3 можно. Наверное я что-то делаю не так, может у меня камень с дефектом, но команда __disable_irq(); - мне не нравится.


Ну если не нравятся отдельные инструкции процессора, то это не ко мне.

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

Перед сном радио усыпляется и перед отправкой кадра его тоже нужно разбудить. Это тоже решается элементарно кодом выше.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 30 2016, 16:39
Сообщение #34


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Не имеет значения, как долго тянется прерывание, если, кроме него, делать нечего, и можно поспать.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 31 2016, 05:58
Сообщение #35


Гуру
******

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



Цитата(ViKo @ Mar 30 2016, 22:39) *
Не имеет значения, как долго тянется прерывание, если, кроме него, делать нечего, и можно поспать.

Я это уже сколько раз пытался объяснить ТСу, но без толку, он упёрся crying.gif
Go to the top of the page
 
+Quote Post
ataradov
сообщение Mar 31 2016, 06:01
Сообщение #36


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



QUOTE (jcxz @ Mar 30 2016, 22:58) *
Я это уже сколько раз пытался объяснить ТСу, но без толку, он упёрся crying.gif
Ну не могу я весь этот код засунуть в прерывание - это огромный беспроводный стек, который сам использует другие прерывания для работы.


Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 31 2016, 06:21
Сообщение #37


Гуру
******

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



Цитата(ataradov @ Mar 31 2016, 12:01) *
Ну не могу я весь этот код засунуть в прерывание - это огромный беспроводный стек, который сам использует другие прерывания для работы.

Я имею в виду не то прерывание, которое случается по аппаратному событию и по которому ставится флаг, а отдельное, возбуждаемое программно, из любого прерывания ставящего флаг и имеющее приоритет заведомо ниже любого аппаратного. И фоновый процесс, в котором очевидно работает Ваш огромный стек в виде суперцикла, как раз и должен выполняться внутри этого программного прерывания.
Любое аппаратное прерывание прервёт это программное прерывание (для него это будет как фоновый процесс, только на стеке прерываний). Выход из этого программного прерывания - когда работа вся сделана и флаг не установлен заново - выход из ISR. Если между проверкой флага и выходом из ISR произойдёт новое аппаратное прерывание, устанавливающее флаг, но будет новый вход в ISR программного прерывания - так что потери события установки флага не будет даже если не запрещать прерывания. И даже фоновый процесс, крутящий WFI в цикле, можно не прописывать - можно воспользоваться флагом описанным Viko (всегда спать в фоне).
Хотя можно конечно и как Вы писали - уходить в сон при запрещённых прерываниях в фоновом процессе и крутить весь суперцикл в нём-же. Судя по докам, Cortex-M должен прерывать состояние сна по любому незамаскированному прерыванию вне зависимости от состояния флага разрешения прерываний.
Мне мой вариант кажется удобнее, так как позволяет в фоновый процесс крутящий WFI, более просто добавить какой-то дополнительный функционал, например - периодическое измерение загрузки процессора (периодически, вместо цикла while (1) WFI;, в течение фикс. времени выполнять цикл икрементирования некоего счётчика). Я именно так всегда и строю ПО, пусть даже там всего одна задача: знать насколько занят CPU - очень полезная вещь.
Но дело Ваше.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 5th July 2025 - 04:18
Рейтинг@Mail.ru


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