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

 
 
26 страниц V  « < 20 21 22 23 24 > »   
Reply to this topicStart new topic
> Библиотеки для STM32
Axel
сообщение Apr 21 2017, 02:52
Сообщение #316


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(ViKo @ Apr 20 2017, 20:48) *
Это глупое свойство, не дающее никакой пользы.


Не соглашусь. Если над генерить "жестко" комплементарные сигналы - очень даже... Правда запихнуть такое в либу проблематично (к вопросу об издержках подхода)
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 21 2017, 03:04
Сообщение #317


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(Reflector @ Apr 20 2017, 19:21) *
Правильно, метод write так и делает:
Код
static void write(bool data) { base()->BSRR = (0x10000 << pin) | (data << pin);    }
Не ради спора... а чтоб расширить кругозор... искать ваши объяления/определения... классы/шаблоны..... поясните, если не сложно... или покажите сырцы GpioB<>

пусть b = 0xff;
GpioB<4>::write(b & 0x20); b & 0x20 даёт 0x20. что дальше? write() принимает bool. т.е. при передачи аргумента есть неявное преобразование uint8_t(0x20) в bool (0х01)? да и ещё и передача аргумента... т.е. копя data создается внутри write().
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 21 2017, 05:00
Сообщение #318


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Axel @ Apr 21 2017, 05:52) *
Не соглашусь. Если над генерить "жестко" комплементарные сигналы - очень даже... Правда запихнуть такое в либу проблематично (к вопросу об издержках подхода)

Установить одновременно один вывод в 0, другой в 1? На STM32 - легко. Для этого не нужно инвертировать сигнал, посылая одновременно "установить" и "сбросить".
И, да, я тоже помню про приоритет при задании состояния.

Цитата(jcxz @ Apr 21 2017, 00:52) *
Если Вы не понимаете назначение чего-то, это не повод называть это глупым.

Прекрасно понимаю, что такое свойство мне [ ] не нужно.
STM согласна со мной, а не с вами. laughing.gif
Я и в ПЛИСке так управляю триггерами.
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 21 2017, 05:33
Сообщение #319


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(ViKo @ Apr 21 2017, 10:00) *
STM согласна со мной, а не с вами. laughing.gif
Вы заблуждаетесь, они с вами не согласны. )))
Иногда требуется не просто установить в 1 или в 0, а переключить. Для чего - это отдельная тема. В некоторых процессорах, если не ошибаюсь, есть отдельный регистр для toggle. В стм32 его нет. Плохо. Но st такой функционал добавили в SPL.

Код
/**
  * @brief  Toggles the specified GPIO pins..
  * @param  GPIOx: where x can be (A..K) to select the GPIO peripheral for STM32F405xx/407xx and STM32F415xx/417xx devices
  *                      x can be (A..I) to select the GPIO peripheral for STM32F42xxx/43xxx devices.
  *                      x can be (A, B, C, D and H) to select the GPIO peripheral for STM32F401xx devices.
  * @param  GPIO_Pin: Specifies the pins to be toggled.
  * @retval None
  */
void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);


Цитата
Установить одновременно один вывод в 0, другой в 1?

Цитата
Прекрасно понимаю, что такое свойство мне [ ] не нужно.
похоже вы не понимаете о чем речь идет. при чем тут один вывод и другой одновременно? тут всего один вывод требуется инвертировать.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 21 2017, 05:49
Сообщение #320


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(juvf @ Apr 21 2017, 08:33) *
Вы заблуждаетесь, они с вами не согласны. )))
Иногда требуется не просто установить в 1 или в 0, а переключить. Для чего - это отдельная тема. В некоторых процессорах, если не ошибаюсь, есть отдельный регистр для toggle. В стм32 его нет. Плохо. Но st такой функционал добавили в SPL.
похоже вы не понимаете о чем речь идет. при чем тут один вывод и другой одновременно? тут всего один вывод требуется инвертировать.

Комплементарные сигналы - это всегда пара. А вы о чем?
Если мне нужно в одно время установить и сбросить несколько сигналов (в одном порту), я подготовлю нужное слово заранее и пошлю его в BSRR.
Если мне нужно инвертировать сигнал, я установлю или сброшу его в состояние, противоположное предыдущему. Что в библиотеке и сделано.
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 21 2017, 05:56
Сообщение #321


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(ViKo @ Apr 20 2017, 22:48) *
Цитата
У Infineon XMC4700/4800 подобный регистр имеет ещё более замечательное свойство: при одновременной записи единички и в установку бита и в сброс бита, соответствующий бит инвертируется. Атомарно.

Это глупое свойство, не дающее никакой пользы.

Цитата
Комплементарные сигналы - это всегда пара. А вы о чем?
где тут пара?

jcxz говорит, что в Infineon XMC4700/4800 для инверсии вывода, одного вывода, нужно в BSRR регистр записать одновременно SetBit и ResetBit. При этом, вне зависимости от состояния вывода, он инвертируется. Эта операция атомарная и можно из разных потоков, даже из прерываний безопасно это делать. например для вывода РА0 это выглядит так
GPIOA->BSRR = GPIO_BSRR_BS0 | GPIO_BSRR_BR

2ViKo а про Комплементарные сигналы - тут я соглашусь, можно без тогла 2 вывода одновременно дёрнуть.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 21 2017, 06:00
Сообщение #322


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Посмотрите сообщение, на которое я отвечал.
Я прекрасно понимаю, о чем говорится. Повторить - такое свойство [ ] не нужно.
Toggle - это Т-триггер. Поднимите руку, кто применял микросхемы таких триггеров.
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 21 2017, 06:24
Сообщение #323


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(ViKo @ Apr 21 2017, 11:00) *
Посмотрите сообщение, на которое я отвечал.

я понял... просмотрел, уже отписал. тут я согласен
Цитата
Повторить - такое свойство [ ] не нужно.
а вот тут не понятно.... вы говорите, что если вам надо переключить бит, вы - установлю или сброшу его в состояние, противоположное предыдущему. Что в библиотеке и сделано. т.е. программно его инвертируете. Но аппаратное атомарное инвертирование - это для вас глупое свойство, не дающее никакой пользы. По мойму сами себе противоречите.
Польза в том, что инвертирование вывода будет за 1 машинный такт, атомарное, вот и всё!
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 21 2017, 06:48
Сообщение #324


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Заранее подготовлю слово для установки и слово для сброса. Когда нужно, пошлю.
За так(т) ничего не делается.

Предпочитаю конкретное поведение, не зависящее от того, в каком состоянии был до того.
Go to the top of the page
 
+Quote Post
Axel
сообщение Apr 21 2017, 06:57
Сообщение #325


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(juvf @ Apr 21 2017, 08:56) *
...про Комплементарные сигналы - тут я соглашусь, можно без тогла 2 вывода одновременно дёрнуть.


Если нужно периодически (и быстро) тоглить комплементарные пины, и для этого надо ОДИН раз установить их состояние, а потом просто, не анализируя текущее состояние, писать в регистр КОНСТАНТУ...

Цитата
Поднимите руку, кто применял микросхемы таких триггеров.


А на транзисторах слабо? biggrin.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 21 2017, 07:06
Сообщение #326


Гуру
******

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



Цитата(ViKo @ Apr 21 2017, 07:00) *
Прекрасно понимаю, что такое свойство мне [ ] не нужно.
STM согласна со мной, а не с вами. laughing.gif

Так оказывается это Вы в согласии с STM убрали из её периферии кучу полезного упростив её до неприличия, как то:
FIFO в различной периферии, dual- и quad-SPI, передачи "свЯзным списком" из DMA и т.п.
Вот оказывается кто виноват! biggrin.gif

Цитата(juvf @ Apr 21 2017, 08:24) *
я понял... просмотрел, уже отписал. тут я согласен
а вот тут не понятно.... вы говорите, что если вам надо переключить бит, вы - установлю или сброшу его в состояние, противоположное предыдущему. Что в библиотеке и сделано. т.е. программно его инвертируете. Но аппаратное атомарное инвертирование - это для вас глупое свойство, не дающее никакой пользы. По мойму сами себе противоречите.
Польза в том, что инвертирование вывода будет за 1 машинный такт, атомарное, вот и всё!

Человек не понимает понятие "атомарность". Что поделать.
Для одновременной установки и сброса (а это нужно например для формирования парафазных сигналов, но не только - есть другие применения, где очень сложно без такой опции)
если нет возможности инверсии пина, то ViKo придётся:
1. запретить прерывания;
2. считать слово из порта текущих значений пинов;
3. установить в нём бит;
4. сбросить в нём бит;
5. записать слово в порт текущих значений пинов;
6. разрешить прерывания.
Всего-то 6 операций вместо одной.
ViKo, Вы: а) понятия не имеет об атомарности операций и её необходимости? или б) троллите всех тут?
Go to the top of the page
 
+Quote Post
Reflector
сообщение Apr 21 2017, 07:11
Сообщение #327


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 15-07-06
Пользователь №: 18 836



Цитата(AHTOXA @ Apr 20 2017, 10:42) *
В вашем коде две проблемы:
1. Проблема с двухэтапной записью в MODER. Выше уже очень хорошо объяснили, что это нехорошо. Потому что ножка переводится в промежуточное состояние, которое может быть нежелательным. И при возникновении прерывания между двумя записями ножка может остаться в этом состоянии достаточно продолжительное время. Этого может быть достаточно, чтобы что-нибудь сжечь. Это реальная мина, потому что на столе может всё работать, а в продакшене может рвануть.

В твоем кода, кстати, то же самое. В MODER и еще двух регистрах режим задается выставлением двух битов, но при использовании bitband они выставляются по отдельности...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 21 2017, 07:16
Сообщение #328


Гуру
******

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



Цитата(Axel @ Apr 21 2017, 08:57) *
Если нужно периодически (и быстро) тоглить комплементарные пины, и для этого надо ОДИН раз установить их состояние, а потом просто, не анализируя текущее состояние, писать в регистр КОНСТАНТУ...

Как вариант такого применения (я использовал это на практике):
Реализация передачи для soft-UART через таймер+DMA+GPIO - при наличии возможности инверсии пинов это делается очень легко простой DMA-транзакцией (без использования передачи "свЯзных списков") заранее подготовленного массива по одному адресу, без влияния на соседние пины и всего с одним прерыванием на байт по окончании передачи всего блока.
На МК где нет инверсии пина, это решается более громоздкой передачей "свЯзным списком" в перемежающие адреса регистров установки или сброса.
Либо (если в GPIO МК есть регистр маски пинов) - маскированием (но операция может быть конфликтной с другими подобными).
На STM32 это не решается никак из-за отсутствия инверсии пина и отсутствии передачи "свЯзным списком". Только дёргаться в прерывания на каждый бит, переключая адреса в "double buffer" DMA режиме. laughing.gif
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 21 2017, 07:28
Сообщение #329


Профессионал
*****

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



Цитата(jcxz @ Apr 21 2017, 10:16) *
Как вариант такого применения (я использовал это на практике):
Реализация передачи для soft-UART через таймер+DMA+GPIO -

Какой суровый ногодрыг получается... wacko.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 21 2017, 07:37
Сообщение #330


Гуру
******

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



Цитата(Forger @ Apr 21 2017, 09:28) *
Какой суровый ногодрыг получается... wacko.gif

Как раз для проца - совсем несуровый - его загрузка почти как с аппаратным UART получается - всего одно прерывание в конце блока. А если не жалко памяти, то можно и tx.FIFO эмулировать biggrin.gif

PS: Чой-то я ошибся - прогнал напраслину на STM32 rolleyes.gif
Сейчас глянул - у него же установка/сброс через один регистр делаются, значит такой soft-UART можно и на нём сделать. Что-то у меня в мыслях было, что это два разных регистра.... wacko.gif
Go to the top of the page
 
+Quote Post

26 страниц V  « < 20 21 22 23 24 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th August 2025 - 10:52
Рейтинг@Mail.ru


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