|
Работа с медленной периферией |
|
|
|
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 29 2017, 07:36
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(scifi @ Dec 29 2017, 10:01)  1-wire удобно делается на уарте... если поделка, типа померять температуру любимого проца - то да. если надо каждую секунду иметь картину по нескольким точкам сразу - то юарт мягко говоря убогость... (круглый)
|
|
|
|
|
Dec 29 2017, 08:53
|
Частый гость
 
Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612

|
Цитата(kolobok0 @ Dec 29 2017, 10:36)  если поделка, типа померять температуру любимого проца - то да. если надо каждую секунду иметь картину по нескольким точкам сразу - то юарт мягко говоря убогость...
(круглый) Предлагаю не путать теплое с мягким. UART, таймеры с DMA, или GPIO - это реализация интерфейса на физическом уровне. А "иметь картину по нескольким точкам сразу" - это относится уже к логическому уровню протокола обмена. И одно другому никак не мешает.
|
|
|
|
|
Dec 29 2017, 09:19
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(amiller @ Dec 29 2017, 11:53)  Предлагаю не путать теплое с мягким. UART, таймеры с DMA, или GPIO - это реализация интерфейса на физическом уровне. А "иметь картину по нескольким точкам сразу" - это относится уже к логическому уровню протокола обмена. И одно другому никак не мешает. Внимательней надо читать. задача (т.е. дано) - в каждый момент(одномоментно) времени иметь сразу температуры ВСЕХ датчиков. Не последовательно, не через 10 секунд, а каждую секунду. со всех датчиков. uart, dma, gpio - это способ достижения поставленной задачи. именно в этом разрезе я и постарался изложить. Цитата(Сергей Борщ @ Dec 29 2017, 12:00)  На УАПП легко ...- чем же это так сильно хуже тупого ногодрыга... если вы можете мне рассказать способ сканирования энного(!) кол-ва датчиков за 1 секунду с помощью уарта - я внимательно послушаю.
|
|
|
|
|
Dec 29 2017, 09:52
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (kolobok0 @ Dec 29 2017, 11:19)  если вы можете мне рассказать способ сканирования энного(!) кол-ва датчиков за 1 секунду с помощью уарта - я внимательно послушаю. Мне непонятно - чем сканирование с помощью УАПП отличается от сканирования ногодрыгом. Точно так же ищем все подключенные датчики, точно так же запускаем на найденных измерение температуры, точно так же через 0.8 сек сканируем шину снова и считываем с найденных датчиков результат. Алгоритм сканирования описан и в документации (я проверял - работает) и в куче примеров по всему интернету. Все точно так же, как и с ногодрыгом в прерывании таймера, только вместо трех прерываний таймера на битовый слот имеем одно прерывание УАПП на слот и жесткую времянку слота. УАПП передает 0x00 или 0xFC. Для чтения передает 0xFC, одновременно читая эту же линию. Если считано 0xFC - ведомый ответил единицей или не ответил, если считано не 0xFC - подчиненный ответил нулем.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 29 2017, 11:22
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Сергей Борщ @ Dec 29 2017, 11:52)  Если считано 0xFC - ведомый ответил единицей или не ответил, если считано не 0xFC - подчиненный ответил нулем. А если не 0xFC получилось из-за более длинного восстановления уровня на линии (ёмкость и т.п.)? Или из-за помех (вполне возможно в 3-м состоянии линии на линии)? Цитата(aaarrr @ Dec 29 2017, 12:43)  То есть нагромождение таймеров и побитный прием с соответствующей загрузкой процессора - это не колхоз, а железная периферия - колхоз? Оригинально. Почему таймеров? Автор вроде говорит про приём по единственной линии. Я понял что все датчики висят на одной линии. В чём загрузка процессора-то? В 1-wire значения времянок порядка десятков-сотен мкс, как 3 прерывания в течение этого времени могут значимо нагрузить ARM с частотой 180МГц? При том, что в каждом прерывании нужно всего несколько команд выполнить. Цитата(kolobok0 @ Dec 29 2017, 13:01)  по поводу ознакомиться - кхм...не буду рассматривать как грубость, а отвечу вам следующим поссажем: - помимо ознакомиться , рекомендую вам хоть разок реализовать указанный протокол. любым способом... По делу есть что сказать кроме пустого битья себя пяткой в грудь? "Реализуют" что-то не заглядывая в описание быдлокодеры. А если прочитать описание и хоть немного включить голову, то из диаграммы работы линии в режиме ввода видно, что есть интервалы времени, когда на линии может быть что угодно. И это никак не противоречит стандарту. Т.е. - если ведомое устройство в эти интервалы выдаст на линию любой мусор, то это никак не будет противоречить протоколу 1-wire, и это всё равно будет 1-wire. Только реализация приёма на основе UART перестанет работать. Реализация на таймере, учитывая все требования 1-wire, будет работать также корректно. И это уже не говоря про весьма возможные помехи в 3-м состоянии линии ввода. http://micpic.ru/articles/128-opisanie-int...jsa-1-wire.html
|
|
|
|
Сообщений в этой теме
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 kolobok0 Цитата(Arlleex @ Dec 28 2017, 20:52) ..за... Dec 28 2017, 21:06  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     kolobok0 Цитата(Сергей Борщ @ Dec 29 2017, 12:52) ... Dec 29 2017, 10:07      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
|
|
|