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

 
 
26 страниц V  « < 21 22 23 24 25 > »   
Reply to this topicStart new topic
> Библиотеки для STM32
Forger
сообщение Apr 21 2017, 07:42
Сообщение #331


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

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



Цитата(jcxz @ Apr 21 2017, 10:37) *
Как раз для проца - совсем несуровый - ...

Суровый в смысле отладки и тестирования. Такое, наверно, приходится применять, когда камень заменить нереально, т. к. уже понаделана куча плат. У вас тот случай? wink.gif


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


Участник
*

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



Цитата(juvf @ Apr 21 2017, 06:04) *
пусть b = 0xff;
GpioB<4>::write(b & 0x20); b & 0x20 даёт 0x20. что дальше? write() принимает bool. т.е. при передачи аргумента есть неявное преобразование uint8_t(0x20) в bool (0х01)? да и ещё и передача аргумента... т.е. копя data создается внутри write().

Write всегда инлайнится, никакой копии data там не будет. Вот дизассм:
Код
0x20000844  ldr r3, [sp, #4]
0x20000846  ldr r2, [pc, #80]
0x20000848  ubfx r3, r3, #5, #1
0x2000084c  lsls r3, r3, #8
0x2000084e  orr.w r3, r3, #0x1000000
0x20000852  str r3, [r2, #24]

А это для для варианта с проверкой:
Код
// GPIOB->BSRR = (b & 0x20) ? GPIO_BSRR_BS4 : GPIO_BSRR_BR4;
0x20000844  ldr r2, [sp, #4]
0x20000846  ldr r3, [pc, #84]
0x20000848  tst.w r2, #32
0x2000084c  ite eq
0x2000084e  moveq.w r2, #1048576
0x20000852  movne r2, #16
0x20000854  str r2, [r3, #24]

Лишняя команда, лишние 2 байта, абсолютно не критично, но пострадала еще и наглядность, причем такой менее очевидный код еще и приходится для каждого пина писать заново.

ps.
Только я тут опечатался, не GpioB, он работает с маской группы битов, тогда как минимум нужно 4 заменить на 0x10, а PinB...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 21 2017, 07:46
Сообщение #333


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Reflector @ Apr 21 2017, 12:11) *
В твоем кода, кстати, то же самое. В MODER и еще двух регистрах режим задается выставлением двух битов, но при использовании bitband они выставляются по отдельности...

Да, есть такое. Но это лучше, чем испортить MODER при RMW из нескольких потоков.
Прерывания запрещать в настройке пина я не решился.

А у тебя как это сделано?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 21 2017, 07:46
Сообщение #334


Гуру
******

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



Цитата(Forger @ Apr 21 2017, 09:42) *
Суровый в смысле отладки и тестирования. Такое, наверно, приходится применять, когда камень заменить нереально, т. к. уже понаделана куча плат. У вас тот случай? wink.gif

Не совсем. Где Вы возьмёте МК с 6 UART-ами например? При этом чтобы не экзотика какая и остальная периферия нормальная была.
Вот и выбрали LPC1778 заранее зная, что надо будет один из UART-ов программно эмулировать.
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 21 2017, 07:48
Сообщение #335


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

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



Цитата(jcxz @ Apr 21 2017, 10:46) *
Не совсем. Где Вы возьмёте МК с 6 UART-ами например?

Я и задачу-то такую не найду, где нужно стока uart ...
если позволяет бюджет изделия, в таком случае я бы поставил плис


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


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(juvf @ Apr 21 2017, 09:24) *
Польза в том, что инвертирование вывода будет за 1 машинный такт, атомарное, вот и всё!

Инвертирование за один такт пожалуй единственная реальная польза. Атомарность инвертированию одного пина не особо нужна, или у Вас есть пример, где она реально может понадобиться?

Цитата(jcxz @ Apr 21 2017, 10:16) *
Как вариант такого применения (я использовал это на практике):
Реализация передачи для soft-UART через таймер+DMA+GPIO
.................
На МК где нет инверсии пина, это решается более громоздкой передачей "свЯзным списком" в перемежающие адреса регистров установки или сброса.
Либо (если в GPIO МК есть регистр маски пинов) - маскированием (но операция может быть конфликтной с другими подобными).
На STM32 это не решается никак из-за отсутствия инверсии пина и отсутствии передачи "свЯзным списком".

Что-то я не совсем понимаю, а в чем проблема при наличии BSRR регистра проделать то же самое? Подготовили в памяти массив слов и шлем в BSRR, в конце блока прерывание.

Цитата(jcxz @ Apr 21 2017, 10:46) *
Где Вы возьмёте МК с 6 UART-ами например?

У того stmа, что сейчас лежит передо мной 8 UARTов, не уверен получится ли все их задействовать одновременно (в смысле распределения по ногам), но у меня не самый многоногий корпус wink.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 21 2017, 08:03
Сообщение #337


Гуру
******

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



Цитата(Forger @ Apr 21 2017, 09:48) *
Я и задачу-то такую не найду, где нужно стока uart ...
если позволяет бюджет изделия, в таком случае я бы поставил плис

Бюджет не позволяет однозначно. Во-первых - стоимость самого устройства, во-вторых - стоимость разработки (нужно ещё ПЛИС программировать); в-третьих - стоимость сопровождения (как быть если обнаружится баг в прошивке ПЛИС? необходимо удалённое обновление её прошивки значит).
Да и зачем??? ПЛИС для доп. UART-а - это из пушки по воробьям.

Цитата(Шаманъ @ Apr 21 2017, 09:51) *
У того stmа, что сейчас лежит передо мной 8 UARTов, не уверен получится ли все их задействовать одновременно (в смысле распределения по ногам), но у меня не самый многоногий корпус wink.gif

Да, вот именно у STM32 есть проблема с одновременным задействованием всех этих UART. Даже если по ногам хватит, то не хватит по ресурсам - на все не хватит DMA, а работать без DMA и без FIFO в UART-е с кучей портов одновременно, когда есть и ещё более приоритетные прерывания - будет приводить к сбоям и потерям.

PS: Да, я имел в виду на тот момент не было подходящих МК (эта разработка была лет 7 назад). В более поздней подобной разработке использовали уже Tiva - там тоже есть 8 UART-ов причём полноценных - каждый с FIFO - можно работать с ними и без DMA.

Цитата(Шаманъ @ Apr 21 2017, 09:51) *
Что-то я не совсем понимаю, а в чем проблема при наличии BSRR регистра проделать то же самое? Подготовили в памяти массив слов и шлем в BSRR, в конце блока прерывание.

Я уже написал, что тут ошибся, не посмотрел что у STM это один регистр установки/сброса - см. пост выше.

Цитата(Шаманъ @ Apr 21 2017, 09:51) *
Атомарность инвертированию одного пина не особо нужна, или у Вас есть пример, где она реально может понадобиться?

В смысле? Какую атомарность имеете в виду? Атомарность операции внутри процессора или атомарность для внешнего устройства (правильный парафазный сигнал, фронт/спад в один момент)?
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 21 2017, 08:10
Сообщение #338


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

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



Цитата(jcxz @ Apr 21 2017, 10:57) *
Бюджет не позволяет однозначно. Во-первых - стоимость самого устройства, во-вторых - стоимость разработки (нужно ещё ПЛИС программировать);

Ну, тут уж все надо считать. Воткнуть в плис готовый аппаратный uart, исзодников которого щас интернетах вагон и маленькая тележка .. не вижу особых трудностей.
Нужен лишь тот, кто умеет работать с плис, впрочем, опытный разраб. сумеет научиться самостоятельно, но это время и скорее всего деньги.
Короче, я предложил вариант, который сам бы применил в подобном случае.

Цитата
в-третьих - стоимость сопровождения (как быть если обнаружится баг в прошивке ПЛИС? необходимо удалённое обновление её прошивки значит).

На кой менять прошивку, где работают только несколько одинаковых uart? Для такой тривиальной задачи имеет смысл сразу ее отладить и оттестировать.
Впрочем, если в плис будет еще что-то, кроме uart, то прошивку можно делать прямо от проца - сменили прошивку проца и он сменил прошивку плис. Но это уже совсем другая история.

Цитата
ПЛИС для доп. UART-а - это из пушки по воробьям.
Плис бывают разные )))


Как вариант без плис: MAX14830


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


Гуру
******

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



Цитата(Forger @ Apr 21 2017, 10:06) *
На кой менять прошивку, где работают только несколько одинаковых uart? Для такой тривиальной задачи имеет смысл сразу ее отладить и оттестировать.

Ну да... Гладко было на бумаге да забыли про овраги. Как показывает практика, даже в самой отлаженной и тривиальной задаче могут быть баги.
Наступали на эти грабли и очень больно. У Вас видно нет заказчиков с несколькими тысячами Ваших изделий раскиданных на тысячи км по глухой тайге. Да ещё когда устройство работает на объекте в режиме 24/7 и отключить его - огромная проблема. Стоимость ошибки в ПО и обновления ПО с приездом на объект тут получается просто фантастической. Я сам когда-то летал на вертолёте по этим объектам и обновлял прошивки. Рассказать про стоимость часа аренды вертолёта? cool.gif
С тех пор взяли за правило: если в изделии используются некие компоненты с прошивкой, то должна быть возможность удалённого обновления этой прошивки по протоколу работы устройства без его остановки в обязательном порядке. И это правило нас потом неоднократно выручало.

Цитата(Forger @ Apr 21 2017, 10:06) *
Плис бывают разные )))

Стоимость ПЛИС какой бы она ни была, всё равно выше 0. А это изделие предполагалось сделать бюджетным.
И ещё Вы забываете про стоимость изготовления. ПЛИС ещё прошить надо.
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 21 2017, 08:18
Сообщение #340


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

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



Цитата
И ещё Вы забываете про стоимость изготовления. ПЛИС ещё прошить надо.
Наверно, у вас работает очень дорогой настройшик - 2 минуты работы которого © "стоят тысячу фунтов" sm.gif


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


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

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



Цитата(Шаманъ @ Apr 21 2017, 12:51) *
Атомарность инвертированию одного пина не особо нужна, или у Вас есть пример, где она реально может понадобиться?
на вскидку один я уже писал в этой теме. на РА0 у вас CS, на РА5 у вас светодиод внешний вачдог. каждый пин дергается в отдельном потоке. Если использовать неатомарный тогл (GPIO_ToggleBits() ) для вачдога из SPL от STM, без критСекций/запрета прерываний/мьютексов на порта РА, то будет косяк.
Да даже без ОС: в главном while вы работаете с РB1, в прерывании PB2 - вот ещё случай.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 21 2017, 08:22
Сообщение #342


Гуру
******

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



Цитата(Forger @ Apr 21 2017, 10:18) *
Наверно, у вас работает очень дорогой настройшик - 2 минуты работы которого © "стоят тысячу фунтов" sm.gif

Стоимость работы настройщика + стоимость ПЛИС (или чего там вместо) + стоимость написания ПО обновления прошивки.
Это на одной тарелке весов. На другой - стоимость написания soft-UART.
Сравните. Разница многократная.

Да - и как с этой ПЛИС взаимодействовать? Поди ещё и внешняя шина нужна? Ног в том проекте тоже не хватало.
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 21 2017, 08:23
Сообщение #343


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

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



Цитата(jcxz @ Apr 21 2017, 11:22) *
Да - и как с этой ПЛИС взаимодействовать? Поди ещё и внешняя шина нужна? Ног в том проекте тоже не хватало.

Вполне хватит одного SPI, как это сделано в MAX14830


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


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

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



Цитата(jcxz @ Apr 21 2017, 10:06) *
Человек не понимает понятие "атомарность". Что поделать.
Для одновременной установки и сброса (а это нужно например для формирования парафазных сигналов, но не только - есть другие применения, где очень сложно без такой опции)
если нет возможности инверсии пина, то ViKo придётся:
1. запретить прерывания;
2. считать слово из порта текущих значений пинов;
3. установить в нём бит;
4. сбросить в нём бит;
5. записать слово в порт текущих значений пинов;
6. разрешить прерывания.
Всего-то 6 операций вместо одной.
ViKo, Вы: а) понятия не имеет об атомарности операций и её необходимости? или б) троллите всех тут?

Вы хоть смотрели, как работают биты в регистре BSRR? Вся ваша галиматья не к месту.
Ага, вижу, посмотрели таки! Гуд! Теперь согласны насчет галиматьи?
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Apr 21 2017, 08:42
Сообщение #345


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(jcxz @ Apr 21 2017, 11:03) *
В смысле? Какую атомарность имеете в виду? Атомарность операции внутри процессора или атомарность для внешнего устройства (правильный парафазный сигнал, фронт/спад в один момент)?

Атомарность внутри процессора. Для внешнего устройства по идее достаточно (скажем для битов 0 и 7):
GPIOx->BSRR = (~GPIOx->IDR & 0x81) | 0x00810000;
Ну и изначально должно быть правильное состояние битов (например, GPIOx->BSRR = 0x00800001).


Цитата(juvf @ Apr 21 2017, 11:21) *
на вскидку один я уже писал в этой теме. на РА0 у вас CS, на РА5 у вас светодиод внешний вачдог. каждый пин дергается в отдельном потоке. Если использовать неатомарный тогл (GPIO_ToggleBits() ) для вачдога из SPL от STM, без критСекций/запрета прерываний/мьютексов на порта РА, то будет косяк.
Да даже без ОС: в главном while вы работаете с РB1, в прерывании PB2 - вот ещё случай.

Этот пример мимо, ибо в данном случае идет речь о регистре BSRR и операциях с одним пином. Если изменение состояния пинов сделано через BSRR, то все будет прекрасно работать в двух потоках sm.gif Проблема может быть только если оба потока пытаются управлять одним и тем же пином, но это без какой-либо синхронизации не правильно по своей сути.

Сообщение отредактировал Шаманъ - Apr 21 2017, 08:48
Go to the top of the page
 
+Quote Post

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

 


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


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