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

 
 
26 страниц V  « < 19 20 21 22 23 > »   
Reply to this topicStart new topic
> Библиотеки для STM32
juvf
сообщение Apr 20 2017, 09:28
Сообщение #301


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

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



Цитата(AHTOXA @ Apr 20 2017, 14:18) *
ЗЫ. Я там вам ответил про варианты pin.h, возможно вы проглядели (тема растёт очень быстро).

Я видел. Полистал код. На заметку взял. Спасибо!!!


Всё? Расходимся! )))))))))))
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 20 2017, 09:42
Сообщение #302


Гуру
******

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



Цитата(Forger @ Apr 20 2017, 09:14) *
Не скажу, давно это было, не помню, где именно. Но почему-то запомнилось что int там был 16-битный.

На некоторых платформах и char бывает 16-битным laughing.gif

Цитата(AHTOXA @ Apr 20 2017, 11:18) *
Ну тогда bit-band. Есть везде, кроме L0.

И кроме M7.
Go to the top of the page
 
+Quote Post
Эдди
сообщение Apr 20 2017, 09:48
Сообщение #303


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Цитата(jcxz @ Apr 20 2017, 12:42) *
На некоторых платформах и char бывает 16-битным

Пример - в студию!
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 20 2017, 09:54
Сообщение #304


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

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



Код
void toggle() { isLow() ? setToHigh() : setToLow(); }
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 20 2017, 10:25
Сообщение #305


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

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



Цитата(juvf @ Apr 20 2017, 12:54) *
Код
void toggle() { isLow() ? setToHigh() : setToLow(); }

Я лично не очень жалую такую форму условия со знаком "?", просто, дело вкуса, не более того.


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


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

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



Цитата(Forger @ Apr 20 2017, 15:25) *
Я не очень жалую такую форму условия со знаком "?"

такая же фигня. вообще не пользовать оператор ? до недавнего времени.... меня, когда "воспитывали", то по рукам били за несколько операторов в одной строке. И отучили. В принцепе согласен.... такие конструкции как
if(isLow()) return;
ухудшают читаемость кода. стал пользовать
if (isLow())
setToHigh();
else
setToLow();

после перешел на ?. нет портянок и нет в одной строке кучи операторов
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 20 2017, 10:39
Сообщение #307


Гуру
******

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



Цитата(Эдди @ Apr 20 2017, 11:48) *
Пример - в студию!

Семейство TMS320VC55xx в CCS.

Цитата(juvf @ Apr 20 2017, 12:29) *
согласен.... такие конструкции как
if(isLow()) return;
ухудшают читаемость кода. стал пользовать
...

Имхо наоборот: Портянки на несколько экранов вместо компактной записи - ухудшают читаемость.
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 20 2017, 10:56
Сообщение #308


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

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



Цитата(jcxz @ Apr 20 2017, 13:39) *
Портянки на несколько экранов вместо компактной записи - ухудшают читаемость.

+1


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


Знающий
****

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



Цитата(Reflector @ Apr 20 2017, 10:56) *
На радиокоте недавно спрашивали как записать 7 бит заданного байта в PD9, 5 бит в РВ4 и т.д.... Дали парочку ответов, лучший из которых выглядит так:
Код
GPIOD->BSRR = b & 0x80 ? GPIO_BSRR_BS9 : GPIO_BSRR_BR9;
GPIOB->BSRR = b & 0x20 ? GPIO_BSRR_BS4 : GPIO_BSRR_BR4;

Шаблонный код мог бы быть таким:
Код
GpioD<9>::write(b & 0x80);
GpioB<4>::write(b & 0x20);

Он понятнее и эффективнее, т.к. никаких проверок в нем нет.

Господа, нужно просто делать внимательно RTFM. BSRR регистр имеет замечательное свойство:
Цитата
Note: If both BSx and BRx are set, BSx has priority.

Поэтому задача решается очень просто без проверок:
Код
GPIOD->BSRR =  GPIO_BSRR_BR9 | ((b & 0x80) << 2);
GPIOB->BSRR = GPIO_BSRR_BR4 | ((b & 0x20) >> 1);


Это свойство полезно и в других задачах, обсуждаемых на последней паре страниц sm.gif.

Цитата
Какая сущность должна всем этим заниматься? Должен ли я для каждого USARTа закопать инициализацию пинов в какой-то общей функции инициализации? Считаю, что не должен

Как по мне, то если переинициализация не производится в процессе работы, то логично собрать все в одном месте. Особенно по части GPIO.

Сообщение отредактировал Шаманъ - Apr 20 2017, 13:41
Go to the top of the page
 
+Quote Post
Эдди
сообщение Apr 20 2017, 13:59
Сообщение #310


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Цитата(Шаманъ @ Apr 20 2017, 16:39) *
Поэтому задача решается очень просто без проверок:
Код
GPIOD->BSRR =  GPIO_BSRR_BR9 | ((b & 0x80) << 2);
GPIOB->BSRR = GPIO_BSRR_BR4 | ((b & 0x20) >> 1);

А не усугубят ли битовые сдвиги производительность этой и так тормозной операции?
Go to the top of the page
 
+Quote Post
Reflector
сообщение Apr 20 2017, 14:21
Сообщение #311


Участник
*

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



Цитата(Шаманъ @ Apr 20 2017, 16:39) *
Как по мне, то если переинициализация не производится в процессе работы, то логично собрать все в одном месте. Особенно по части GPIO.

Именно так, у меня вся инициализация настолько в одном месте, что я одной строкой инициализирую сам усарт вместе с портами, а рядом может быть инициализация USB или пина светодиода. Это возможно, т.к. класс пина владеет всей нужной информацией, а функция инициализации усарта знает в каком режиме эти пины нужно инициализировать. Если я не стану в нее передавать пины, то придется для каждого усарта добавить 2 строки их инициализации и тогда уже я должен думать какие-же для них нужно выбирать режимы. И это у меня 2 строки на усарт, а когда люди начинают 4 регистра gpio инициализировать вручную или когда они делают это через HAL, то получается намного больше.



Цитата(Шаманъ @ Apr 20 2017, 16:39) *
Господа, нужно просто делать внимательно RTFM. BSRR регистр имеет замечательное свойство:

Поэтому задача решается очень просто без проверок:
Код
GPIOD->BSRR =  GPIO_BSRR_BR9 | ((b & 0x80) << 2);
GPIOB->BSRR = GPIO_BSRR_BR4 | ((b & 0x20) >> 1);


Это свойство полезно и в других задачах, обсуждаемых на последней паре страниц sm.gif.

Правильно, метод write так и делает:
Код
static void write(bool data) { base()->BSRR = (0x10000 << pin) | (data << pin);    }


Сообщение отредактировал Reflector - Apr 20 2017, 14:18
Go to the top of the page
 
+Quote Post
Obam
сообщение Apr 20 2017, 14:22
Сообщение #312


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(Эдди @ Apr 20 2017, 17:59) *
А не усугубят ли битовые сдвиги производительность этой и так тормозной операции?

Битовые сдвиги у ARM бесплатные нативные. Ни у кого из МК нет операндом "шифтера".


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 20 2017, 16:03
Сообщение #313


Гуру
******

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



Цитата(Шаманъ @ Apr 20 2017, 15:39) *
Господа, нужно просто делать внимательно RTFM. BSRR регистр имеет замечательное свойство:

У Infineon XMC4700/4800 подобный регистр имеет ещё более замечательное свойство: при одновременной записи единички и в установку бита и в сброс бита, соответствующий бит инвертируется. Атомарно.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 20 2017, 17:48
Сообщение #314


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

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



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

Это глупое свойство, не дающее никакой пользы.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 20 2017, 21:52
Сообщение #315


Гуру
******

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



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

Если Вы не понимаете назначение чего-то, это не повод называть это глупым.
Go to the top of the page
 
+Quote Post

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

 


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


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