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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Работа с медленной периферией
HHIMERA
сообщение Dec 29 2017, 22:42
Сообщение #31


Местный
***

Группа: Участник
Сообщений: 225
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(jcxz @ Dec 29 2017, 15:36) *
Для передачи вообще можно аппаратный вывод с регистра compare таймера использовать. Ну или тот же UART если больше нравится.
Да, конечно прерываний будет немного больше.

Можно вообще без прерываний... на ДМА... типа аппаратно... Это уже кому как больше нравится...
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Dec 29 2017, 23:10
Сообщение #32


Частый гость
**

Группа: Участник
Сообщений: 175
Регистрация: 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 на регистр совпадения... Но в прерывании ножку дергать, так как заведена не на таймер...

В общем, почитав Ваши комментарии, я пришел к выводу, что... что никакого вывода, собственно, и нет. Кто-то делал так, кто-то делал так. Кто-то кого-то поливает говном, называя последнего быдлокодером, кто-то, в свою очередь, считает наоборот. Из всего прочитанного можно лишь сделать одно заключение - что бы ты ни делал - другие буду считать сделанным через одно место... Люблю этот форумrolleyes.gif
Изящное решение найду в любом случае, поскольку не сдаюсь на "и так сойдет" (перфекционизм в душе ликует). Всех с наступающим Новым Годом!

Сообщение отредактировал Arlleex - Dec 29 2017, 23:31
Go to the top of the page
 
+Quote Post
Forger
сообщение Dec 30 2017, 08:05
Сообщение #33


Знающий
****

Группа: Свой
Сообщений: 755
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Arlleex @ Dec 30 2017, 02:10) *
Если Вы внимательно прочитаете мое сообщение, то увидите, что я говорил по ХУДШИЙ случай.
1 мкс - НЕКУДЫШНЫЙ случай. Можно прекрасно ограничиться 5мкс, например.


Цитата
Конечно, в большинстве случаев такие реакции таймера не нужны.
Вы уж определитесь, наконец, какую помощь ожидаете тут получить?
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Dec 30 2017, 13:19
Сообщение #34


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

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



Цитата(Arlleex @ Dec 30 2017, 02:10) *
...никакого вывода, собственно, и нет. Кто-то делал так, кто-то делал так. ...Изящное решение найду...Всех с наступающим Новым Годом!


Вы правы - пока прозвучала реализация двумя путями:
- ногодрыг в прерываниях
- уарт

всевозможные потуги на захватах и дма = нас всех туда тянет, но увы отличия от ногодрыга минимальные, что нивелирует (ну или почти) весь колхоз и нагромождение... по крайней мере
раздувание в эту степь щёк - так и осталось хотелками (у тех кто прямо заявлял что это кашэрно)...
Из всех озвученных вариантах - для варианта промышленного (куча датчиков и каждый датчик = свой вход) остаётся одын единственный вариант - ногодрыг.

вот своё изящное решение - это правильная колбаса. ведь всё зависит от поставленной задачи.

и Вас с новым годом!

с уважением
(круглый)

Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Dec 30 2017, 14:25
Сообщение #35


Местный
***

Группа: Участник
Сообщений: 225
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(kolobok0 @ Dec 30 2017, 16:19) *
всевозможные потуги на захватах и дма = нас всех туда тянет, но увы отличия от ногодрыга минимальные, что нивелирует (ну или почти) весь колхоз и нагромождение... по крайней мере
раздувание в эту степь щёк - так и осталось хотелками (у тех кто прямо заявлял что это кашэрно)...
Из всех озвученных вариантах - для варианта промышленного (куча датчиков и каждый датчик = свой вход) остаётся одын единственный вариант - ногодрыг.

Это просто один вариант вы и знаете... Так бывает...
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Dec 30 2017, 14:58
Сообщение #36


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

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



Цитата(HHIMERA @ Dec 30 2017, 17:25) *
Это просто ..


я с удовольствие(на полном серьёзе) послушаю Вас, про ваше виденье решения. Вы кажется декларировали опыт использования ПДП(DMA) для поддержки 1-Wire протокола?

с уважением
(круглый)

Сообщение отредактировал kolobok0 - Dec 30 2017, 14:58
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 30 2017, 20:25
Сообщение #37


Гуру
******

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



QUOTE (kolobok0 @ Dec 30 2017, 16:58) *
я с удовольствие(на полном серьёзе) послушаю Вас, про ваше виденье решения. Вы кажется декларировали опыт использования ПДП(DMA) для поддержки 1-Wire протокола?
1-wire не делал, а одновременный прием четырех и передачу восьми независимых каналов ARINC429 на stm32f050 реализовывал. Там скорость 100 кбит, если что. В памяти массив, в этот массив пишется желаемая выходная диаграмма. Этот массив по таймеру через ПДП загоняется в выходной регистр порта. Если в порту есть ноги, которые надо дергать независимо - пишем желаемое их состояние в соответствующий бит всех элементов массива, после чего дергаем ногой. Второй канал ПДП по тому же таймеру заносит в кольцевой буфер состояние входного регистра. Заполнили половину буфера - обрабатываем, ПДП в это время заполняет вторую половину буфера. 1-wire можно реализовать по тому же принципу.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Dec 30 2017, 20:50
Сообщение #38


Местный
***

Группа: Участник
Сообщений: 225
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(Сергей Борщ @ Dec 30 2017, 23:25) *
1-wire можно реализовать по тому же принципу.

Совершенно верно... Там даже все проще чем кажется... при куче вариантов... В простейшем варианте... один массив из двух значений по ЖПИО... другой - времянки слотов... третий - чтение состояния шины.... Заюзав прелоад там все отрабатывается автоматически... Остаётся распарсить принятые данные... Даже если там 16 каналов... это уже не напряжно...
Заюзав два эвента на один канал ДМА... можно сэкономить на канале ДМА...
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Dec 30 2017, 21:14
Сообщение #39


Частый гость
**

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



Сергей Борщ,
Цитата
...одновременный прием четырех и передачу восьми независимых каналов ARINC429...

Коллегам с оборонки (авиация?) отдельный привет sm.gif

Собственно говоря, чего тут уже изобретать. Сделал автомат формирования времянки слотов 1-Wire на прерывании по переполнению таймера.
Код в прерывании меньше 1мкс, сколько точно не скажу, ибо мерял таймером с шагом 1мкс. Но это уже допустимый вариант. Прерывание имеет бОльший приоритет относительно всех используемых прерываний FreeRTOS, поэтому прерывание не может быть перебито RTOS. В прерывании выдается статичный флаг в низкоприоритетную задачу опроса датчиков. Соответственно на критичных временных интервалах перебития контекста происходить не будет.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 30 2017, 21:38
Сообщение #40


Гуру
******

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



QUOTE (Arlleex @ Dec 30 2017, 23:14) *
Сергей Борщ,

Коллегам с оборонки (авиация?) отдельный привет sm.gif
Не, все гораздо приземленнее - любители-строители домашних полноразмерных кабин самолетов для авиасимуляторов. "Оживление" настоящих приборов.

Поправил ссылку. Еще одна.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 31 2017, 14:40
Сообщение #41


Гуру
******

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



Цитата(Arlleex @ Dec 30 2017, 23:14) *
Прерывание имеет бОльший приоритет относительно всех используемых прерываний FreeRTOS, поэтому прерывание не может быть перебито RTOS. В прерывании выдается статичный флаг в низкоприоритетную задачу опроса датчиков. Соответственно на критичных временных интервалах перебития контекста происходить не будет.

Не очень понятно что такое "перебитие контекста" и чем оно так страшно?
Также не понимаю - зачем FreeRTOS-у использовать какие-то прерывания кроме прерывания SysTick? (PendSV можно не учитывать, так как оно априори должно иметь приоритет ниже любого аппаратного прерывания).
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jan 1 2018, 21:16
Сообщение #42


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 277
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



QUOTE (Сергей Борщ @ Dec 30 2017, 22:25) *
1-wire не делал, а одновременный прием четырех и передачу восьми независимых каналов ARINC429 на stm32f050 реализовывал. Там скорость 100 кбит, если что. ...


Ну в общем аналогичный способ я применяю для изготовления 8ми I2S-интерфейсов на LPC1768. 3Mbps (48к*32 бита * 2 канала) на каждом получается. Причем, BICK (клок битов) приходит снаружи, а не генерируется внутри, это, правда, потребовало некоторых извращений - внешний клок подается на таймер в режиме счета импульсов снаружи, а максимальное значение таймера установлено в 1, вот он и генерирует DMAREQ каждый фронт (или спад, зависит от режима детектора у таймера) внешнего сигнала.

CPU load просто смешной. Хотя, конечно, есть нюансы в транспонировании битовой матрицы, чтобы из принятой колбасы битов получить обычные int32.

Обработать так один канал 1-wire - это просто как два пальца.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Forger
сообщение Jan 1 2018, 21:30
Сообщение #43


Знающий
****

Группа: Свой
Сообщений: 755
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата
CPU load просто смешной.
Кстати, а как вы его меряете?


Go to the top of the page
 
+Quote Post
Rst7
сообщение Jan 1 2018, 22:11
Сообщение #44


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 277
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



QUOTE (Forger @ Jan 1 2018, 23:30) *
Кстати, а как вы его меряете?


Да есть же масса способов. Самый простой - измерить сначала в основном потоке количество богомипсов без обработки периферии, а потом - с обработкой.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Forger
сообщение Jan 1 2018, 23:23
Сообщение #45


Знающий
****

Группа: Свой
Сообщений: 755
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Rst7 @ Jan 2 2018, 01:11) *
Да есть же масса способов. Самый простой - измерить сначала в основном потоке количество богомипсов без обработки периферии, а потом - с обработкой.

Лишь хотел уточнить учитывается загрузка лишь голого ядра или загрузку всего проца с учетом его встроенной периферии laughing.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd January 2018 - 11:38
Рейтинг@Mail.ru


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