Например TDA7294

Форум РадиоКот • Просмотр темы - STM32 новичку в ARM что к чему
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 23, 2024 10:10:47

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 8459 ]     ... , , , 317, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Сб сен 19, 2020 23:46:46 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
То, что изменяемые извне переменные должны объявляться с модификатором volatile -- это не я считаю. Это единственный способ избежать множества дивных эффектов в случайные моменты времени.
Далеко не единственный. Странно, что вы этого не знаете.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс сен 20, 2020 00:24:57 
Друг Кота

Карма: 20
Рейтинг сообщений: 228
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6388
Рейтинг сообщения: 0
Просветите?


Хотите сказать что приведя тип исключив volatile, функция работает не так как должна?

Я в самом начале уже сказал все, что хотел. Словами и иллюстрациями. Теперь помогаю тем, кто ни прочесть, ни в картинках разглядеть никак не способен.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс сен 20, 2020 00:32:01 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 0
a5021 писал(а):
Я в самом начале уже сказал все, что хотел. Словами и иллюстрациями.
Вы так и не ответили. Приведение типа volatile массива к не volatile при передаче в функцию HAL_SPI_Receive_DMA приводит к сбою в работе программы?

a5021 писал(а):
Теперь помогаю тем, кто ни прочесть, ни в картинках разглядеть никак не способен.
Пишите так как будто это нужно нам, а не вам.
Научитесь пользоваться volatile чтобы понимать в каких случаях он действительно нужен. Не дело везде объявлять переменные с модификатором volatile и паниковать когда это не получается.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс сен 20, 2020 00:37:14 
Друг Кота

Карма: 20
Рейтинг сообщений: 228
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6388
Рейтинг сообщения: -2
Мурик, ложитесь лучше спать. Я не нанимался вызывать у вас просветления.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс сен 20, 2020 00:39:50 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: -2
Изучайте.
Вложение:
volatile для чайников.pdf [176.63 KiB]
Скачиваний: 138

Несогласны с декларацией функции, идите в ST и доказывайте что volatile нужен. То что вы пишете здесь никак не изменит декларацию функций HAL.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс сен 20, 2020 01:11:51 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 4
a5021 писал(а):
Это единственный способ избежать множества дивных эффектов в случайные моменты времени
Не единственный. Например, если никто не мешает Вам заблокировать работу с буфером, пока DMA в него пишет.

А надеятся, что добавление volatile к аргументу чудесным образом всё решает - это неправильно.

Например, возьмём буфер из 10 volatile элементов. Допустим, DMA читает из этого буфера их последовательно, и процесс чтения в данный момент времени - на 5-м элементе. В это время параллельно (по прерыванию, например), изменяются элементы 2 и 7. Какие могут быть варианты:

1. volatile. Из индекса 2 мы уже прочитали - тут ничего не попишешь, ну а из индекса 7 будет прочитано новое число. Есть повод задуматься, хорошо ли это, что данные пришли из разных по сути выборок.
2. не volatile. Есть очень малый шанс, что из индекса 7 будет прочитано прежнее число, а не свежезаписанное (малый потому, что вряд ли весь массив будет предварительно скопирован в рабочие регистры и тем самым "закэшируется" локально). Но если и так - то плохого в этом ничего нет.

Оба варианта имеют свои недостатки. А делать принудительно весь аргумент функции как volatile - это лишь лишить себя (и компилятор) дополнительной возможной оптимизации.

Вместо этого, если Вам действительно нужна атомарность работы со всем буфером, Вы, как программист, должны обеспечить её другим способом - каким-нибудь аналогом mutex-а. В случае микроконтроллера без ОС - это может быть какой-нибудь банальный флаг типа (volatile bool isBusy). Напишите свою HAL_SPI_Receive_DMA_Locked() функцию, в которой будет вызов уже стандартной HAL-овской, обёрнутый этим флагом, и обеспечьте другую часть своего кода на проверку этих флагов, чтобы они и не думали лезть в этот буфер, пока он залочен.


Последний раз редактировалось WiseLord Вс сен 20, 2020 01:17:58, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс сен 20, 2020 01:16:19 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
WiseLord, volatile это не про атомарность, тут вы неправы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс сен 20, 2020 01:19:14 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 4
Собственно, я и пытаюсь сказать, что volatile с атомарностью никак не связан. А a5021, видимо, их ассоциирует именно так.

Volatile по большому счёту лишь предотвращает помещение переменной в какой-нибудь из регистров, который затем используется на протяжении всей функции в качестве кэша этой переменной.

Но в случае массивов - я сильно сомневаюсь, что будет кэшироваться сразу несколько его элементов.

P.S. В случае упомянутой выше HAL_SPI_Receive_DMA функции каждый элемент буфера затрагивается только один раз - когда он из периферийного регистра попадает в элемент массива. Каких-то множественных обращений (которые могли бы вызвать разные странные эффекты) к нему там нет. Поэтому volatile тут и не нужен.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс сен 20, 2020 01:55:56 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
И ещё раз нет. Компилятор не видит как в буфер пишутся данные, поэтому считает, что в нём всегда что-то известное на этапе компиляции лежит. И может "почикать" обращения к буферу вовсе. volatile это про оптимизацию.

Натыкать volatile ума много не надо. Куда интереснее заставить компилятор просчитать оптимальный код или его отсутствие на этапе компиляции.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс сен 20, 2020 09:19:56 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
так никто и не ответил, каким образом может измениться поведение этой функции с/без volatile, если данные по указателю эта функция не использует?
как всегда спор теоретегоф...
VladislavS писал(а):
И может "почикать" обращения к буферу вовсе
меня всегда интересовало: а вообще бывают случаи, когда в выражении a = b + b + b; необходимо учитывать, что это самое бэ может каждый из трех раз иметь другое значение? вот чисто алгоритмически - бывают?

Добавлено after 3 minutes 44 seconds:
VladislavS писал(а):
что в нём всегда что-то известное на этапе компиляции лежит
по-моему, вы ошибаетесь: не известное на этапе компиляции, а неизменное между точками исполнения (или как там эти участки генерации кода компилятором называются правильно).

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс сен 20, 2020 11:45:28 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
меня всегда интересовало: а вообще бывают случаи, когда в выражении a = b + b + b; необходимо учитывать, что это самое бэ может каждый из трех раз иметь другое значение? вот чисто алгоритмически - бывают?
Не зная что такое а и b предположить можно что угодно. Про перегрузку операторов слышали?
по-моему, вы ошибаетесь: не известное на этапе компиляции, а неизменное между точками исполнения (или как там эти участки генерации кода компилятором называются правильно).
Я имел в виду именно известное на этапе компиляции. Вот в этом коде компилятор сгенерирует запись константы 2 в порт. То что buf может измениться из прерывария или с помощью DMA он не ожидает.
Код:
uint8_t buf[2] = { 1, 2 };
GPIOA->ODR = buf[1];


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс сен 20, 2020 12:37:18 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
VladislavS писал(а):
Про перегрузку операторов слышали?
слышать слышал, но при чем тут перегрузка, если переменная "бэ" одна и та же, значит, как бы операторы не перегружались, а обрабатывать они будут одно и то же.
VladislavS писал(а):
То что buf может измениться из прерывария или с помощью DMA он не ожидает
а если ожидает - разве он сможет это как-то учесть?

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс сен 20, 2020 13:08:47 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
как бы операторы не перегружались, а обрабатывать они будут одно и то же.
Давайте сделаем вид, что вы этого не писали, а я не видел :)

а если ожидает - разве он сможет это как-то учесть?
Конечно, выделит область памяти и каждый раз оттуда будет читать. Собственно volatile к этому и приведёт.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс сен 20, 2020 13:29:29 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
VladislavS писал(а):
выделит область памяти и каждый раз оттуда будет читать
да, но тот момент, что пока он пишет 5-й элемент, первый уже не равен тому, что он написал ранее, он учесть не сможет все равно. так ведь?

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс сен 20, 2020 13:43:12 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
И вы про атомарность. Это другой вопрос. Мухи отдельно, котлеты отдельно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс сен 20, 2020 13:48:23 
Друг Кота

Карма: 20
Рейтинг сообщений: 228
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6388
Рейтинг сообщения: -4
так никто и не ответил, каким образом может измениться поведение этой функции с/без volatile, если данные по указателю эта функция не использует?

А зачем отвечать на странные вопросы, которые к теме в данном случае отношения не имеют? С тем же успехом вы бы могли требовать ответа на вопрос, как влияет частое употребление модификатора volatile на состав кишечных газов.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: HAL SPI
СообщениеДобавлено: Вс сен 20, 2020 18:31:34 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 0
Напомню, что:
Объясните, кто знает, плс, почему в неблокирующую функцию
Код:
HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size)

указатель на буфер pData передается без модификатора volatile ? Чет это на какой-то зашквар смахивает.

Вы сами начали задавать странные вопросы. Априори полагая, что volatile - правильно, а без него - какие-то выдуманные глюки и страдания будут.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: HAL SPI
СообщениеДобавлено: Вс сен 20, 2020 20:09:13 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
Априори полагая, что volatile - правильно, а без него - какие-то выдуманные глюки и страдания будут.

Чтобы не было глюков и страданий, нужно просто перестать всякими "халами" пользоваться!

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: HAL SPI
СообщениеДобавлено: Вс сен 20, 2020 20:16:53 
Друг Кота

Карма: 20
Рейтинг сообщений: 228
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6388
Рейтинг сообщения: 0
Вы сами начали задавать странные вопросы. Априори полагая, что volatile - правильно, а без него - какие-то выдуманные глюки и страдания будут.

Когда функция молча принимает неверные параметры, но ругается на верные, это выдуманные страдания? Ну поздравьте себя.

Чтобы не было глюков и страданий, нужно просто перестать всякими "халами" пользоваться!

Судя по тому, какое количество фанатов хала понабежало, говорить такие вещи здесь -- пустое дело.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс сен 20, 2020 20:23:40 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 4
a5021 писал(а):
Когда функция молча принимает неверные параметры, но ругается на верные, это выдуманные страдания?
Нет, это просто Вы передаёте ей неверные параметры.

Добавлено after 1 minute 32 seconds:
Eddy_Em писал(а):
Чтобы не было глюков и страданий, нужно просто перестать всякими "халами" пользоваться!
А вот это - двумя руками поддерживаю. И автоматически причин к недовольству не будет.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8459 ]     ... , , , 317, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 43


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y