|
Щупаю HAL библиотеку. Групповое управление выводами?, С пинами понятно.А как для шин,когда в этом порту есть независим пины? |
|
|
|
 |
Ответов
|
Jul 12 2015, 12:55
|

Знающий
   
Группа: Свой
Сообщений: 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 бит лаконично не получится...
|
|
|
|
|
Jul 14 2015, 02:49
|

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

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

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
Сообщений в этой теме
Мур Щупаю 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|