|
|
  |
Библиотеки для STM32 |
|
|
|
Apr 18 2017, 07:18
|

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

|
Цитата(juvf @ Apr 18 2017, 10:05)  я б так не сказал.... в современном verilog он есть. А при чем тут verilog???? Цитата а может действительно, сгенерировать хидер и там 256 (или 2^16) дефайнов определить. сп за идею Если в коде есть такое огромное число магических чисел, то могу только посочувствовать .... Цитата да, но только это обращение "долгое". гораздо быстрее с константами работать, чем из юниона вытаскивать битики. У меня в подъезде на всех этажах уже более двух лет стоят светодиодные лампочки, включаются от датчиков приближения и автоматически гаснут. Так находятся чудаки, которые выключают эти лапочки (выключатель на первом этаже). Ради интереса я посчитал в сколько обходятся электричество на все эти лампочки - менее 50 коп. на квартиру в мес! .... так и разориться недолго!
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Apr 18 2017, 08:39
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 15-07-06
Пользователь №: 18 836

|
Цитата(juvf @ Apr 18 2017, 10:05)  Вкатило. То что нужно. СПАСБО!!!! Там еще можно разделитель вставлять, например, 0b1000'0010, 0x1234'4567.
Сообщение отредактировал Reflector - Apr 18 2017, 08:41
|
|
|
|
|
Apr 18 2017, 09:29
|

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

|
2 ViKo для си подойдёт. спасибо Цитата(Reflector @ Apr 18 2017, 13:39)  Там еще можно разделитель вставлять, например, 0b1000'0010, 0x1234'4567. вообще зачет!!! как в верилоге! Цитата(Forger @ Apr 18 2017, 12:18)  У меня в подъезде на всех этажах уже более двух лет стоят светодиодные лампочки, включаются от датчиков приближения и автоматически гаснут. Так находятся чудаки, которые выключают эти лапочки (выключатель на первом этаже). Ради интереса я посчитал в сколько обходятся электричество на все эти лампочки - менее 50 коп. на квартиру в мес! .... так и разориться недолго!  пфффф.... так заказчик хочет конфетку получить в процессоре за 36.55 рублей ( пруфлинк). Лишний рубль заложить в проц - проиграть конкурентам. Приходиться каждый такт процессора экономить и каждый байт флеша. Цитата А при чем тут verilog???? Анахронизм - в переносном смысле — что-либо несовременное, пережиток старины. В старом си не помню двоичного представления. в современных языках HD, такие как верилог такое есть. даже в с++ есть (как оказалось). Иногда приходиться работать с двоичным представлением. удобнее видеть 0b1100'1000, чем MY_DEFINE.
|
|
|
|
|
Apr 18 2017, 09:59
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 15-07-06
Пользователь №: 18 836

|
Цитата(juvf @ Apr 18 2017, 12:29)  Анахронизм - в переносном смысле — что-либо несовременное, пережиток старины. В старом си не помню двоичного представления. в современных языках HD, такие как верилог такое есть. даже в с++ есть (как оказалось). Бинарные литералы появились в С++14, Java 7 и ,совсем недавно, в C# 7, так что можно сказать их использование наоборот является современной тенденцией
|
|
|
|
|
Apr 18 2017, 11:01
|

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

|
Цитата(Reflector @ Apr 18 2017, 12:59)  Бинарные литералы появились в С++14, Java 7 и ,совсем недавно, в C# 7, так что можно сказать их использование наоборот является современной тенденцией  Пророчество сбывается, скоро исходники будут выглядеть вот так. И лишь "избранные" смогут их читать и отлаживать
Цитата(juvf @ Apr 18 2017, 12:29)  пфффф.... так заказчик хочет конфетку получить в процессоре за 36.55 рублей Речь не про мк, а про код, который в нем крутится. Я сильно сомневаюсь, что вы будете брать тонкий проц и пытаться в него втоптать толстую прогу. Обычно, делают наоборот - сначала решают задачу на любом проце, который более-менее подходит под задачу с запасом!, а уже потом оптимизирует, и то, если в этом есть нужда. С устойчивым соблазном оптимизации (вылизывания) кода ДО его отладки нужно бороться еще с пеленок будущего программера  Экономить чужие деньги - самый страшный грех любого разработчика, т.к. подобный "альтруизм" ВСЕГДА оборачивается массой геморроя со стороны заказчика, который настаивает на такой "экономии на спичках". Вообще, советую обходить стороной такого заказчика, т.к. в 99,9% случаев выяснится он не знает чего хочет, что в итоге печально кончится для разработчика - мозг бедолаги полностью потеряет свою функциональность Опытный разработчик в первую очередь экономит СВОИ деньги и СВОЕ время, что косвенно приводит к экономической выгоде заказчика: чистый код не тот, который чистят, а тот, который изначально не был испачкан ... битовыми литералами и т.п. магическими числами
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Apr 18 2017, 12:03
|

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

|
Цитата(Forger @ Apr 18 2017, 16:01)  Я сильно сомневаюсь, что вы будете брать тонкий проц и пытаться в него втоптать толстую прогу. так и есть.... Цитата сначала решают задачу на любом проце, который более-менее подходит под задачу с запасом!, а уже потом оптимизирует, и то, если в этом есть нужда. так и есть.... сначала сделано на жирном ките... потом оптимизация/заталкиванеи в тонкий проц. И второе, где такую оптимизачию пришлось делать, это когда не в тонкий проц заказчик попросил добавить функционал... но там уже под завязку... и надо чуть дожать... а переход на более жирный проц - не есть хорошо, ибо это плодить номенклатуру. Цитата Экономить чужие деньги - самый страшный грех любого разработчика я их не экономлю. Мне дают ТЗ - я выполняю. Мне дают новое ТЗ - выполняю.... Имею хлеб с маслом. А с вашей философией.... Код чистый код не тот, который чистят, а тот, который изначально не был испачкан ... битовыми литералами и т.п. магическими числами Это вы пачкаете форум своей философией. Вам же говорят - они появляются/есть в современных языках. Значит они востребованы. Так-то можно сказать, что 0х81 (шестнадцатеричные литералы) - магические цифры, которые пачкают код. Чем "х" лучше "b"? Вам не удобно битовые литералы - не пользуйте. Какие проблемы?
|
|
|
|
|
Apr 18 2017, 12:22
|

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

|
Цитата так и есть.... сначала сделано на жирном ките... потом оптимизация/заталкиванеи в тонкий проц. А кто принимал решение ставить такой "тонкий проц"? Цитата не есть хорошо, ибо это плодить номенклатуру. А вы считали, что выгоднее - чуток раздуть номеклатуру или мудохаться с отладкой и утаптыванием кода в тонкий проц в ущерб читаемости и переносимости этого кода? Всему есть своя цена, главное - как можно раньше выяснить ее. Цитата я их не экономлю. Мне дают ТЗ - я выполняю. Мне дают новое ТЗ - выполняю.... Тогда все выше относится не к вам, а к тому, кто эти ТЗ составляет для вас. Впрочем, если вас устраивает такое положение - втаптывать толстый код в тонкий проц, то это уже другое дело - © "Ежики кололись, но все равно ели кактус" Цитата Вам же говорят - они появляются/есть в современных языках. Значит они востребованы. ... среди индусов, которые пишут куб для st  Цитата А с вашей философией.... Это вы пачкаете форум своей философией. Цитата Вам не удобно битовые литералы - не пользуйте. Какие проблемы? Коли вам не по душе моя "философия", игнорируйте, какие проблемы?  Цитата Так-то можно сказать, что 0х81 (шестнадцатеричные литералы) - магические цифры, которые пачкают код. Чем "х" лучше "b"? Вы правы! Это магические числа. А раз нет разницы, ток какой смысл использовать разные методы написания этих чисел?
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Apr 18 2017, 13:47
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 15-07-06
Пользователь №: 18 836

|
Цитата(Forger @ Apr 18 2017, 14:01)  Пророчество сбывается, скоро исходники будут выглядеть вот так. И лишь "избранные" смогут их читать и отлаживать  Для примера, у меня вот такая инициализация портов для FSMC: Код GpioD<0xC8B3>(PinMode::AF_PushPull_VeryHighSpeed, 12); GpioE<0x0780>(PinMode::AF_PushPull_VeryHighSpeed, 12); Т.к. пины там жестко привязаны, то меня такая форма записи абсолютно не напрягает, но при желании можно маску пинов перевести в бинарный вид: Код GpioD<0b1100'1000'1011'0011>(PinMode::AF_PushPull_VeryHighSpeed, 12); Или расписать более подробно, как обычно и делают: Код const uint32_t FSMC_PD = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15; GpioD<FSMC_PD>(PinMode::AF_PushPull_VeryHighSpeed, 12); Лучше ли последняя форма первых двух? Не уверен
|
|
|
|
|
Apr 18 2017, 14:08
|

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

|
Цитата(Reflector @ Apr 18 2017, 16:47)  Для примера, у меня вот такая инициализация портов для FSMC: Код GpioD<0xC8B3>(PinMode::AF_PushPull_VeryHighSpeed, 12); GpioE<0x0780>(PinMode::AF_PushPull_VeryHighSpeed, 12); Т.к. пины там жестко привязаны, то меня такая форма записи абсолютно не напрягает, но при желании можно маску пинов перевести в бинарный вид: Код GpioD<0b1100'1000'1011'0011>(PinMode::AF_PushPull_VeryHighSpeed, 12); Хрен редьки не слаще - как было нифига не понятно, что значат эти магические числа, так оно и осталось.  Битовые литералы тут как собаке - пятая нога ))) Цитата Или расписать более подробно, как обычно и делают: Код const uint32_t FSMC_PD = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15; GpioD<FSMC_PD>(PinMode::AF_PushPull_VeryHighSpeed, 12); Мне такой вариант вообще не по душе, поэтому накидал свой класс Pin.hpp (для каждого семейства процов он разный): CODE ............. typedef enum { PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7, PA8, PA9, PA10, PA11, PA12, PA13, PA14, PA15, PB0, PB1, PB2, PB3, PB4, PB5, PB6, PB7, PB8, PB9, PB10, PB11, PB12, PB13, PB14, PB15, PC0, PC1, PC2, PC3, PC4, PC5, PC6, PC7, PC8, PC9, PC10, PC11, PC12, PC13, PC14, PC15, PD0, PD1, PD2, PD3, PD4, PD5, PD6, PD7, PD8, PD9, PD10, PD11, PD12, PD13, PD14, PD15, PE0, PE1, PE2, PE3, PE4, PE5, PE6, PE7, PE8, PE9, PE10, PE11, PE12, PE13, PE14, PE15, PF0, PF1, PF2, PF3, PF4, PF5, PF6, PF7, PF8, PF9, PF10, PF11, PF12, PF13, PF14, PF15, PH0, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10, PH11, PH12, PH13, PH14, PH15, } PIN;
.................
class PinBase { public: PinBase(PIN pin) { portIndex = pin / 16; pinIndex = pin % 16; pinMask = (((UNSIGNED32)1) << pinIndex); ..... }
..... inline void setToHigh(void) { port->BSRRL = pinMask; } inline void setToLow(void) { port->BSRRH = pinMask; } inline bool isHigh(void) { return (((port->IDR) & pinMask) != 0); } inline bool isLow(void) { return (((port->IDR) & pinMask) == 0); } inline void toggle(void) { port->ODR ^= pinMask; }
protected: volatile GPIO_TypeDef * port; volatile UNSIGNED8 portIndex; volatile UNSIGNED8 pinIndex; volatile UNSIGNED32 pinMask; };
...............
template <PIN pin> class Pin : public PinBase { public: Pin(void) : PinBase(pin) { } };
..........
template <PIN pin> class DigitalOutputPin : public PinBase { public: DigitalOutputPin(void) : PinBase(pin) { setAsDigitalOutput(); setAsPushPull(); setOutputSpeed40MHz(); } };
.......................
template <PIN pin> class LedOpenDrain : public PinBase { public: LedOpenDrain(void) : PinBase(pin) { setAsDigitalOutput(); setAsOpenDrain(); setOutputSpeed10MHz(); off(); }
void on(void) { setToLow(); } void off(void) { setToHigh(); } };
........
Все привязки пинов описаны в одном файле, так удобнее изменять привязку портов при смене камня и просто при переносе кусков кода из проекта в проект: CODE ...... // EXTERNAL ADC #define PIN_ADC_CONVST (PB14) #define PIN_ADC_SCLK (PB13) #define PIN_ADC_DATA (PC6)
// LEDS #define PIN_LED_GREEN (PB6) #define PIN_LED_RED (PB5)
......
Вот так применяю: *.hpp: Код class ExternalDAC { public: void initialize(void); void setVoltage(FLOAT32 voltage); FLOAT32 getVoltage(void) const { return (voltage); }
private: DigitalOutputPin<PIN_DAC_CS> pinCS; DigitalOutputPin<PIN_DAC_SCK> pinSCK; DigitalOutputPin<PIN_DAC_MOSI> pinMOSI; FLOAT32 voltage; }; *.cpp Код void ExternalDAC::initialize(void) { pinCS.setToHigh(); pinSCK.setToHigh(); pinMOSI.setToLow(); }
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Apr 18 2017, 15:38
|

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

|
Цитата(Forger @ Apr 18 2017, 17:22)  А вы считали, что выгоднее - чуток раздуть номеклатуру или мудохаться с отладкой и утаптыванием кода в тонкий проц в ущерб читаемости и переносимости этого кода? Всему есть своя цена, главное - как можно раньше выяснить ее. Вот меня всегда поражают подобные персонажи. А вы мой проект считали? Я считал. Дешевле написать тонкий код и засунуть его в дешевый процессор, чем писать жир и требовать проц жирнее... Вы от куда знаете всю ситуацию? Я не мудохаюсь с кодом.... и ни чего ни куда не втаптываю. Ни какого ущерба читаемости нет. Битовые литералы - испокон веков используются на МК. Их пофиксили при переходе с асма на си. Не потому что 0х82 удобнее, а потому что си не поддерживал двоичную запись. Сейчас возвращяют литералы в языки высокого уровня. Цитата "Ежики кололись, но все равно ели кактус" я не колюсь. это вы походу чем-то колитесь  меня не напрягают литералы. меня отсутствие литерала b напрягало. А почему такая агрессия? Тролль что-ли? Ну не нравятся литералы - ну не используйте. Цитата накидал свой класс Pin.hpp (для каждого семейства процов он разный) Ха.... дружище... всё с вами понятно.... типичный оверинженеринг.... и вы считаете, что такой код прозрачен, что его стороннему программисту легко поддерживать и разобраться? )))))))))))) я проще делаю... определение и объявление примерно так #define csOn() (GPIOA->BSRR = GPIO_Pin_4_BR) использование csOn(); ps да, увидел у вас обращение к port->BSRR, но не увидел инициализацию указателя *port. pps Цитата Раком оверинжиниринга отрасль охвачена, пожалуй, полнее, чем рынок — быдлодевайсами, а телевизор — зомбопрограммами. Она охвачена им практически вся. Результаты, собственно, печальны и наблюдаемы невооружённым глазом. Умирающий от ожирения код пишется визуально генерируется умирающими от ожирения средствами разработки, а количество багов в результате просто астрономическое (преподносится этот бред как «средства, помогающие минимизировать людские ошибки» — быдломенеджеры по внедрению верят буклетам больше, чем визуально наблюдаемой картине). Скорость достижения результата тоже прямо противоположна заявам (на ассемблере и то было бы быстрее написать). Вопрос «нахуя?» "зачем?" вызывает в ответ тонны шизофазии про «прогрессивные методы и смелый взгляд в будущее». Запасаемся попкорном и ждём прорыва этого гнойника. (С)
|
|
|
|
|
Apr 18 2017, 15:40
|

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

|
Цитата(juvf @ Apr 18 2017, 18:15)  Вот меня всегда поражают подобные персонажи. А вы мой проект считали? Я считал. Дешевле написать тонкий код и засунуть его в дешевый процессор, чем писать жир и требовать проц жирнее... Вы от куда знаете всю ситуацию? Не знаю, поэтому и задал вопросы (см. внимательнее )) "А почему такая агрессия"? Цитата Я не мудохаюсь с кодом.... и ни чего ни куда не втаптываю. Ни какого ущерба читаемости нет. Битовые литералы - испокон веков используются на МК. Поправляю - использовались, в настоящее время в существующем недревнем коде их уже не встретишь, но подобный подход можно встретить лишь у программеров, которые пересели с асм и PIC/AVR на более серьезные камни, но остались по-прежнему в тех далеких временах ... Цитата Их пофиксили при переходе с асма на си. Не потому что 0х82 удобнее, а потому что си не поддерживал двоичную запись. В те времена, этого действительно не хватало, т.к. народ переползал с asm на си, длительное время сохраняя идеологию мышления asm. Да и к тому же о "чистоте кода", "принципах именования" и т.п. в помине не было - каждый писал как привык. Даже goto использовали! Но те времена давно ушли, кто-то остался в тех временах, а кто-то движется вперед ...  Цитата Сейчас возвращяют литералы в языки высокого уровня. Причина тут очевидная - нытье "ассемблерщиков" утомило разработчиков стандарта, вот они и сжалились Цитата меня не напрягают литералы. меня отсутствие литерала b напрягало. D свое время я тоже пересел с ассемблера, где без битовых литералов ну просто делать нечего. И уход на С, где битовых литералов не было, я воспринимал весьма болезненно, поэтому понимаю вас, одно время спасало, что в С-компиляторе для PIC они все же были, но, к счастью, в свое время я переболел это "недуг" ("закодировался" )))), и теперь мне уже до лампочки наличие или отсутствие этих битовых литералов. Ни капельки не тянет, даже когда теперь они есть  Цитата А почему такая агрессия? Извиняюсь, если показался агрессивным ))
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Apr 18 2017, 15:50
|

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

|
ppps вопрос скорее риторический.... зачем использовать UNSIGNED32 или BYTE, WORD, U32 и т.п. поделки? есть же uint32_t, uint16_t и т.д. Это тоже относится к переносимости кода. pppps Цитата Код void ExternalDAC::initialize(void) если пишете на с++, так уж пишите на с++ Код void ExternalDAC::initialize() Цитата(Forger @ Apr 18 2017, 20:40)  в настоящее время в существующем недревнем коде их уже не встретишь, но подобный подход можно встретить лишь у программеров, которые пересели с асм и PIC/AVR на более серьезные камни, в современных HD языках это есть и было всегда. Есть места где удобно b. Это не только GPIO порты.... не только битовые поля. В ЦОС иногда это очень даже полезно.
|
|
|
|
|
Apr 18 2017, 15:57
|
Знающий
   
Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250

|
Цитата(Forger @ Apr 18 2017, 18:40)  Даже goto использовали! Что за нафиг? Без goto невозможно писать ни на С, ни на цепепе! Как вы из вложенных циклов будете выходить? Или деструкторы в случае ошибок вызывать? В подавляющем большинстве случаев если goto позволяет упростить читаемость кода, я использую goto. А некоторые еще и обработчики ошибок через longjump реализуют!!! Цитата(juvf @ Apr 18 2017, 18:50)  Есть места где удобно b. К сожалению, gcc их не умеет. А было бы удобно, конечно. Правда, в случае 32-битных регистров удобство уже сомнительно, но с 8/16 все ОК.
|
|
|
|
|
Apr 18 2017, 16:05
|

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

|
Цитата(juvf @ Apr 18 2017, 18:50)  если пишете на с++, так уж пишите на с++ В данном случае это непринципиально, хотя некоторые С++ компиляторы видят в этом разницу: http://stackoverflow.com/questions/693788/...292431#36292431Цитата в современных HD языках это есть и было всегда. Есть места где удобно b. Это не только GPIO порты.... не только битовые поля. Если без них никак не удается сделать читаемый и переносимый код, ради бога, используйте на здоровье ))) Цитата В ЦОС иногда это очень даже полезно. Дык, ЦОС обычно используют как суровую числодробилку со своими узкоспециализированными задачами. Это другой мир с иными правилами и порядками. Впрочем, к битовым литералам это не имеет отношения. Цитата(Эдди @ Apr 18 2017, 18:57)  Без goto невозможно писать ни на С, ни на цепепе! Я вам искренне сочувствую, чесс слово, аж самому взгруснулось  Цитата Правда, в случае 32-битных регистров удобство уже сомнительно, но с 8/16 все ОК. Вот и я о том же - в 8-битниках периферия элементарнее некуда, там в целом без разница как писать - с битовыми литералами или без, все одно комментировать придется каждое такое обращение.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Apr 18 2017, 16:10
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 15-07-06
Пользователь №: 18 836

|
Цитата(Forger @ Apr 18 2017, 17:08)  Хрен редьки не слаще - как было нифига не понятно, что значат эти магические числа, так оно и осталось.  Битовые литералы тут как собаке - пятая нога ))) Мне такой вариант вообще не по душе, поэтому накидал свой класс Pin.hpp (для каждого семейства процов он разный): А я думаешь чьим классом пользуюсь?  Тоже взял и написал, один для пина, как у тебя, второй для порта целиком. И что там может быть непонятного, аж целых два числа, маска для пинов и в конце необязательный параметр для AF. Ладно тут еще был 8 бит FSMC, а для 16 бит уже нужно 20 ног проинитить, предлагаешь это делать 20 раз для каждого отдельного пина? Касательно твоего класса... Я видел более старую реализацию, там в базовом классе хранился только порт и маска, теперь еще индексы порта и пина, это 10 байт на пин, которые округлятся до 12. Никаких переменных там не должно быть в принципе, порт и номер пина передаются в базовый класс как параметры шаблона, у меня это выглядит так: Код template<uint32_t gpio, uint32_t pin, uint32_t af_> struct PinT { static auto base() { return (GPIO_TypeDef*)gpio; }
PinT() {} PinT(PinMode mode) { init(mode); } ..... static void write(bool data) { base()->BSRR = (0x10000 << pin) | (data << pin); } };
template<uint32_t pin, uint32_t af_ = 0> using PinA = PinT<GPIOA_BASE, pin, af_>;
template<uint32_t pin, uint32_t af_ = 0> using PinB = PinT<GPIOB_BASE, pin, af_>; .... Код PinA<5> redLed; // хоть глобально, код еще не генерится .... redLed.init(PinMode::PushPull_HighSpeed); redLed.set(); Цитата Все привязки пинов описаны в одном файле, так удобнее изменять привязку портов при смене камня и просто при переносе кусков кода из проекта в проект: Хорошо, возьмем твой класс ExternalDAC, я бы мог просто сделать его шаблонным: Код ExternalDAC<PinA<5>, PinA<6>, PinA<7>> externalDAC; Но т.к. под SPI такой класс уже есть, то скорее всего я передам именно его, т.к. это избавляет от написания лишнего кода: Код using spi1 = Spi1<PinA<5>, PinA<6>, PinA<7>>; ExternalDAC<spi1> externalDAC; И зачем мне какие-то дефайны в другом файле, где все свалено в кучу? Какие используются пины видно прямо в месте создания экземпляра класса, я это место легко найду.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|