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

 
 
> Работа с медленной периферией
Arlleex
сообщение Dec 28 2017, 17:52
Сообщение #1


Местный
***

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



Использую микроконтроллер на процессорном ядре Cortex-M4F - STM32F429.
Программа построена на основе ОСРВ FreeRTOS.
Есть 5 независимых задач, внутри которых обрабатываются некоторые массивы данных.
Есть аппаратные прерывания от таймеров с жесткой временной диаграммой, нарушать которую нельзя: через равные отрезки времени считываются данные с полутора десятков внешних АЦП по SPI, при этом сами таймеры формируют управление CS этих АЦП, а также сам цикл чтения из SPI данных. По завершению сканирования (около 200 выборок) выдается семафор в приоритетную задачу FreeRTOS о готовности результата.
Одна из задач отвечает за опрос датчиков температуры DS18B20, подключенной к обычной линии GPIO (не к UART-у), т.е. вся организация протокола 1-Wire программная. Я решил, что настраивать прерывания для временных параметров таймслотов слишком накладно и непроизводительно, поэтому сделал опрос флагов совпадения таймера и рулил ножкой GPIO в низкоприоритетной задаче RTOS. Однако логично было предположить (а позже и убедиться на отладочной плате), что высокоприоритетные задачи могут перебить эту задачу, например, в момент таймслота чтения, и целостность временного отрезка таймслота будет нарушена - считаются неправильные данные.
Поместил обращения с датчиком в критическую секцию, но сам понимаю что это так себе выход - времянка более приоритетных прерываний таймера для АЦП куда важнее, поэтому никаких критических секций быть не должно. И тут я задумался: а как вообще в таких ситуациях поступать? То есть как обслуживать низкоскоростной интерфейс, временную диаграмму которого нельзя перебивать для корректной работы, в то же время не повышая приоритет задачи, в которой работает опрос датчиков, и тем более, не вводя критические секции? Ведь как бы получается самоблокирующие критерии расстановки приоритетов задач...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kolobok0
сообщение Dec 28 2017, 21:06
Сообщение #2


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Arlleex @ Dec 28 2017, 20:52) *
..задач отвечает за опрос датчиков температуры DS18B20..


Если Вы внимательно посмотрите на диаграммы данного датчика, то
1) нет необходимости все времена чего то ждать. достаточно выделить критичные ко времени участки выполнения и засунуть их в обработчик таймера.
2) из опыта - всего таких критичных участка два. время между стробом чтения и самим чтением слота. и время между началом формирования и выхода из записи единички при записи в слот. всё остальное,
даже если будет немного плавать не критично.
3) вычисление результата делаете в задаче, а не в обработчике.
4) все обработчики делаете лаконичными.


удачи вам
(круглый)
ЗЫ
у меня в проекте на F4 крутиться ниток 15, и датчиков сканируется штук 8 постоянно. проблем нет...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Arlleex   Работа с медленной периферией   Dec 28 2017, 17:52
- - Forger   Цитата(Arlleex @ Dec 28 2017, 20:52) То е...   Dec 28 2017, 18:17
|- - Arlleex   ЦитатаДругой вариант: для медленных программных ин...   Dec 28 2017, 20:26
|- - Forger   Цитата(Arlleex @ Dec 28 2017, 23:26) - дл...   Dec 28 2017, 20:53
- - ViKo   Очевидно, времени, чтобы прочитать все данные с вн...   Dec 28 2017, 19:12
- - SasaVitebsk   По АЦП в принципе согласен. У меня примерно та же ...   Dec 28 2017, 19:23
- - scifi   1-wire удобно делается на уарте, там нет всей этой...   Dec 29 2017, 07:01
|- - kolobok0   Цитата(scifi @ Dec 29 2017, 10:01) 1-wire...   Dec 29 2017, 07:36
|- - AlexandrY   Цитата(kolobok0 @ Dec 29 2017, 09:36) ......   Dec 29 2017, 07:50
||- - kolobok0   Цитата(AlexandrY @ Dec 29 2017, 10:50) .....   Dec 29 2017, 07:53
||- - AlexandrY   Цитата(kolobok0 @ Dec 29 2017, 09:53) в п...   Dec 29 2017, 08:10
||- - kolobok0   Цитата(AlexandrY @ Dec 29 2017, 11:10) Я ...   Dec 29 2017, 08:26
||- - scifi   Цитата(kolobok0 @ Dec 29 2017, 11:26) ну ...   Dec 29 2017, 08:37
|- - scifi   Цитата(kolobok0 @ Dec 29 2017, 10:36) есл...   Dec 29 2017, 08:12
|- - amiller   Цитата(kolobok0 @ Dec 29 2017, 10:36) есл...   Dec 29 2017, 08:53
||- - kolobok0   Цитата(amiller @ Dec 29 2017, 11:53) Пред...   Dec 29 2017, 09:19
||- - Сергей Борщ   QUOTE (kolobok0 @ Dec 29 2017, 11:19) есл...   Dec 29 2017, 09:52
||- - kolobok0   Цитата(Сергей Борщ @ Dec 29 2017, 12:52) ...   Dec 29 2017, 10:07
||- - jcxz   Цитата(Сергей Борщ @ Dec 29 2017, 11:52) ...   Dec 29 2017, 11:22
||- - aaarrr   Цитата(jcxz @ Dec 29 2017, 14:09) В чём з...   Dec 29 2017, 11:24
||- - jcxz   Цитата(aaarrr @ Dec 29 2017, 13:24) А на ...   Dec 29 2017, 11:36
||- - HHIMERA   Цитата(jcxz @ Dec 29 2017, 15:36) Для пер...   Dec 29 2017, 22:42
|- - Сергей Борщ   QUOTE (kolobok0 @ Dec 29 2017, 09:36) есл...   Dec 29 2017, 09:00
|- - jcxz   Цитата(Сергей Борщ @ Dec 29 2017, 11:00) ...   Dec 29 2017, 10:56
|- - kolobok0   Цитата(jcxz @ Dec 29 2017, 13:49) Насколь...   Dec 29 2017, 11:01
- - jcxz   Цитата(Arlleex @ Dec 28 2017, 19:52) То е...   Dec 29 2017, 10:42
|- - aaarrr   Цитата(jcxz @ Dec 29 2017, 13:40) Работу ...   Dec 29 2017, 10:43
||- - mantech   Цитата(aaarrr @ Dec 29 2017, 13:43) То ес...   Dec 29 2017, 13:37
||- - aaarrr   Цитата(mantech @ Dec 29 2017, 16:37) ...х...   Dec 29 2017, 13:42
|- - kolobok0   Цитата(jcxz @ Dec 29 2017, 13:42) Работу ...   Dec 29 2017, 10:45
- - Arlleex   Forger, ЦитатаЗачем дергать прерывания раз в 1мкс?...   Dec 29 2017, 23:10
|- - Forger   Цитата(Arlleex @ Dec 30 2017, 02:10) Если...   Dec 30 2017, 08:05
|- - kolobok0   Цитата(Arlleex @ Dec 30 2017, 02:10) ...н...   Dec 30 2017, 13:19
|- - HHIMERA   Цитата(kolobok0 @ Dec 30 2017, 16:19) все...   Dec 30 2017, 14:25
|- - kolobok0   Цитата(HHIMERA @ Dec 30 2017, 17:25) Это ...   Dec 30 2017, 14:58
|- - Сергей Борщ   QUOTE (kolobok0 @ Dec 30 2017, 16:58) я с...   Dec 30 2017, 20:25
|- - HHIMERA   Цитата(Сергей Борщ @ Dec 30 2017, 23:25) ...   Dec 30 2017, 20:50
|- - Rst7   QUOTE (Сергей Борщ @ Dec 30 2017, 22:25) ...   Jan 1 2018, 21:16
|- - Forger   ЦитатаCPU load просто смешной.Кстати, а как вы его...   Jan 1 2018, 21:30
|- - Rst7   QUOTE (Forger @ Jan 1 2018, 23:30) Кстати...   Jan 1 2018, 22:11
|- - Forger   Цитата(Rst7 @ Jan 2 2018, 01:11) Да есть ...   Jan 1 2018, 23:23
|- - Rst7   QUOTE (Forger @ Jan 2 2018, 01:23) Лишь х...   Jan 2 2018, 00:05
|- - Forger   Цитата(Rst7 @ Jan 2 2018, 03:05) Я достат...   Jan 2 2018, 00:25
- - Arlleex   Сергей Борщ, Цитата...одновременный прием четырех ...   Dec 30 2017, 21:14
|- - Сергей Борщ   QUOTE (Arlleex @ Dec 30 2017, 23:14) Серг...   Dec 30 2017, 21:38
|- - jcxz   Цитата(Arlleex @ Dec 30 2017, 23:14) Прер...   Dec 31 2017, 14:40
- - Alechek   Почему для 1820 упоминается только ногодрыг/таймер...   Jan 10 2018, 09:49
- - mantech   Цитата(Alechek @ Jan 10 2018, 12:49) Поче...   Jan 10 2018, 13:56


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

 


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


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