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

 
 
26 страниц V  « < 10 11 12 13 14 > »   
Reply to this topicStart new topic
> Библиотеки для STM32
Forger
сообщение Apr 18 2017, 07:18
Сообщение #166


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

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



Цитата(juvf @ Apr 18 2017, 10:05) *
я б так не сказал.... в современном verilog он есть.

А при чем тут verilog????

Цитата
а может действительно, сгенерировать хидер и там 256 (или 2^16) дефайнов определить. сп за идею

Если в коде есть такое огромное число магических чисел, то могу только посочувствовать ....

Цитата
да, но только это обращение "долгое". гораздо быстрее с константами работать, чем из юниона вытаскивать битики.

У меня в подъезде на всех этажах уже более двух лет стоят светодиодные лампочки, включаются от датчиков приближения и автоматически гаснут.
Так находятся чудаки, которые выключают эти лапочки (выключатель на первом этаже).
Ради интереса я посчитал в сколько обходятся электричество на все эти лампочки - менее 50 коп. на квартиру в мес! .... так и разориться недолго! wacko.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Reflector
сообщение Apr 18 2017, 08:39
Сообщение #167


Участник
*

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



Цитата(juvf @ Apr 18 2017, 10:05) *
Вкатило. То что нужно. СПАСБО!!!!

Там еще можно разделитель вставлять, например, 0b1000'0010, 0x1234'4567.

Сообщение отредактировал Reflector - Apr 18 2017, 08:41
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 18 2017, 09:29
Сообщение #168


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

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



2ViKo для си подойдёт. спасибо

Цитата(Reflector @ Apr 18 2017, 13:39) *
Там еще можно разделитель вставлять, например, 0b1000'0010, 0x1234'4567.

вообще зачет!!! как в верилоге!

Цитата(Forger @ Apr 18 2017, 12:18) *
У меня в подъезде на всех этажах уже более двух лет стоят светодиодные лампочки, включаются от датчиков приближения и автоматически гаснут.
Так находятся чудаки, которые выключают эти лапочки (выключатель на первом этаже).
Ради интереса я посчитал в сколько обходятся электричество на все эти лампочки - менее 50 коп. на квартиру в мес! .... так и разориться недолго! wacko.gif
пфффф.... так заказчик хочет конфетку получить в процессоре за 36.55 рублей (пруфлинк). Лишний рубль заложить в проц - проиграть конкурентам. Приходиться каждый такт процессора экономить и каждый байт флеша.

Цитата
А при чем тут verilog????
Анахронизм - в переносном смысле — что-либо несовременное, пережиток старины. В старом си не помню двоичного представления. в современных языках HD, такие как верилог такое есть. даже в с++ есть (как оказалось).

Иногда приходиться работать с двоичным представлением. удобнее видеть 0b1100'1000, чем MY_DEFINE.
Go to the top of the page
 
+Quote Post
Reflector
сообщение Apr 18 2017, 09:59
Сообщение #169


Участник
*

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



Цитата(juvf @ Apr 18 2017, 12:29) *
Анахронизм - в переносном смысле — что-либо несовременное, пережиток старины. В старом си не помню двоичного представления. в современных языках HD, такие как верилог такое есть. даже в с++ есть (как оказалось).

Бинарные литералы появились в С++14, Java 7 и ,совсем недавно, в C# 7, так что можно сказать их использование наоборот является современной тенденцией sm.gif
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 18 2017, 11:01
Сообщение #170


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

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



Цитата(Reflector @ Apr 18 2017, 12:59) *
Бинарные литералы появились в С++14, Java 7 и ,совсем недавно, в C# 7, так что можно сказать их использование наоборот является современной тенденцией sm.gif


Пророчество сбывается, скоро исходники будут выглядеть вот так. И лишь "избранные" смогут их читать и отлаживать lol.gif
Прикрепленное изображение


Цитата(juvf @ Apr 18 2017, 12:29) *
пфффф.... так заказчик хочет конфетку получить в процессоре за 36.55 рублей

Речь не про мк, а про код, который в нем крутится.
Я сильно сомневаюсь, что вы будете брать тонкий проц и пытаться в него втоптать толстую прогу.
Обычно, делают наоборот - сначала решают задачу на любом проце, который более-менее подходит под задачу с запасом!, а уже потом оптимизирует, и то, если в этом есть нужда.
С устойчивым соблазном оптимизации (вылизывания) кода ДО его отладки нужно бороться еще с пеленок будущего программера sm.gif

Экономить чужие деньги - самый страшный грех любого разработчика, т.к. подобный "альтруизм" ВСЕГДА оборачивается массой геморроя со стороны заказчика, который настаивает на такой "экономии на спичках".
Вообще, советую обходить стороной такого заказчика, т.к. в 99,9% случаев выяснится он не знает чего хочет, что в итоге печально кончится для разработчика - мозг бедолаги полностью потеряет свою функциональность cranky.gif

Опытный разработчик в первую очередь экономит СВОИ деньги и СВОЕ время, что косвенно приводит к экономической выгоде заказчика:
чистый код не тот, который чистят, а тот, который изначально не был испачкан ... битовыми литералами и т.п. магическими числами sm.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 18 2017, 12:03
Сообщение #171


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

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



Цитата(Forger @ Apr 18 2017, 16:01) *
Я сильно сомневаюсь, что вы будете брать тонкий проц и пытаться в него втоптать толстую прогу.
так и есть....
Цитата
сначала решают задачу на любом проце, который более-менее подходит под задачу с запасом!, а уже потом оптимизирует, и то, если в этом есть нужда.
так и есть.... сначала сделано на жирном ките... потом оптимизация/заталкиванеи в тонкий проц. И второе, где такую оптимизачию пришлось делать, это когда не в тонкий проц заказчик попросил добавить функционал... но там уже под завязку... и надо чуть дожать... а переход на более жирный проц - не есть хорошо, ибо это плодить номенклатуру.

Цитата
Экономить чужие деньги - самый страшный грех любого разработчика
я их не экономлю. Мне дают ТЗ - я выполняю. Мне дают новое ТЗ - выполняю.... Имею хлеб с маслом. А с вашей философией....
Код
чистый код не тот, который чистят, а тот, который изначально не был испачкан ... битовыми литералами и т.п. магическими числами
Это вы пачкаете форум своей философией. Вам же говорят - они появляются/есть в современных языках. Значит они востребованы. Так-то можно сказать, что 0х81 (шестнадцатеричные литералы) - магические цифры, которые пачкают код. Чем "х" лучше "b"? Вам не удобно битовые литералы - не пользуйте. Какие проблемы?



Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 18 2017, 12:22
Сообщение #172


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

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



Цитата
так и есть.... сначала сделано на жирном ките... потом оптимизация/заталкиванеи в тонкий проц.
А кто принимал решение ставить такой "тонкий проц"?

Цитата
не есть хорошо, ибо это плодить номенклатуру.

А вы считали, что выгоднее - чуток раздуть номеклатуру или мудохаться с отладкой и утаптыванием кода в тонкий проц в ущерб читаемости и переносимости этого кода?
Всему есть своя цена, главное - как можно раньше выяснить ее.

Цитата
я их не экономлю. Мне дают ТЗ - я выполняю. Мне дают новое ТЗ - выполняю....

Тогда все выше относится не к вам, а к тому, кто эти ТЗ составляет для вас.
Впрочем, если вас устраивает такое положение - втаптывать толстый код в тонкий проц, то это уже другое дело - © "Ежики кололись, но все равно ели кактус"

Цитата
Вам же говорят - они появляются/есть в современных языках. Значит они востребованы.
... среди индусов, которые пишут куб для st biggrin.gif

Цитата
А с вашей философией.... Это вы пачкаете форум своей философией.

Цитата
Вам не удобно битовые литералы - не пользуйте. Какие проблемы?

Коли вам не по душе моя "философия", игнорируйте, какие проблемы? wink.gif

Цитата
Так-то можно сказать, что 0х81 (шестнадцатеричные литералы) - магические цифры, которые пачкают код. Чем "х" лучше "b"?

Вы правы! Это магические числа.
А раз нет разницы, ток какой смысл использовать разные методы написания этих чисел?



--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Reflector
сообщение Apr 18 2017, 13:47
Сообщение #173


Участник
*

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



Цитата(Forger @ Apr 18 2017, 14:01) *
Пророчество сбывается, скоро исходники будут выглядеть вот так. И лишь "избранные" смогут их читать и отлаживать lol.gif

Для примера, у меня вот такая инициализация портов для 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);

Лучше ли последняя форма первых двух? Не уверен sm.gif
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 18 2017, 14:08
Сообщение #174


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

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

Хрен редьки не слаще - как было нифига не понятно, что значат эти магические числа, так оно и осталось. sm.gif
Битовые литералы тут как собаке - пятая нога )))


Цитата
Или расписать более подробно, как обычно и делают:
Код
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();
}


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 18 2017, 15:38
Сообщение #175


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

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



Цитата(Forger @ Apr 18 2017, 17:22) *
А вы считали, что выгоднее - чуток раздуть номеклатуру или мудохаться с отладкой и утаптыванием кода в тонкий проц в ущерб читаемости и переносимости этого кода?
Всему есть своя цена, главное - как можно раньше выяснить ее.
Вот меня всегда поражают подобные персонажи. А вы мой проект считали? Я считал. Дешевле написать тонкий код и засунуть его в дешевый процессор, чем писать жир и требовать проц жирнее... Вы от куда знаете всю ситуацию? Я не мудохаюсь с кодом.... и ни чего ни куда не втаптываю. Ни какого ущерба читаемости нет. Битовые литералы - испокон веков используются на МК. Их пофиксили при переходе с асма на си. Не потому что 0х82 удобнее, а потому что си не поддерживал двоичную запись. Сейчас возвращяют литералы в языки высокого уровня.
Цитата
"Ежики кололись, но все равно ели кактус"
я не колюсь. это вы походу чем-то колитесь wink.gif меня не напрягают литералы. меня отсутствие литерала b напрягало.

А почему такая агрессия? Тролль что-ли? Ну не нравятся литералы - ну не используйте.


Цитата
накидал свой класс Pin.hpp (для каждого семейства процов он разный)
Ха.... дружище... всё с вами понятно.... типичный оверинженеринг.... и вы считаете, что такой код прозрачен, что его стороннему программисту легко поддерживать и разобраться? ))))))))))))

я проще делаю...
определение и объявление примерно так
#define csOn() (GPIOA->BSRR = GPIO_Pin_4_BR)
использование
csOn();

ps да, увидел у вас обращение к port->BSRR, но не увидел инициализацию указателя *port.

pps
Цитата
Раком оверинжиниринга отрасль охвачена, пожалуй, полнее, чем рынок — быдлодевайсами, а телевизор — зомбопрограммами. Она охвачена им практически вся. Результаты, собственно, печальны и наблюдаемы невооружённым глазом. Умирающий от ожирения код пишется визуально генерируется умирающими от ожирения средствами разработки, а количество багов в результате просто астрономическое (преподносится этот бред как «средства, помогающие минимизировать людские ошибки» — быдломенеджеры по внедрению верят буклетам больше, чем визуально наблюдаемой картине). Скорость достижения результата тоже прямо противоположна заявам (на ассемблере и то было бы быстрее написать). Вопрос «нахуя?» "зачем?" вызывает в ответ тонны шизофазии про «прогрессивные методы и смелый взгляд в будущее». Запасаемся попкорном и ждём прорыва этого гнойника.
(С)
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 18 2017, 15:40
Сообщение #176


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

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



Цитата(juvf @ Apr 18 2017, 18:15) *
Вот меня всегда поражают подобные персонажи. А вы мой проект считали? Я считал. Дешевле написать тонкий код и засунуть его в дешевый процессор, чем писать жир и требовать проц жирнее...
Вы от куда знаете всю ситуацию?

Не знаю, поэтому и задал вопросы (см. внимательнее ))
"А почему такая агрессия"?

Цитата
Я не мудохаюсь с кодом.... и ни чего ни куда не втаптываю. Ни какого ущерба читаемости нет.
Битовые литералы - испокон веков используются на МК.

Поправляю - использовались, в настоящее время в существующем недревнем коде их уже не встретишь,
но подобный подход можно встретить лишь у программеров, которые пересели с асм и PIC/AVR на более серьезные камни,
но остались по-прежнему в тех далеких временах ...

Цитата
Их пофиксили при переходе с асма на си. Не потому что 0х82 удобнее, а потому что си не поддерживал двоичную запись.

В те времена, этого действительно не хватало, т.к. народ переползал с asm на си, длительное время сохраняя идеологию мышления asm.
Да и к тому же о "чистоте кода", "принципах именования" и т.п. в помине не было - каждый писал как привык. Даже goto использовали! cranky.gif
Но те времена давно ушли, кто-то остался в тех временах, а кто-то движется вперед ... sm.gif

Цитата
Сейчас возвращяют литералы в языки высокого уровня.
Причина тут очевидная - нытье "ассемблерщиков" утомило разработчиков стандарта, вот они и сжалились santa2.gif

Цитата
меня не напрягают литералы. меня отсутствие литерала b напрягало.

D свое время я тоже пересел с ассемблера, где без битовых литералов ну просто делать нечего.
И уход на С, где битовых литералов не было, я воспринимал весьма болезненно, поэтому понимаю вас, одно время спасало, что в С-компиляторе для PIC они все же были,
но, к счастью, в свое время я переболел это "недуг" ("закодировался" )))), и теперь мне уже до лампочки наличие или отсутствие этих битовых литералов.
Ни капельки не тянет, даже когда теперь они есть sm.gif

Цитата
А почему такая агрессия?

Извиняюсь, если показался агрессивным ))


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 18 2017, 15:50
Сообщение #177


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

Группа: Свой
Сообщений: 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 порты.... не только битовые поля. В ЦОС иногда это очень даже полезно.
Go to the top of the page
 
+Quote Post
Эдди
сообщение Apr 18 2017, 15:57
Сообщение #178


Знающий
****

Группа: Участник
Сообщений: 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 все ОК.
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 18 2017, 16:05
Сообщение #179


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

Группа: Свой
Сообщений: 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 невозможно писать ни на С, ни на цепепе!

Я вам искренне сочувствую, чесс слово, аж самому взгруснулось crying.gif


Цитата
Правда, в случае 32-битных регистров удобство уже сомнительно, но с 8/16 все ОК.

Вот и я о том же - в 8-битниках периферия элементарнее некуда, там в целом без разница как писать - с битовыми литералами или без, все одно комментировать придется каждое такое обращение.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Reflector
сообщение Apr 18 2017, 16:10
Сообщение #180


Участник
*

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



Цитата(Forger @ Apr 18 2017, 17:08) *
Хрен редьки не слаще - как было нифига не понятно, что значат эти магические числа, так оно и осталось. sm.gif
Битовые литералы тут как собаке - пятая нога )))

Мне такой вариант вообще не по душе, поэтому накидал свой класс Pin.hpp (для каждого семейства процов он разный):

А я думаешь чьим классом пользуюсь? sm.gif Тоже взял и написал, один для пина, как у тебя, второй для порта целиком. И что там может быть непонятного, аж целых два числа, маска для пинов и в конце необязательный параметр для 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;

И зачем мне какие-то дефайны в другом файле, где все свалено в кучу? Какие используются пины видно прямо в месте создания экземпляра класса, я это место легко найду.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th August 2025 - 22:43
Рейтинг@Mail.ru


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