|
Работа с медленной периферией |
|
|
|
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, 23:10
|

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

|
Forger, Цитата Зачем дергать прерывания раз в 1мкс? 01.gif У 1-wire все времена указаны как минимум от 15мкс. Если Вы внимательно прочитаете мое сообщение, то увидите, что я говорил по ХУДШИЙ случай. Конечно, в большинстве случаев такие реакции таймера не нужны. scifi, Цитата 1-wire удобно делается на уарте, там нет всей этой головной боли. Будем считать, что ног в корпусе не осталось. И это не допущение, а факт. AlexandrY, Цитата Прерывания все надо профайлить до такта чтобы узнать бюджет задержек, что автор как бы и начал делать, но видимо решил, что и так сойдёт. Т.е. продолжает цепь ошибок. Я не решил, что и так сойдет. Я попытался найти оптимальный выход из ситуации. Напомню, что переделывать железо никто не будет, а то, что 180МГц Cortex-M4F не сможет правильно и лаконично обработать датчик на фоне других процессов - не поверю. jcxz, Цитата Работу 1-wire естественно эмулировать при помощи capture- и compare- режимов какого-либо таймера. Ногодрыг или UART - это колхоз. Если бы 1-Wire был выведен на ножку аппаратного таймера, я бы не задавал таких вопросов. Очевидно, я спрашивал не про то, как мне переделать железо, а про то, как архитектурно продумать программную часть. Тут товарищи некоторые осциллографы с ЖК-экранами на сраных 8-битных AVR-ках делают с красивым меню, и памяти хватает, и более-менее опрятно выглядит, а меряет как китайщина с Aliexpress (то есть вполне допустимо для радиолюбительских поделок для монитора SPI, I2C и пр.). Поверьте, перезаполнять регистр совпадения таймера в прерывании по каждому прерыванию для автомата состояний, ЛИБО делать то же самое но дополнительно дернуть ножкой при этом программно - разница не существенная абсолютно в данном случае, ибо не двигателем управляем. P.S.: На ум все-таки приходит вариант с DMA на регистр совпадения... Но в прерывании ножку дергать, так как заведена не на таймер...В общем, почитав Ваши комментарии, я пришел к выводу, что... что никакого вывода, собственно, и нет. Кто-то делал так, кто-то делал так. Кто-то кого-то поливает говном, называя последнего быдлокодером, кто-то, в свою очередь, считает наоборот. Из всего прочитанного можно лишь сделать одно заключение - что бы ты ни делал - другие буду считать сделанным через одно место... Люблю этот форум Изящное решение найду в любом случае, поскольку не сдаюсь на "и так сойдет" (перфекционизм в душе ликует). Всех с наступающим Новым Годом!
Сообщение отредактировал Arlleex - Dec 29 2017, 23:31
|
|
|
|
|
Dec 30 2017, 13:19
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(Arlleex @ Dec 30 2017, 02:10)  ...никакого вывода, собственно, и нет. Кто-то делал так, кто-то делал так. ...Изящное решение найду...Всех с наступающим Новым Годом! Вы правы - пока прозвучала реализация двумя путями: - ногодрыг в прерываниях - уарт всевозможные потуги на захватах и дма = нас всех туда тянет, но увы отличия от ногодрыга минимальные, что нивелирует (ну или почти) весь колхоз и нагромождение... по крайней мере раздувание в эту степь щёк - так и осталось хотелками (у тех кто прямо заявлял что это кашэрно)... Из всех озвученных вариантах - для варианта промышленного (куча датчиков и каждый датчик = свой вход) остаётся одын единственный вариант - ногодрыг. вот своё изящное решение - это правильная колбаса. ведь всё зависит от поставленной задачи. и Вас с новым годом! с уважением (круглый)
|
|
|
|
|
Dec 30 2017, 14:25
|
Местный
  
Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126

|
Цитата(kolobok0 @ Dec 30 2017, 16:19)  всевозможные потуги на захватах и дма = нас всех туда тянет, но увы отличия от ногодрыга минимальные, что нивелирует (ну или почти) весь колхоз и нагромождение... по крайней мере раздувание в эту степь щёк - так и осталось хотелками (у тех кто прямо заявлял что это кашэрно)... Из всех озвученных вариантах - для варианта промышленного (куча датчиков и каждый датчик = свой вход) остаётся одын единственный вариант - ногодрыг. Это просто один вариант вы и знаете... Так бывает...
|
|
|
|
Сообщений в этой теме
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 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 Forger Цитата(Arlleex @ Dec 30 2017, 02:10) Если... Dec 30 2017, 08:05    Сергей Борщ 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
|
|
|