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

 
 
> Щупаю HAL библиотеку. Групповое управление выводами?, С пинами понятно.А как для шин,когда в этом порту есть независим пины?
Мур
сообщение Jul 12 2015, 09:56
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Удобно в этой библиотеке организовывать ногодрыганье. Выбор стандартный GPIO_PIN_SET, GPIO_PIN_RESET...

Что-то с ходу не врублюсь, как средствами библиотеки организовать установку необходимого кода в шине. Подозреваю использование маски, чтобы не трогать состояния иных линий, не задействованных в шине, но имеющих иное применение для управления в других процессах...

Ткните носом, господа! По кругу блукаю и не верю в побитовые установки. Как-то коряво выходит! Что-то я не вижу главного...
Шина на 8 разрядов должна быть простой.

Спасибо за совет!
Рад буду примерам...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Defin
сообщение Jul 12 2015, 11:51
Сообщение #2


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

Группа: Свой
Сообщений: 105
Регистрация: 26-12-11
Из: Казань
Пользователь №: 69 101



HAL от ST я так понимаю?
Для такой задачи он не нужен, можно просто выставлять биты в регистре BSRR порта GPIO. Можно как задавать выводы для установки, так и для снятия.
Go to the top of the page
 
+Quote Post
Мур
сообщение Jul 12 2015, 12:55
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Defin @ Jul 12 2015, 14:51) *
HAL от ST я так понимаю?
Для такой задачи он не нужен, можно просто выставлять биты в регистре BSRR порта GPIO. Можно как задавать выводы для установки, так и для снятия.

Спасибо!
Да! STM32...
Сам HAL это использует...
Цитата
/**
* @brief Sets or clears the selected data port bit.
*
* @note This function uses GPIOx_BSRR register to allow atomic read/modify
* accesses. In this way, there is no risk of an IRQ occurring between
* the read and the modify access.
*
* @param GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral
* @param GPIO_Pin: specifies the port bit to be written.
* This parameter can be one of GPIO_PIN_x where x can be (0..15).
* @param PinState: specifies the value to be written to the selected bit.
* This parameter can be one of the GPIO_PinState enum values:
* @arg GPIO_BIT_RESET: to clear the port pin
* @arg GPIO_BIT_SET: to set the port pin
* @retval None
*/
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
{
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
assert_param(IS_GPIO_PIN_ACTION(PinState));

if(PinState != GPIO_PIN_RESET)
{
GPIOx->BSRR = GPIO_Pin;
}
else
{
GPIOx->BSRR = (uint32_t)GPIO_Pin << 16;
}
}


Побитно это уместно. Но на 8 бит лаконично не получится...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 13 2015, 06:56
Сообщение #4


Гуру
******

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



Цитата(Мур @ Jul 12 2015, 15:55) *
if(PinState != GPIO_PIN_RESET)
{
GPIOx->BSRR = GPIO_Pin;
}
else
{
GPIOx->BSRR = (uint32_t)GPIO_Pin << 16;
}
Бьюсь головой об стол.


--------------------
На любой вопрос даю любой ответ
"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
scifi
сообщение Jul 13 2015, 15:33
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Сергей Борщ @ Jul 13 2015, 09:56) *
Бьюсь головой об стол.

Сопереживаю.
Такое ачучение складывается, что эти "блюмблюатеки" проектируют недоучившиеся студенты. Вот есть нормальный такой регистр, который всем понятен. Нет, нужно завернуть его в говнообёртку. А потом неокрепшие умы терзаются: "Ну как же правильно дёргать ножкой, чтобы всё было по феншую?", подразумевая, конечно, что самому в регистры лезть нельзя. Театр абсурда.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 13 2015, 19:42
Сообщение #6


Гуру
******

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



Цитата(scifi @ Jul 13 2015, 18:33) *
Вот есть нормальный такой регистр, который всем понятен. Нет, нужно завернуть его в говнообёртку.
Ну ладно, с содержимым функции еще можно было бы смириться, но почему не сделать эту функцию статической и не поместить ее в заголовочный файл? Компилятор бы ужал ее по максимуму и эффективность была бы практически как с прямой записью в регистр. Но видимо это верхняя математика для писателей библиотек.


--------------------
На любой вопрос даю любой ответ
"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
k000858
сообщение Jul 14 2015, 02:49
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(Сергей Борщ @ Jul 13 2015, 23:42) *
Ну ладно, с содержимым функции еще можно было бы смириться, но почему не сделать эту функцию статической и не поместить ее в заголовочный файл? Компилятор бы ужал ее по максимуму и эффективность была бы практически как с прямой записью в регистр. Но видимо это верхняя математика для писателей библиотек.

эм. простите что немного не по теме..
я привык считать, что статические функции имеют ограничения и доступны только в пределах библиотеки (за счет чего происходит сжатие - оптимизация).
т.е. выражения "сделать эту функцию статической" и "поместить ее в заголовочный файл" взаимоисключающие..
или я чего то не понимаю..?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 14 2015, 07:18
Сообщение #8


Гуру
******

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



Цитата(k000858 @ Jul 14 2015, 05:49) *
я привык считать, что статические функции имеют ограничения и доступны только в пределах библиотеки
В пределах единицы трансляции.

Цитата(k000858 @ Jul 14 2015, 05:49) *
т.е. выражения "сделать эту функцию статической" и "поместить ее в заголовочный файл" взаимоисключающие..
Напротив. Это позволяет иметь в каждой единице трансляции копию этой функции, что позволяет оптимизатору видеть тело этой функции в каждой единице трансляции и попытаться вставить все тело в точку вызова. Поскольку обсуждаемая функция в 99.99% случаев имеет константный аргумент PinState, оптимизатор выкидывает и проверку условия и неиспользуемую ветку под условием. Оставшееся вырождается в пару-тройку команд, которые занимают явно меньше места, чем код по вызову исходной функции (не говоря уже о времени исполнения). А если таких вызовов идет несколько, то оптимизатор может дополнительно объединить между ними загрузку указателя на структуру порта. Да, как заметил Непомнящий Евгений, это некое подобие inline, не предусмотренного в стандартном C 89 года. К сожалению, подобные "библиотеки от призводителя" до сих пор тащат в себе совместимость с этим древним стандартом. Можно пойти еще дальше - написать макрос, который при компиляции в режиме стандарта 89 года будет разворачиваться в static, а для более нового - в inline. Но слабо верится, что кто-то в ST когда-нибудь так сделает.


--------------------
На любой вопрос даю любой ответ
"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

Сообщений в этой теме
- Мур   Щупаю HAL библиотеку. Групповое управление выводами?   Jul 12 2015, 09:56
|||- - Непомнящий Евгений   Цитата(k000858 @ Jul 14 2015, 05:49) эм. ...   Jul 14 2015, 04:29
||||- - k000858   Цитата(Непомнящий Евгений @ Jul 14 2015, 08...   Jul 14 2015, 07:12
|||- - scifi   Цитата(Сергей Борщ @ Jul 14 2015, 10:18) ...   Jul 15 2015, 10:52
|||- - Сергей Борщ   Цитата(scifi @ Jul 15 2015, 13:52) Уже не...   Jul 15 2015, 11:43
|||- - Мур   Цитата(Сергей Борщ @ Jul 15 2015, 14:43) ...   Jul 15 2015, 12:32
||- - Мур   Цитата(Сергей Борщ @ Jul 13 2015, 09:56) ...   Jul 13 2015, 16:04
|- - scifi   Цитата(Defin @ Jul 12 2015, 14:51) Для та...   Jul 12 2015, 20:07
- - Defin   Этот регистр принимает маску. GPIOx->BSRR = (м...   Jul 12 2015, 13:20
|- - Мур   Цитата(Defin @ Jul 12 2015, 16:20) Этот р...   Jul 12 2015, 13:33
- - Nixon   Кто вам мешает делать вызов HAL_GPIO_WritePin с па...   Jul 12 2015, 18:12
|- - Defin   Цитата(Nixon @ Jul 12 2015, 21:12) Кто ва...   Jul 12 2015, 20:43
|- - Мур   Цитата(Nixon @ Jul 12 2015, 21:12) Кто ва...   Jul 13 2015, 06:14
- - k000858   извиняюсь за неграмотность, что есть ЦитатаВ преде...   Jul 15 2015, 10:15
|- - Непомнящий Евгений   Цитата(k000858 @ Jul 15 2015, 13:15) изви...   Jul 15 2015, 10:51
- - Мур   Оказалось, что что нам по-настоящему нужно,-рядом...   Jul 16 2015, 04:57
|- - k000858   Цитата(Мур @ Jul 16 2015, 08:57) Оказалос...   Jul 16 2015, 05:17
|- - Мур   Цитата(k000858 @ Jul 16 2015, 08:17) если...   Jul 16 2015, 07:13
- - Мур   https://www.youtube.com/watch?v=PqsgSVbgfBs Здесь...   Jul 16 2015, 11:19
- - Мур   Хоть бы кто обратил внимание на PIN_ALL!!...   Aug 1 2015, 12:37


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 14:03
Рейтинг@Mail.ru


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