|
Шаблоны классов работы с пинами и портами (по маске и набору пинов) SILABS EFM32, может кому пригодится |
|
|
|
Mar 19 2018, 15:01
|
Гуру
     
Группа: Админы
Сообщений: 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
Причина редактирования: форматирование
--------------------
Вам помочь или не мешать?
|
|
|
|
|
 |
Ответов
|
Mar 20 2018, 11:20
|

Профессионал
    
Группа: Свой
Сообщений: 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. Но так вы пишете для себя.... 2 Forger если дополнить описание в шапке, то будет всё очевидно, понятно, тривиально и читаемо. В реализацию вообще можно не заглядывать, разве что для образовательных целей. c11 щя все поддерживают. IAR, gcc. Про кеил не знаю, может там его нет. вроде как 7 лет прошло.
|
|
|
|
|
Mar 20 2018, 11:36
|

Профессионал
    
Группа: Свой
Сообщений: 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. Ни куда не надо лезть, из шапки всё понятно. Если писать для людей (да и для себя. т.к. сможете забыть), то уж лучше уже в шапке чиркнуть возвращаемое значение. Хотел сразу про это сказать, но у вас код "для себя". ))
|
|
|
|
|
Mar 20 2018, 12:28
|
Гуру
     
Группа: Админы
Сообщений: 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)  А вот этот момент просвятите, пожалуйста, по-подробнее, разумеется, в применении к нашей области (МК)  Если возможно, то конкретные ситуации, где это действительно оказалось полезным. Пожалуйста. Мне например очень помогает нормальная поддержка 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 - помогает КРАСИВО и БЫСТРО делать например делегаты и списки типов. Я уж молчу про битовые литералы  P.S. Забыл сказать - динамическое выделение памяти у нас на работе запрещено внутренним регламентом.
--------------------
Вам помочь или не мешать?
|
|
|
|
|
Mar 20 2018, 12:51
|

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

|
Цитата(Nixon @ Mar 20 2018, 15:28)  "Широкая" параллельная шина для связи например с FPGA А нафига тут параллельная программная (соотв. медленная) шина, если вполне достаточно аппаратного SPI или чего-то подобного? Или схемотехник решил поиздеваться над программистами или разработчик под FPGA еще не научился применять готовые модули популярных послед. шин? Цитата Пример - есть параллельная 4-битная шина висящая на пинах 1(bit0), 11(bit1), 12(bit2) и 5(bit3) (ну получилось так при разводке). Самое первое, что приходит в голову - выгнать такого схемотехника. Я серьезно! За подобные костыли программисты устраивают "темную" такому схемотехнику )) А пока временно сделать программную заглушку, написанную чуть ли не АСМе. Конечно, если, требуется суперскорость и речь идет, например, про программный QuadSPI (  ) Цитата Необходимо записать на шину определенное число. Сколько операций займут у вас битовые манипуляции? Если нужна суперскорость, то нужно переделывать схему и плату, а не заниматься дрочевом с битовыми манипуляциями Если скорость не критична, то и "проблема" соотв. полностью надуманная. Цитата Мне например очень помогает нормальная поддержка 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 уже не собирается. Поэтому, хочешь или не хочешь, но придется переходить на более свежий компилятор. Цитата Я уж молчу про битовые литералы  Спорно, весьма спорно. Ибо любые битовые литералы - "магические" числа, требующие хотя бы каких-то комментариев или ссылок на док-ты (( Всегда успешно избегаю подобного жуткого нечитаемого колхоза "наследия" от PIC-контроллеров  Цитата P.S. Забыл сказать - динамическое выделение памяти у нас на работе запрещено внутренним регламентом. Ну, это само собой! Впрочем, к данной теме это не имеет отношения ))
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Mar 20 2018, 14:25
|

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

|
Цитата(Forger @ Mar 20 2018, 17:51)  Самое первое, что приходит в голову - выгнать такого схемотехника. Я серьезно! Если у вас ПП формата А4, 8 слоёв, корпус 144 ногий, кортекс-М4, и из обвеса питание + светодиод - то конечно да, нужно трассировку сделать "удобную" для прогера. А если у вас ПП с почтовую марку, 2 слоя (а иной раз 1), и деталюшки друг на друге, да ещё для экономии класс ПП 3..... тут не до удобств программисту. Трассировку делают, чтоб хоть как то влезло и заработало. А бывают случаи когда все порты заняты.... остались свободные 1(bit0), 11(bit1), 12(bit2) и 5(bit3) - туда нужно шину подтянуть. Про ногодрыг - сплошь и рядом. Даже аппаратный SPI не всегда с аппаратным CS работает, приходится ногой дрыгать. Управление RS-485 на STM32F* программное (кстати, на STM32L есть аппаратное управление уартом). 1-wire... вроде да, медленная шина, неча тут тики на ногодрыге считать, но когда процессор работает на 1МГц, то тут приходится "на спичках экономить". Опять же.... паралельная шина для управлени ЖК экранос с знакосентезатором, даже если вы 8 бит повесите полностью на один порт, то R/W, RS, E все равно ногодрыгом. Цитата Если нужна суперскорость, то нужно переделывать схему и плату, а не заниматься дрочевом с битовыми манипуляциями Приходит заказчик, и говорит "Из этого куска шкуры любой может сделать шапку. А можно из этого сделать СЕМЬ шапок?". Это я к тому, что на шустром дорогом контроллере тебе школота всё что угодно слепит на занятиях радиокружка (на ПП А4 со 144 ногами). А чтоб быть конкурентным, сделай на ПП с почтовую марку на процессоре в 20 ног. дрочевом с битовыми манипуляциями - это чей-то хлеб ))
|
|
|
|
Сообщений в этой теме
Nixon Шаблоны классов работы с пинами и портами (по маске и набору пинов) SILABS EFM32 Mar 19 2018, 15:01 x893 Порадовала особенно эта строка
enum { MODE0 = X*0... Mar 19 2018, 19:55 juvf а этот код рабочий? или я не понимаю этот с++14 но... Mar 20 2018, 05:42 Nixon Цитата(juvf @ Mar 20 2018, 07:42) а этот ... Mar 20 2018, 07:25 RadiatoR А почему нет?
Если обертка для bb рабочая и эффект... Mar 20 2018, 08:30 Nixon По поводу эффективности. IAR 8.22, optimization - ... Mar 20 2018, 10:23 juvf Цитата(Nixon @ Mar 20 2018, 15:23) PortPi... Mar 20 2018, 10:55  Nixon Цитата(juvf @ Mar 20 2018, 12:55) не торт... Mar 20 2018, 11:17   Forger Цитата(Nixon @ Mar 20 2018, 14:17) наприм... Mar 20 2018, 11:41 Forger Цитата(Nixon @ Mar 20 2018, 13:23) По пов... Mar 20 2018, 11:04 Kabdim Исходники всё же лучше выкладывать на гитхаб(или а... Mar 20 2018, 10:51
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|