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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Программные прерывания разного приоритета
jcxz
сообщение Jul 1 2016, 03:22
Сообщение #16


Гуру
******

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



Цитата(GetSmart @ Jul 1 2016, 01:06) *
Вы ерунду написали и даже не поняли этого. По номеру в IPSR и сохранённой копии этого номера в стеке НИКАК не определить кто кого приоритетней.

И где я писал что по номеру из IPSR можно определить "кто кого приоритетней"??? В том что Вы отквотили я вообще-то писал о порядке передачи управления при вложенных прерываний и порядке что и куда сохраняется и откуда восстанавливается при этих событиях.
А вообще текущий приоритет конечно можно определить, привлекая содержимое регистров приоритета.

Цитата(GetSmart @ Jul 1 2016, 01:06) *
Вы так уверенно спорили, что казалось всё знаете.

Я про текущий приоритет (или как там его называть) ничего не писал. Я писал, что раз значение сохраняется в стек и потом восстанавливается и в IPSR и в VECTACTIVE, то я думаю это для чего-то нужно и не надо утверждать, что это значение не используется если не знаете.

Цитата(GetSmart @ Jul 1 2016, 01:06) *
Можно поковыряться в реальном процессоре. Но нет гарантии, что во всех v6-M это будет одинаково. И в документации неполнота всё-равно будет (если есть).

Ну раз так, то можно даже предположить, что в чьей-то реализации ядра Cortex-M, текущий приоритет определяется текущим содержимым IPSR и соответствующего регистра приоритета. В любой момент времени, а не на момент регистрации прерывания. sm.gif
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 1 2016, 08:41
Сообщение #17


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(jcxz @ Jul 1 2016, 07:22) *
Ну раз так, то можно даже предположить, что в чьей-то реализации ядра Cortex-M, текущий приоритет определяется текущим содержимым IPSR и соответствующего регистра приоритета. В любой момент времени, а не на момент регистрации прерывания. sm.gif

А как узнаете не нарушив правило
Цитата
If software changes the priority of an exception when it is active or enabled, the effect is UNPREDICTABLE in ARMv6-M.

? Это правило по сути разрешает логике NVIC кэшировать приоритет и запрещает программисту проверять это. Плюс правило некорректно написано. Т.к. приоритетом могут управлять несколько переменных: NVIC.IPR[] и мог бы управлять IPSR, если бы приоритет не кэшировался. Кэшируется ли он и что именно из этого нельзя менять - не ясно.

ARMv6-M наверное лучше заменить на Cortex-M, т.к. топикстартер указал Cortex-M4. Но скорее всего там похожие правила. Если нет, то поправлюсь, когда почитаю.

Сообщение отредактировал GetSmart - Jul 1 2016, 09:02


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
amaora
сообщение Jul 1 2016, 14:42
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Еще вопрос. Допустим я решил использовать FreeRTOS. Есть прерывание высокого приоритета, такое что из него нельзя вызывать функции RTOS. Вопрос, как передавать события из него? Ответ, запускать программное прерывание достаточно низкого приоритета, которое маскируется к критических секциях RTOS, и уже в нем вызывать какую-то отправку в очередь, пробуждать задачи и т.п. Итог, все равно понадобятся программные прерывания.

Для медленных событий, наверно обойдусь поллингом флагов, с засыпанием на один тик таймера RTOS.
Go to the top of the page
 
+Quote Post

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

 


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


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