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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Шаблоны классов работы с пинами и портами (по маске и набору пинов) SILABS EFM32, может кому пригодится
Nixon
сообщение Mar 20 2018, 12:28
Сообщение #16


Гуру
******

Группа: Админы
Сообщений: 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
Сообщение #17


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

Группа: Свой
Сообщений: 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
Сообщение #18


Гуру
******

Группа: Модераторы
Сообщений: 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
juvf
сообщение Mar 20 2018, 14:25
Сообщение #19


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

Группа: Свой
Сообщений: 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 ног.

дрочевом с битовыми манипуляциями - это чей-то хлеб ))
Go to the top of the page
 
+Quote Post
Forger
сообщение Mar 20 2018, 14:34
Сообщение #20


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

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



Цитата(juvf @ Mar 20 2018, 17:25) *
дрочевом с битовыми манипуляциями - это чей-то хлеб ))

Ну, да, компилятор C++11/14 и его новые фичи тут как раз кстати, без них ведь никак sm.gif
А как появится в доступе более свежий компилятор, и он тоже станет "необходим" для ногодрыга.


Конечно, согласен, много изделий, где просто никак не обойтись без ногодрыга. Более того скажу, что это - вполне типичная ситуация.
Но она реализуется в виде простейшей программной прослойки (обертки/класса и т.п.), которая закрывает (изолирует) вынужденную кривизну аппаратного решения от другого нормального кода.
А как и на чем она реализована воообще не принципиально. Такой код один раз отлаживают и успешно забывают.

Цитата(Сергей Борщ @ Mar 20 2018, 17:24) *
Или просто не давать советы "космического масштаба и космической же глупости"

Nixon выше привел лишь гипотетические (мифические) примеры.
Или вы увидели в этих "примерах" что-то свое очень знакомое? wink.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post

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

 


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


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