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

 
 
> Шаблоны классов работы с пинами и портами (по маске и набору пинов) 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



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

 


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


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