|
Работа с медленной периферией |
|
|
|
Dec 28 2017, 17:52
|

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

|
Использую микроконтроллер на процессорном ядре Cortex-M4F - STM32F429. Программа построена на основе ОСРВ FreeRTOS. Есть 5 независимых задач, внутри которых обрабатываются некоторые массивы данных. Есть аппаратные прерывания от таймеров с жесткой временной диаграммой, нарушать которую нельзя: через равные отрезки времени считываются данные с полутора десятков внешних АЦП по SPI, при этом сами таймеры формируют управление CS этих АЦП, а также сам цикл чтения из SPI данных. По завершению сканирования (около 200 выборок) выдается семафор в приоритетную задачу FreeRTOS о готовности результата. Одна из задач отвечает за опрос датчиков температуры DS18B20, подключенной к обычной линии GPIO (не к UART-у), т.е. вся организация протокола 1-Wire программная. Я решил, что настраивать прерывания для временных параметров таймслотов слишком накладно и непроизводительно, поэтому сделал опрос флагов совпадения таймера и рулил ножкой GPIO в низкоприоритетной задаче RTOS. Однако логично было предположить (а позже и убедиться на отладочной плате), что высокоприоритетные задачи могут перебить эту задачу, например, в момент таймслота чтения, и целостность временного отрезка таймслота будет нарушена - считаются неправильные данные. Поместил обращения с датчиком в критическую секцию, но сам понимаю что это так себе выход - времянка более приоритетных прерываний таймера для АЦП куда важнее, поэтому никаких критических секций быть не должно. И тут я задумался: а как вообще в таких ситуациях поступать? То есть как обслуживать низкоскоростной интерфейс, временную диаграмму которого нельзя перебивать для корректной работы, в то же время не повышая приоритет задачи, в которой работает опрос датчиков, и тем более, не вводя критические секции? Ведь как бы получается самоблокирующие критерии расстановки приоритетов задач...
|
|
|
|
|
 |
Ответов
|
Dec 28 2017, 21:06
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(Arlleex @ Dec 28 2017, 20:52)  ..задач отвечает за опрос датчиков температуры DS18B20.. Если Вы внимательно посмотрите на диаграммы данного датчика, то 1) нет необходимости все времена чего то ждать. достаточно выделить критичные ко времени участки выполнения и засунуть их в обработчик таймера. 2) из опыта - всего таких критичных участка два. время между стробом чтения и самим чтением слота. и время между началом формирования и выхода из записи единички при записи в слот. всё остальное, даже если будет немного плавать не критично. 3) вычисление результата делаете в задаче, а не в обработчике. 4) все обработчики делаете лаконичными. удачи вам (круглый) ЗЫ у меня в проекте на F4 крутиться ниток 15, и датчиков сканируется штук 8 постоянно. проблем нет...
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|