STM32 новичку в ARM что к чему
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
- Реклама
Сказочники
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
Сказочники. Си появился в 1972, Си++ в 1983. Последний так и не протоптал толком дорожку в эмбед. За сорок лет почти. Но такой хороший, что аж капец. Но не протоптал.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="a5021",url="/forum/viewtopic.php?p=3903922#p3903922"]Но не протоптал.[/uquote]IAR EWARM - C++17, ARM Compiler - C++17, GCC ARM - почти C++20. Совсем не протоптал.
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="Oxford",url="/forum/viewtopic.php?p=3903919#p3903919"]Методы показывай.[/uquote]
Один из основных методов в упрощенном виде, без реверсной оптимизации:
Его взывает тот же write:
Где ports_ это:
И т.д., там много всего. С виду код высокоуровневый, но он практически весь выполняется на этапе компиляции.
Один из основных методов в упрощенном виде, без реверсной оптимизации:
Код: Выделить всё
template<PinShift ShiftType, typename... Ps>
static uint32_t readWrite(uint32_t value, TypeList<Ps...> pins)
{
if constexpr (!empty(pins))
{
using Pin = decltype(head(pins));
static constexpr int shift = calcShift<ShiftType, Pin>();
static constexpr uint32_t mask = getMaskForShift<shift, ShiftType>(pins);
if constexpr (shift >= 0)
return (value & mask) << shift | readWrite<ShiftType>(value, getListExceptShift<shift, ShiftType>(pins));
else
return (value & mask) >> -shift | readWrite<ShiftType>(value, getListExceptShift<shift, ShiftType>(pins));
}
return 0;
}Код: Выделить всё
static void write(uint32_t value)
{
foreach(ports_, [=](auto port) { GpioT<port.value, getPinsMask<port.value>(pins_)>::write(readWrite<PinShift::Write>
(value, getIndexedPins<port.value>(pins_))); });
}Код: Выделить всё
static constexpr auto ports_ = transform(unique(pins_, [](auto p1, auto p2) { return IsPinDummy<decltype(p1)> || p1.gpio == p2.gpio; }),
[](auto pin) { return ValueBox<pin.gpio>{}; });- Реклама
Вот заняться то не чем людям. Подключил бы лучше FSMC и DMA чем говнолибы строчить тормозные на все случаи. Бредом занимаешься. Это же надо сидеть и программировать такую чушь.
Разные у нас с вами подходы к программированию.
Я такие говнолибы не пишу.
Разные у нас с вами подходы к программированию.
Последний раз редактировалось Oxford Пт окт 09, 2020 02:50:54, всего редактировалось 15 раз.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="VladislavS",url="/forum/viewtopic.php?p=3903926#p3903926"]IAR EWARM - C++17, ARM Compiler - C++17, GCC ARM - почти C++20. Совсем не протоптал.[/uquote]
Да-да. Жопу с пальцем.
Системные библиотеки AVR -- это чистый си. STM8 -- си. STM32 -- си. NRF5 -- си. MSP430 -- си. РТОСы всяки и иже -- си. Все, с чем я когда-либо имел дело было на си. Из плюсов вспоминается только ардуина. Но оно и понятно, почему.
Да-да. Жопу с пальцем.
Системные библиотеки AVR -- это чистый си. STM8 -- си. STM32 -- си. NRF5 -- си. MSP430 -- си. РТОСы всяки и иже -- си. Все, с чем я когда-либо имел дело было на си. Из плюсов вспоминается только ардуина. Но оно и понятно, почему.
a5021 Да хрень просто городит программно FSMC делает. Говнолибу никому не нужную типо как на AVR ногодрыгом
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Ишь, "эксперты", раскудахтались.
Кроме как какахами метаться сами то умеете чего?
писькамитактами мерятьсяVladislavS писал(а):Кроме как какахами метаться сами то умеете чего?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="Oxford",url="/forum/viewtopic.php?p=3903940#p3903940"]Да хрень просто городит программно FSMC делает.[/uquote]
Забиваю весь дисплей размером 320x240 текстом(итого 800 символов). Разогнанный F303 справляется за 23ms, это 43 fps, мало? Нужно обязательно вместо 48-ми пинового мк взять 100-ногий, чтобы там был FSMC? Кстати, не так давно в теме про осцилл я тестит скорость отрисовки как раз на разогнанном F3 и тоже получал 23ms при выполнении из флеша и лишь 13ms при выполнении из CCM...
Пять портов, у большинства пинов AF14, но местами AF9/10, не покажешь как профи в таком случае режим настраивают?
Забиваю весь дисплей размером 320x240 текстом(итого 800 символов). Разогнанный F303 справляется за 23ms, это 43 fps, мало? Нужно обязательно вместо 48-ми пинового мк взять 100-ногий, чтобы там был FSMC? Кстати, не так давно в теме про осцилл я тестит скорость отрисовки как раз на разогнанном F3 и тоже получал 23ms при выполнении из флеша и лишь 13ms при выполнении из CCM...
Можно и мк с LTDC взять, я недавно H750 к монитору подключал. Вот список пинов для RGB565:Говнолибу никому не нужную типо как на AVR ногодрыгом
Код: Выделить всё
PA3, PA4, PA6, PA10, PA11, PB0, PB1, PB8, PB9, PB10, PB11, PC0, PC6, PC7, PD3, PD10, PE11, PE15- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Вчера это было из мелкокалиберного. Вот вам пятничная тяжёлая артиллерия. Контроллер 100-ногий STM32F427VIT6. Ethernet, USB, RS-485 и объекты управления. Показываю код конфигурации ног на пяти портах (GPIOA-GPIOE). Вручную не записано ни одной константы ни в один регистр. Всё автоматически просчитает компилятор.
Переобзываем ноги согласно схеме. Для USB, ETH и т.д в этом нет необходимости, так как контроллер сам ими рулит и нигде в коде они не понадобятся.
А теперь пользуясь возможностями автодополнения в IDE задаём конфигурацию всех ног. При этом совершенно не думая о регистрах, что, как и в какой последовательности в них писать. Не царское это дело. Только описываем режимы.
Нажимаем кнопочку Build и через несколько секунд получаем результат. Рядовые Си-программисты не то что не получают такой эффективности, но даже не стремятся к ней. Напоминаю, 100-ногий чип, 5 портов GPIO.
Ох, так и вижу как на той стороне слюна брызжет. 
Добавлено after 17 minutes 9 seconds:
[uquote="Reflector",url="/forum/viewtopic.php?p=3904002#p3904002"]Можно и мк с LTDC взять, я недавно H750 к монитору подключал. Вот список пинов для RGB565:
Пять портов, у большинства пинов AF14, но местами AF9/10, не покажешь как профи в таком случае режим настраивают?[/uquote]Не знаю как C++ хейтеры, а я бы уже законфигурил. Осталось отсортировать перечисленные пины по номеру AF.
Переобзываем ноги согласно схеме. Для USB, ETH и т.д в этом нет необходимости, так как контроллер сам ими рулит и нигде в коде они не понадобятся.
Спойлер
Код: Выделить всё
// Концевики оптопереключателей
using S1_2 = PD_5;
using S1_3 = PD_4;
using S2_2 = PB_8;
using S2_3 = PB_7;
using S3_2 = PB_4;
using S3_3 = PD_6;
using S4_2 = PD_1;
using S4_3 = PD_0;
using S5_2 = PE_6;
using S5_3 = PE_0;
using S6_2 = PE_2;
using S6_3 = PE_1;
// Ключи управления оптопереключателями
using C1_1 = PD_2;
using C1_2 = PD_3;
using C2_1 = PB_6;
using C2_2 = PB_9;
using C3_1 = PB_3;
using C3_2 = PB_5;
using C4_1 = PC_11;
using C4_2 = PC_12;
using C5_1 = PE_5;
using C5_2 = PD_7;
using C6_1 = PE_3;
using C6_2 = PE_4;
using RF_ON = PC_7;
using PWR_ON = PD_15;
using U3_RW = PD_12; // RS-485 RW
Спойлер
Код: Выделить всё
// Ноги SWD
using CSWD_PINS = ConfigList<PinMode::AF_PushPull_LowSpeed_PullDown<0x0>, PA_14, // PA14=SWCLK
PinMode::AF_PushPull_VeryHighSpeed_PullUp<0x0>, PA_13>; // PA13=SWDIO
// Ноги Ethernet
using CETH_PINS = ConfigList<PinMode::AF_PushPull_HighSpeed<11>,
PA_2, PC_1, PB_11, PB_12, PB_13, // PA2=RMII_MDIO, PC1=RMII_MDC, PB11= TX_EN, PB12=TXD0, PB13=TXD1
PA_1, PA_7, PC_4, PC_5 >; // PA1=REF_CLK, PA7=CRS_DV, PC4=RXD0, PC5=RXD1
// Ноги USB
using CUSB_PINS = ConfigList< PinMode::AF_PushPull_HighSpeed<10>, PA_11, PA_12, // PA11=USBDM, PA12=USBDP
PinMode::Input_Floating, PA_9>; // PA9=VBUS
// Ноги оптопереключателей
using COPTO_PINS = ConfigList<PinMode::Input_PullUp,
S1_2, S1_3, S2_2, S2_3, S3_2, S3_3, S4_2, S4_3, S5_2, S5_3, S6_2, S6_3,
PinMode::PushPull_LowSpeed<0>,
C1_1, C1_2, C2_1, C2_2, C3_1, C3_2, C4_1, C4_2, C5_1, C5_2, C6_1, C6_2 >;
// Запускаем собственно процесс конфигурации
ConfigList< CSWD_PINS, CETH_PINS, CUSB_PINS, COPTO_PINS,
PinMode::PushPull_LowSpeed<1>, PA_15, // PA15=LED_HDD
PinMode::PushPull_LowSpeed<0>,
RF_ON, U3_RW, PWR_ON, // PD12=U3_RW=RS-485-RW
PinMode::AF_PushPull_LowSpeed<7>, PB_10, PD_9, // PB10=USART3_TX, PD9=USART3_RX
PinMode::Input_Floating, CfgCmd::AllUnusedPins
>::pwr_config();
Спойлер
Код: Выделить всё
MOVS R3,#+36
LDR.N R1,??__low_level_init_0+0x30 ;; 0x40020000
LDR.N R2,??__low_level_init_0+0x34 ;; 0x6a808028
LDR.W R12,??__low_level_init_0+0x38 ;; 0xe808028
STR R2,[R1, #+0]
STRB R3,[R1, #+15]
STR R12,[R1, #+8]
MOV R3,#+696320
LDR.N R2,??__low_level_init_0+0x3C ;; 0xb0000bb0
STR R2,[R1, #+32]
STR R3,[R1, #+36]
MOV R2,#-2147450880
STR R2,[R1, #+24]
MOVW R2,#+2568
LDR.N R3,??__low_level_init_0+0x40 ;; 0x1404a08
STR R3,[R1, #+2048]
STRH R2,[R1, #+2056]
LDR.N R3,??__low_level_init_0+0x44 ;; 0xbb00b0
LDR.N R2,??__low_level_init_0+0x48 ;; 0xaa41440
STR R3,[R1, #+2080]
STR R2,[R1, #+1024]
MOV R2,#+176160768
LDR.N R3,??__low_level_init_0+0x4C ;; 0x14100
STR R3,[R1, #+1036]
STR R2,[R1, #+1032]
LDR.N R3,??__low_level_init_0+0x50 ;; 0xbbb700
LDR.N R2,??__low_level_init_0+0x54 ;; 0x41084050
STR R3,[R1, #+1060]
STR R2,[R1, #+3072]
MOVW R3,#+5381
STRH R3,[R1, #+3084]
MOVS R2,#+112
STRB R2,[R1, #+3108]
MOV R3,#+1344
LDR.N R1,??__low_level_init_0+0x58 ;; 0x40021000
STRH R3,[R1, #+0]
MOVW R2,#+4117
STRH R2,[R1, #+12]Добавлено after 17 minutes 9 seconds:
[uquote="Reflector",url="/forum/viewtopic.php?p=3904002#p3904002"]Можно и мк с LTDC взять, я недавно H750 к монитору подключал. Вот список пинов для RGB565:
Код: Выделить всё
PA3, PA4, PA6, PA10, PA11, PB0, PB1, PB8, PB9, PB10, PB11, PC0, PC6, PC7, PD3, PD10, PE11, PE15Спойлер
Код: Выделить всё
// Режимы для ног LTDC удобно отдельно описать
using CLTDC = ConfigList<PinMode::AF_PushPull_HighSpeed<9>,
PA_3, // и другие пины AF9
PinMode::AF_PushPull_HighSpeed<10>,
PA_4, // и другие пины AF10
PinMode::AF_PushPull_HighSpeed<14>,
PA_6, // и другие пины AF14
>;
// И затем добавить в общую конфигурацию чипа
ConfigList< CLTDC,
PinMode::Analog, CfgCmd::AllUnusedPins
>::pwr_config();- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="VladislavS",url="/forum/viewtopic.php?p=3904012#p3904012"]а я бы уже законфигурил.[/uquote]
Даже не знаю... Разве если для каждого регистра каждого порта хотя бы по пол экрана кода написать, как a5021 делает, не будет нагляднее?
Даже не знаю... Разве если для каждого регистра каждого порта хотя бы по пол экрана кода написать, как a5021 делает, не будет нагляднее?
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
VladislavS, то, чем ты постоянно хвалишься, работает ТОЛЬКО у тебя!
Вот выложил бы ты на гитхаб под лицензией GPL свое творчество - можно было бы и обсуждать. А так — толку от этой писькомерки?
Вот выложил бы ты на гитхаб под лицензией GPL свое творчество - можно было бы и обсуждать. А так — толку от этой писькомерки?
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="VladislavS",url="/forum/viewtopic.php?p=3903948#p3903948"]Кроме как какахами метаться сами то умеете чего?[/uquote]
Предыдущие неск. дней месье прямо из летаргии сюда строчил? Не приходя в сознание?
Предыдущие неск. дней месье прямо из летаргии сюда строчил? Не приходя в сознание?
Настроить порты это не сложно библиотеки не нужны.
Все это на си прогается легко при чем без каких либо оберток.
Все это на си прогается легко при чем без каких либо оберток.
Последний раз редактировалось Oxford Пт окт 09, 2020 12:28:40, всего редактировалось 3 раза.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="Reflector",url="/forum/viewtopic.php?p=3904029#p3904029"]Разве если для каждого регистра каждого порта хотя бы по пол экрана кода написать, как a5021 делает, не будет нагляднее?
[/uquote]
Нагляднее, читабельнее и проще в поддержке.
Нагляднее, читабельнее и проще в поддержке.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3904037#p3904037"]VladislavS, то, чем ты постоянно хвалишься, работает ТОЛЬКО у тебя![/uquote]Странно. Пользуюсь тем же языком программирования, теми же компиляторами что и все, а работает только у меня. Как так то?
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3904037#p3904037"]Вот выложил бы ты на гитхаб под лицензией GPL свое творчество - можно было бы и обсуждать.[/uquote]Пинкод от банковской карты туда же положить?
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3904037#p3904037"]А так — толку от этой писькомерки?[/uquote]Чтобы люди видели как оно может быть и не верили бездумно клише "C++ это оверхед", "C++ в эмбедде не место, им никто не пользуется" и прочей зомбочуши.
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3904037#p3904037"]Вот выложил бы ты на гитхаб под лицензией GPL свое творчество - можно было бы и обсуждать.[/uquote]Пинкод от банковской карты туда же положить?
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3904037#p3904037"]А так — толку от этой писькомерки?[/uquote]Чтобы люди видели как оно может быть и не верили бездумно клише "C++ это оверхед", "C++ в эмбедде не место, им никто не пользуется" и прочей зомбочуши.
Она и есть чушь, чтобы настроить порты вам нужно писать либу. Спасибо не надо. Как и все остальное дерьмо.
Тут один уже хвалился либой для программного fsmc, то что делается на си без каких либо говнолиб.
Тут один уже хвалился либой для программного fsmc, то что делается на си без каких либо говнолиб.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Oxford",url="/forum/viewtopic.php?p=3904050#p3904050"]Она и есть чушь, чтобы настроить порты вам нужно писать либу.[/uquote]Зачем? Она же уже написана. Ей нужно просто пользоваться.
[uquote="Oxford",url="/forum/viewtopic.php?p=3904050#p3904050"]Спасибо не надо.[/uquote]Ну вам не надо, а за других не вам решать.
[uquote="Oxford",url="/forum/viewtopic.php?p=3904050#p3904050"]Как и все остальное дерьмо. Тут один уже хвалился либой для программного fsmc, то что делается на си без каких либо говнолиб.[/uquote]Если вокруг вас всё кажется дерьмом, рекомендую оглянуться - не обосрались ли...
[uquote="Oxford",url="/forum/viewtopic.php?p=3904050#p3904050"]Спасибо не надо.[/uquote]Ну вам не надо, а за других не вам решать.
[uquote="Oxford",url="/forum/viewtopic.php?p=3904050#p3904050"]Как и все остальное дерьмо. Тут один уже хвалился либой для программного fsmc, то что делается на си без каких либо говнолиб.[/uquote]Если вокруг вас всё кажется дерьмом, рекомендую оглянуться - не обосрались ли...


