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

 
 
> Шаблоны классов работы с пинами и портами (по маске и набору пинов) SILABS EFM32, может кому пригодится
Nixon
сообщение Mar 19 2018, 15:01
Сообщение #1


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



По мотивам STM32TPL от Anton B. Gusev aka AHTOXA сделал с учетом новых возможностей С++11/14 подобное для EFM32
Особенно интересно получился класс PortPins.

чуток поправил

Прикрепленный файл  efm32lg_gpio.zip ( 3.72 килобайт ) Кол-во скачиваний: 27


Сообщение отредактировал Nixon - Mar 20 2018, 10:00
Причина редактирования: форматирование


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
juvf
сообщение Mar 20 2018, 11:20
Сообщение #2


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

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



Цитата
Pin практически не отличим
вроде как 3 такта должен быть. ну это мож на стм32.

Пример интересный.... я бы не полез смотеть сырц, если бы в описании видел
Цитата
IV. Check pin state:
* Var = PA5::Get() //return int: 0 when RESET, 1 when SET
* Var = pa5.Get() or
* VAR = pa5;
вроде как логично 0 это 0, а 1 это 1, но вдруг вы возвращяете для порта РА5 значение (1<<5)? Такое тоже бывает. А может возвращаете RESET или SET, true или false, LOW или HI. Но так вы пишете для себя....

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

c11 щя все поддерживают. IAR, gcc. Про кеил не знаю, может там его нет. вроде как 7 лет прошло.
Go to the top of the page
 
+Quote Post
Nixon
сообщение Mar 20 2018, 11:27
Сообщение #3


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



Цитата(juvf @ Mar 20 2018, 13:20) *
вроде как 3 такта должен быть. ну это мож на стм32.

Пример интересный.... я бы не полез смотеть сырц, если бы в описании видел
вроде как логично 0 это 0, а 1 это 1, но вдруг вы возвращяете для порта РА5 значение (1<<5)? Такое тоже бывает. А может возвращаете RESET или SET, true или false, LOW или HI. Но так вы пишете для себя....
Для Pin и PortPins производится приведение считываемых данных к их реальному размеру. Т.е. для Pin вернется или 0 или 1, но никак не 1<<5


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
juvf
сообщение Mar 20 2018, 11:36
Сообщение #4


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

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



Цитата(Nixon @ Mar 20 2018, 16:27) *
Для Pin и PortPins производится приведение считываемых данных к их реальному размеру. Т.е. для Pin вернется или 0 или 1, но никак не 1<<5

Это вы знаете, так как вы знаете, что так и куда приводиться. Вы знаете что там BitBanding. у того же АНТОХА
Цитата
* V. Check pin state:
* if (PA5::Signalled()) // returns non-zero if pin input = active state (H for PA5)
возвращает ноль и НЕ НОЛЬ, а не ноль может быть и 1<<5. Ни куда не надо лезть, из шапки всё понятно.

Если писать для людей (да и для себя. т.к. сможете забыть), то уж лучше уже в шапке чиркнуть возвращаемое значение. Хотел сразу про это сказать, но у вас код "для себя". ))
Go to the top of the page
 
+Quote Post
Nixon
сообщение Mar 20 2018, 12:28
Сообщение #5


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



Цитата(juvf @ Mar 20 2018, 13:36) *
Это вы знаете, так как вы знаете, что так и куда приводиться. Вы знаете что там BitBanding. у того же АНТОХА
возвращает ноль и НЕ НОЛЬ, а не ноль может быть и 1<<5. Ни куда не надо лезть, из шапки всё понятно.

Если писать для людей (да и для себя. т.к. сможете забыть), то уж лучше уже в шапке чиркнуть возвращаемое значение. Хотел сразу про это сказать, но у вас код "для себя". ))
Согласен, задокументировал плохо. Переделаю.

Цитата(Forger @ Mar 20 2018, 13:41) *
В особых случаях, если число пинов позволяет, то я бы задействовал не один двунаправленный, а два однонаправленных пина, соединенных вместе: один на выход, второй на вход.
Но признаюсь, с таким пока еще ни разу никогда не сталкивался.
"Широкая" параллельная шина для связи например с FPGA

Цитата(Forger @ Mar 20 2018, 13:41) *
Надуманная "проблема" или я не пойму о чем речь. Приведите пример ))
Пример - есть параллельная 4-битная шина висящая на пинах 1(bit0), 11(bit1), 12(bit2) и 5(bit3) (ну получилось так при разводке). Необходимо записать на шину определенное число. Сколько операций займут у вас битовые манипуляции?

Цитата(Forger @ Mar 20 2018, 13:41) *
А вот этот момент просвятите, пожалуйста, по-подробнее, разумеется, в применении к нашей области (МК) wink.gif
Если возможно, то конкретные ситуации, где это действительно оказалось полезным.
Пожалуйста. Мне например очень помогает нормальная поддержка constexpr. Это помогает резко экономить RAM, которого никогда не хватает. Или инитить что-либо. Например
Код
struct S {
  int a;
  int b;
  int c;
};
constexpr S R[] = {{0,1,2}, {3,4,5}, {6,7,8}};
constexpr int sum ( void ) {
  int temp = 0;
  for (int i = 0; i < sizeof(R)/sizeof(S); i++) temp += R.b;
  return temp;
}
const int summa = sum();
int array[summa];
создание массива на этапе компиляции, размер которого зависит от суммы всех R.b. Причем размер R не играет значения. Пример абсолютно абстрактный.
Очень приятная фишка variadic template - помогает КРАСИВО и БЫСТРО делать например делегаты и списки типов.
Я уж молчу про битовые литералы sm.gif

P.S. Забыл сказать - динамическое выделение памяти у нас на работе запрещено внутренним регламентом.


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
Forger
сообщение Mar 20 2018, 12:51
Сообщение #6


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

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



Цитата(Nixon @ Mar 20 2018, 15:28) *
"Широкая" параллельная шина для связи например с FPGA

А нафига тут параллельная программная (соотв. медленная) шина, если вполне достаточно аппаратного SPI или чего-то подобного?
Или схемотехник решил поиздеваться над программистами или разработчик под FPGA еще не научился применять готовые модули популярных послед. шин? biggrin.gif

Цитата
Пример - есть параллельная 4-битная шина висящая на пинах 1(bit0), 11(bit1), 12(bit2) и 5(bit3) (ну получилось так при разводке).

Самое первое, что приходит в голову - выгнать такого схемотехника. Я серьезно! За подобные костыли программисты устраивают "темную" такому схемотехнику ))
А пока временно сделать программную заглушку, написанную чуть ли не АСМе. Конечно, если, требуется суперскорость и речь идет, например, про программный QuadSPI ( cranky.gif )

Цитата
Необходимо записать на шину определенное число. Сколько операций займут у вас битовые манипуляции?

Если нужна суперскорость, то нужно переделывать схему и плату, а не заниматься дрочевом с битовыми манипуляциями cranky.gif
Если скорость не критична, то и "проблема" соотв. полностью надуманная.

Цитата
Мне например очень помогает нормальная поддержка constexpr.

Любопытно ... но не очень убедительно: получается некая экономия на "копейках", вынуждающая думать где ставить constexpr или оставить банальный const

Цитата
Очень приятная фишка variadic template - помогает КРАСИВО и БЫСТРО делать например делегаты и списки типов.

Познавательно! Без делегатов связать незнакомые и изолированные друг от друга модули никак не получается. Поэтому использую делегаты (своего рода система signal/slot в Qt).
Впрочем, я использую делегаты всего лишь 4 видов, шаблоны которых вмещаются в одном крохотном hpp файлике (если интересно, приведу содержимое).
Код
class DelegateVoidVoid
template<typename OutType> class DelegateTypeVoid
template<typename InType> class DelegateVoidType
template<typename OutType, typename InType> class Delegate
Все остальные вариации очень редки, и вместо них всегда можно использовать одну и указанных, размещая все параметры внутри структуры или передавать ссылку на класс.

Однако, сейчас существует очень много стороннего и полезного кода, который как минимум без C++11 уже не собирается.
Поэтому, хочешь или не хочешь, но придется переходить на более свежий компилятор.

Цитата
Я уж молчу про битовые литералы sm.gif
Спорно, весьма спорно. Ибо любые битовые литералы - "магические" числа, требующие хотя бы каких-то комментариев или ссылок на док-ты ((
Всегда успешно избегаю подобного жуткого нечитаемого колхоза "наследия" от PIC-контроллеров wink.gif

Цитата
P.S. Забыл сказать - динамическое выделение памяти у нас на работе запрещено внутренним регламентом.
Ну, это само собой! Впрочем, к данной теме это не имеет отношения ))


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 20 2018, 14:24
Сообщение #7


Гуру
******

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



QUOTE (Forger @ Mar 20 2018, 14:51) *
А нафига тут параллельная программная (соотв. медленная) шина, если вполне достаточно аппаратного SPI или чего-то подобного?
А какая вам лично разница? Ну вот понадобилась.
QUOTE (Forger @ Mar 20 2018, 14:51) *
Самое первое, что приходит в голову - выгнать такого схемотехника. Я серьезно!
Или просто не давать советы "космического масштаба и космической же глупости"


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



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

 


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


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